Gentoo Archives: gentoo-commits

From: "Александр Берсенев" <bay@×××××××××.ru>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/autodep:master commit in: src/autodep/package_utils/, src/hook_lib/, src/autodep/logfs/
Date: Mon, 05 Sep 2011 16:11:45
Message-Id: 44333dfc32156bb41dc6839121a532950be2b993.bay@gentoo
1 commit: 44333dfc32156bb41dc6839121a532950be2b993
2 Author: Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
3 AuthorDate: Mon Sep 5 22:10:00 2011 +0000
4 Commit: Александр Берсенев <bay <AT> hackerdom <DOT> ru>
5 CommitDate: Mon Sep 5 22:10:00 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=44333dfc
7
8 fixed a bug when hook library intercepts a call while not initialized
9
10 ---
11 src/autodep/logfs/logger_hooklib.py | 1 +
12 .../package_utils/portage_misc_functions.py | 12 +++
13 src/hook_lib/file_hook.c | 84 +++++++++++---------
14 3 files changed, 60 insertions(+), 37 deletions(-)
15
16 diff --git a/src/autodep/logfs/logger_hooklib.py b/src/autodep/logfs/logger_hooklib.py
17 index c6af4e4..80f0cd4 100644
18 --- a/src/autodep/logfs/logger_hooklib.py
19 +++ b/src/autodep/logfs/logger_hooklib.py
20 @@ -7,6 +7,7 @@ class logger:
21 socketname=''
22 # we can't use just file_hook.so here
23 # because program may change LD_LIBRARY_PATH
24 + #hooklibpath='/home/bay/gsoc/src/hook_lib/file_hook.so'
25 hooklibpath='/usr/lib/file_hook.so'
26
27 def __init__(self,socketname):
28
29 diff --git a/src/autodep/package_utils/portage_misc_functions.py b/src/autodep/package_utils/portage_misc_functions.py
30 index fd00be9..29fcfec 100644
31 --- a/src/autodep/package_utils/portage_misc_functions.py
32 +++ b/src/autodep/package_utils/portage_misc_functions.py
33 @@ -308,6 +308,18 @@ class portage_api:
34 ret.append(pkg)
35 return ret
36
37 + def get_system_packages_rdeps(self):
38 + """
39 + returns runtime dependencies of packages from system set
40 +
41 + :returns: **list** of package names
42 + """
43 + ret=set()
44 +
45 + for pkg in self.get_system_packages_list():
46 + ret=ret.union(self.get_deps(pkg,["RDEPEND"]))
47 + return list(ret)
48 +
49 def parse_emerge_args(self,args):
50 """
51 call emerge arguments parser
52
53 diff --git a/src/hook_lib/file_hook.c b/src/hook_lib/file_hook.c
54 index 09cc2e8..9e9bddc 100644
55 --- a/src/hook_lib/file_hook.c
56 +++ b/src/hook_lib/file_hook.c
57 @@ -79,6 +79,8 @@ pid_t (*_fork)();
58 int (*_setenv)(const char *name, const char *value, int overwrite);
59 int (*_close)(int fd); // we hooking this, because some programs closes our socket
60
61 +int is_initialized=0; // when init not lauched yet we should no do any actions
62 +
63 int log_socket=-1;
64
65 char ld_preload_orig[MAXPATHLEN];
66 @@ -87,44 +89,10 @@ char log_socket_name[MAXSOCKETPATHLEN];
67 char ld_preload_env[MAXENVITEMSIZE]; // value: LD_PRELOAD=ld_preload_orig
68 char log_socket_env[MAXENVITEMSIZE]; // value: LOG_SOCKET=log_socket_name
69
70 -void __doconnect(){
71 - if(strlen(log_socket_name)>=MAXSOCKETPATHLEN) {
72 - fprintf(stderr,"Unable to create a unix-socket %s: socket name is too long,exiting\n", log_socket_name);
73 - exit(1);
74 - }
75 -
76 - log_socket=socket(AF_UNIX, SOCK_SEQPACKET, 0);
77 - if(log_socket==-1) {
78 - fprintf(stderr,"Unable to create a unix-socket %s: %s\n", log_socket_name, strerror(errno));
79 - exit(1);
80 - }
81 -
82 - struct sockaddr_un serveraddr;
83 - memset(&serveraddr, 0, sizeof(serveraddr));
84 - serveraddr.sun_family = AF_UNIX;
85 - strcpy(serveraddr.sun_path, log_socket_name);
86 -
87 -
88 - int ret=connect(log_socket, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
89 - if(ret==-1) {
90 - fprintf(stderr,"Unable to connect a unix-socket %s: %s\n",log_socket_name, strerror(errno));
91 - fflush(stderr);
92 - //execlp("/bin/bash","/bin/bash",NULL);
93 - exit(1);
94 - }
95 -}
96 +void __init_hooks() {
97 + if(is_initialized)
98 + return;
99
100 -void __dodisconnect() {
101 - close(log_socket);
102 -}
103 -
104 -void __doreconnect() {
105 - __doconnect();
106 - __dodisconnect();
107 -}
108 -
109 -// this fucnction executes when library is loaded
110 -void _init() {
111 char *log_socket_val=getenv("LOG_SOCKET");
112
113 if(log_socket_val==NULL) {
114 @@ -207,8 +175,50 @@ void _init() {
115
116 snprintf(ld_preload_env,MAXENVITEMSIZE,"LD_PRELOAD=%s",ld_preload_orig);
117 snprintf(log_socket_env,MAXENVITEMSIZE,"LOG_SOCKET=%s",log_socket_name);
118 +
119 + is_initialized=1;
120 +}
121
122 +void __doconnect(){
123 + if(! is_initialized)
124 + __init_hooks();
125 + if(strlen(log_socket_name)>=MAXSOCKETPATHLEN) {
126 + fprintf(stderr,"Unable to create a unix-socket %s: socket name is too long,exiting\n", log_socket_name);
127 + exit(1);
128 + }
129 +
130 + log_socket=socket(AF_UNIX, SOCK_SEQPACKET, 0);
131 + if(log_socket==-1) {
132 + fprintf(stderr,"Unable to create a unix-socket %s: %s\n", log_socket_name, strerror(errno));
133 + exit(1);
134 + }
135
136 + struct sockaddr_un serveraddr;
137 + memset(&serveraddr, 0, sizeof(serveraddr));
138 + serveraddr.sun_family = AF_UNIX;
139 + strcpy(serveraddr.sun_path, log_socket_name);
140 +
141 +
142 + int ret=connect(log_socket, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
143 + if(ret==-1) {
144 + fprintf(stderr,"Unable to connect a unix-socket %s: %s\n",log_socket_name, strerror(errno));
145 + fflush(stderr);
146 + exit(1);
147 + }
148 +}
149 +
150 +void __dodisconnect() {
151 + close(log_socket);
152 +}
153 +
154 +void __doreconnect() {
155 + __doconnect();
156 + __dodisconnect();
157 +}
158 +
159 +// this fucnction executes when library is loaded
160 +void _init() {
161 + __init_hooks();
162 __doconnect();
163 }