diff options
author | Glenn Washburn <development@efficientek.com> | 2019-08-21 15:28:35 -0500 |
---|---|---|
committer | Glenn Washburn <development@efficientek.com> | 2019-08-21 15:28:35 -0500 |
commit | 81554c4e40b82af32732297c300c230038f38bfc (patch) | |
tree | 9ccbb6458cb2092235b6cc49bd4151a5048e13b5 /src/libtrace | |
parent | fix #2912 and update CONTRIBUTING.md (diff) | |
download | firejail-81554c4e40b82af32732297c300c230038f38bfc.tar.gz firejail-81554c4e40b82af32732297c300c230038f38bfc.tar.zst firejail-81554c4e40b82af32732297c300c230038f38bfc.zip |
Fix revert of previous trace fix. The issue was that programs were crashing because libtrace hooked libc calls were being executed before the libtrace library was initialized. This was due to other loaded libraries being initialized first.
Diffstat (limited to 'src/libtrace')
-rw-r--r-- | src/libtrace/libtrace.c | 237 |
1 files changed, 51 insertions, 186 deletions
diff --git a/src/libtrace/libtrace.c b/src/libtrace/libtrace.c index 71a1234cc..745dd2260 100644 --- a/src/libtrace/libtrace.c +++ b/src/libtrace/libtrace.c | |||
@@ -34,6 +34,13 @@ | |||
34 | #include <dirent.h> | 34 | #include <dirent.h> |
35 | #include <limits.h> | 35 | #include <limits.h> |
36 | 36 | ||
37 | #define tprintf(fp, args...) \ | ||
38 | do { \ | ||
39 | if (!fp)\ | ||
40 | init(); \ | ||
41 | fprintf(fp, args); \ | ||
42 | } while(0) | ||
43 | |||
37 | // break recursivity on fopen call | 44 | // break recursivity on fopen call |
38 | typedef FILE *(*orig_fopen_t)(const char *pathname, const char *mode); | 45 | typedef FILE *(*orig_fopen_t)(const char *pathname, const char *mode); |
39 | static orig_fopen_t orig_fopen = NULL; | 46 | static orig_fopen_t orig_fopen = NULL; |
@@ -43,29 +50,29 @@ static orig_fopen64_t orig_fopen64 = NULL; | |||
43 | // | 50 | // |
44 | // library constructor/destructor | 51 | // library constructor/destructor |
45 | // | 52 | // |
46 | //#define PRINTF_DEVTTY | ||
47 | #ifdef PRINTF_DEVTTY | ||
48 | // Replacing printf with fprintf to /dev/tty in order to fix #561 | 53 | // Replacing printf with fprintf to /dev/tty in order to fix #561 |
49 | // In some cases this crashes the program running in the sandbox. | 54 | // If you really want to turn it off, comment the following line, but its a |
50 | // Example: | 55 | // really bad idea. |
51 | // $ firejail --trace mkdir ttt | 56 | #define PRINTF_DEVTTY |
52 | // logs the following error in syslog: | ||
53 | // debian kernel: [18521.399073] mkdir[12206]: segfault at 0 ip 00007f77ebf41f6b sp 00007ffe1a0161e0 error 4 in libc-2.24.so[7f77ebe4b000+195000] | ||
54 | static FILE *ftty = NULL; | 57 | static FILE *ftty = NULL; |
55 | #endif | ||
56 | static pid_t mypid = 0; | 58 | static pid_t mypid = 0; |
57 | #define MAXNAME 16 | 59 | #define MAXNAME 16 |
58 | static char myname[MAXNAME] = {'\0', }; | 60 | static char myname[MAXNAME] = {'\0', }; |
59 | 61 | ||
60 | static void init(void) __attribute__((constructor)); | 62 | static void init(void) __attribute__((constructor)); |
61 | void init(void) { | 63 | void init(void) { |
64 | if (ftty) | ||
65 | return; | ||
66 | |||
62 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | 67 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
63 | 68 | ||
64 | // tty | 69 | // tty |
65 | #ifdef PRINTF_DEVTTY | 70 | #ifdef PRINTF_DEVTTY |
66 | ftty = orig_fopen("/dev/tty", "w"); | 71 | ftty = orig_fopen("/dev/tty", "w"); |
67 | printf("*** ftty %p ***\n", ftty); | 72 | #else |
73 | ftty = stderr; | ||
68 | #endif | 74 | #endif |
75 | tprintf(ftty, "=== tracelib init() === \n"); | ||
69 | 76 | ||
70 | // pid | 77 | // pid |
71 | mypid = getpid(); | 78 | mypid = getpid(); |
@@ -91,9 +98,7 @@ printf("*** ftty %p ***\n", ftty); | |||
91 | 98 | ||
92 | static void fini(void) __attribute__((destructor)); | 99 | static void fini(void) __attribute__((destructor)); |
93 | void fini(void) { | 100 | void fini(void) { |
94 | #ifdef PRINTF_DEVTTY | ||
95 | fclose(ftty); | 101 | fclose(ftty); |
96 | #endif | ||
97 | } | 102 | } |
98 | 103 | ||
99 | // | 104 | // |
@@ -240,43 +245,23 @@ static char *translate(XTable *table, int val) { | |||
240 | static void print_sockaddr(int sockfd, const char *call, const struct sockaddr *addr, int rv) { | 245 | static void print_sockaddr(int sockfd, const char *call, const struct sockaddr *addr, int rv) { |
241 | if (addr->sa_family == AF_INET) { | 246 | if (addr->sa_family == AF_INET) { |
242 | struct sockaddr_in *a = (struct sockaddr_in *) addr; | 247 | struct sockaddr_in *a = (struct sockaddr_in *) addr; |
243 | #ifdef PRINTF_DEVTTY | 248 | tprintf(ftty, "%u:%s:%s %d %s port %u:%d\n", mypid, myname, call, sockfd, inet_ntoa(a->sin_addr), ntohs(a->sin_port), rv); |
244 | fprintf(ftty, "%u:%s:%s %d %s port %u:%d\n", mypid, myname, call, sockfd, inet_ntoa(a->sin_addr), ntohs(a->sin_port), rv); | ||
245 | #else | ||
246 | printf("%u:%s:%s %d %s port %u:%d\n", mypid, myname, call, sockfd, inet_ntoa(a->sin_addr), ntohs(a->sin_port), rv); | ||
247 | #endif | ||
248 | } | 249 | } |
249 | else if (addr->sa_family == AF_INET6) { | 250 | else if (addr->sa_family == AF_INET6) { |
250 | struct sockaddr_in6 *a = (struct sockaddr_in6 *) addr; | 251 | struct sockaddr_in6 *a = (struct sockaddr_in6 *) addr; |
251 | char str[INET6_ADDRSTRLEN]; | 252 | char str[INET6_ADDRSTRLEN]; |
252 | inet_ntop(AF_INET6, &(a->sin6_addr), str, INET6_ADDRSTRLEN); | 253 | inet_ntop(AF_INET6, &(a->sin6_addr), str, INET6_ADDRSTRLEN); |
253 | #ifdef PRINTF_DEVTTY | 254 | tprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, str, rv); |
254 | fprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, str, rv); | ||
255 | #else | ||
256 | printf("%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, str, rv); | ||
257 | #endif | ||
258 | } | 255 | } |
259 | else if (addr->sa_family == AF_UNIX) { | 256 | else if (addr->sa_family == AF_UNIX) { |
260 | struct sockaddr_un *a = (struct sockaddr_un *) addr; | 257 | struct sockaddr_un *a = (struct sockaddr_un *) addr; |
261 | if (a->sun_path[0]) | 258 | if (a->sun_path[0]) |
262 | #ifdef PRINTF_DEVTTY | 259 | tprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, a->sun_path, rv); |
263 | fprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, a->sun_path, rv); | ||
264 | #else | ||
265 | printf("%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, a->sun_path, rv); | ||
266 | #endif | ||
267 | else | 260 | else |
268 | #ifdef PRINTF_DEVTTY | 261 | tprintf(ftty, "%u:%s:%s %d @%s:%d\n", mypid, myname, call, sockfd, a->sun_path + 1, rv); |
269 | fprintf(ftty, "%u:%s:%s %d @%s:%d\n", mypid, myname, call, sockfd, a->sun_path + 1, rv); | ||
270 | #else | ||
271 | printf("%u:%s:%s %d @%s:%d\n", mypid, myname, call, sockfd, a->sun_path + 1, rv); | ||
272 | #endif | ||
273 | } | 262 | } |
274 | else { | 263 | else { |
275 | #ifdef PRINTF_DEVTTY | 264 | tprintf(ftty, "%u:%s:%s %d family %d:%d\n", mypid, myname, call, sockfd, addr->sa_family, rv); |
276 | fprintf(ftty, "%u:%s:%s %d family %d:%d\n", mypid, myname, call, sockfd, addr->sa_family, rv); | ||
277 | #else | ||
278 | printf("%u:%s:%s %d family %d:%d\n", mypid, myname, call, sockfd, addr->sa_family, rv); | ||
279 | #endif | ||
280 | } | 265 | } |
281 | } | 266 | } |
282 | 267 | ||
@@ -292,11 +277,7 @@ int open(const char *pathname, int flags, mode_t mode) { | |||
292 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); | 277 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); |
293 | 278 | ||
294 | int rv = orig_open(pathname, flags, mode); | 279 | int rv = orig_open(pathname, flags, mode); |
295 | #ifdef PRINTF_DEVTTY | 280 | tprintf(ftty, "%u:%s:open %s:%d\n", mypid, myname, pathname, rv); |
296 | fprintf(ftty, "%u:%s:open %s:%d\n", mypid, myname, pathname, rv); | ||
297 | #else | ||
298 | printf("%u:%s:open %s:%d\n", mypid, myname, pathname, rv); | ||
299 | #endif | ||
300 | return rv; | 281 | return rv; |
301 | } | 282 | } |
302 | 283 | ||
@@ -307,11 +288,7 @@ int open64(const char *pathname, int flags, mode_t mode) { | |||
307 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); | 288 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); |
308 | 289 | ||
309 | int rv = orig_open64(pathname, flags, mode); | 290 | int rv = orig_open64(pathname, flags, mode); |
310 | #ifdef PRINTF_DEVTTY | 291 | tprintf(ftty, "%u:%s:open64 %s:%d\n", mypid, myname, pathname, rv); |
311 | fprintf(ftty, "%u:%s:open64 %s:%d\n", mypid, myname, pathname, rv); | ||
312 | #else | ||
313 | printf("%u:%s:open64 %s:%d\n", mypid, myname, pathname, rv); | ||
314 | #endif | ||
315 | return rv; | 292 | return rv; |
316 | } | 293 | } |
317 | 294 | ||
@@ -323,11 +300,7 @@ int openat(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
323 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); | 300 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); |
324 | 301 | ||
325 | int rv = orig_openat(dirfd, pathname, flags, mode); | 302 | int rv = orig_openat(dirfd, pathname, flags, mode); |
326 | #ifdef PRINTF_DEVTTY | 303 | tprintf(ftty, "%u:%s:openat %s:%d\n", mypid, myname, pathname, rv); |
327 | fprintf(ftty, "%u:%s:openat %s:%d\n", mypid, myname, pathname, rv); | ||
328 | #else | ||
329 | printf("%u:%s:openat %s:%d\n", mypid, myname, pathname, rv); | ||
330 | #endif | ||
331 | return rv; | 304 | return rv; |
332 | } | 305 | } |
333 | 306 | ||
@@ -338,11 +311,7 @@ int openat64(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
338 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); | 311 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); |
339 | 312 | ||
340 | int rv = orig_openat64(dirfd, pathname, flags, mode); | 313 | int rv = orig_openat64(dirfd, pathname, flags, mode); |
341 | #ifdef PRINTF_DEVTTY | 314 | tprintf(ftty, "%u:%s:openat64 %s:%d\n", mypid, myname, pathname, rv); |
342 | fprintf(ftty, "%u:%s:openat64 %s:%d\n", mypid, myname, pathname, rv); | ||
343 | #else | ||
344 | printf("%u:%s:openat64 %s:%d\n", mypid, myname, pathname, rv); | ||
345 | #endif | ||
346 | return rv; | 315 | return rv; |
347 | } | 316 | } |
348 | 317 | ||
@@ -353,11 +322,7 @@ FILE *fopen(const char *pathname, const char *mode) { | |||
353 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | 322 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
354 | 323 | ||
355 | FILE *rv = orig_fopen(pathname, mode); | 324 | FILE *rv = orig_fopen(pathname, mode); |
356 | #ifdef PRINTF_DEVTTY | 325 | tprintf(ftty, "%u:%s:fopen %s:%p\n", mypid, myname, pathname, rv); |
357 | fprintf(ftty, "%u:%s:fopen %s:%p\n", mypid, myname, pathname, rv); | ||
358 | #else | ||
359 | printf("%u:%s:fopen %s:%p\n", mypid, myname, pathname, rv); | ||
360 | #endif | ||
361 | return rv; | 326 | return rv; |
362 | } | 327 | } |
363 | 328 | ||
@@ -367,11 +332,7 @@ FILE *fopen64(const char *pathname, const char *mode) { | |||
367 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); | 332 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); |
368 | 333 | ||
369 | FILE *rv = orig_fopen64(pathname, mode); | 334 | FILE *rv = orig_fopen64(pathname, mode); |
370 | #ifdef PRINTF_DEVTTY | 335 | tprintf(ftty, "%u:%s:fopen64 %s:%p\n", mypid, myname, pathname, rv); |
371 | fprintf(ftty, "%u:%s:fopen64 %s:%p\n", mypid, myname, pathname, rv); | ||
372 | #else | ||
373 | printf("%u:%s:fopen64 %s:%p\n", mypid, myname, pathname, rv); | ||
374 | #endif | ||
375 | return rv; | 336 | return rv; |
376 | } | 337 | } |
377 | #endif /* __GLIBC__ */ | 338 | #endif /* __GLIBC__ */ |
@@ -385,11 +346,7 @@ FILE *freopen(const char *pathname, const char *mode, FILE *stream) { | |||
385 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); | 346 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); |
386 | 347 | ||
387 | FILE *rv = orig_freopen(pathname, mode, stream); | 348 | FILE *rv = orig_freopen(pathname, mode, stream); |
388 | #ifdef PRINTF_DEVTTY | 349 | tprintf(ftty, "%u:%s:freopen %s:%p\n", mypid, myname, pathname, rv); |
389 | fprintf(ftty, "%u:%s:freopen %s:%p\n", mypid, myname, pathname, rv); | ||
390 | #else | ||
391 | printf("%u:%s:freopen %s:%p\n", mypid, myname, pathname, rv); | ||
392 | #endif | ||
393 | return rv; | 350 | return rv; |
394 | } | 351 | } |
395 | 352 | ||
@@ -401,11 +358,7 @@ FILE *freopen64(const char *pathname, const char *mode, FILE *stream) { | |||
401 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); | 358 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); |
402 | 359 | ||
403 | FILE *rv = orig_freopen64(pathname, mode, stream); | 360 | FILE *rv = orig_freopen64(pathname, mode, stream); |
404 | #ifdef PRINTF_DEVTTY | 361 | tprintf(ftty, "%u:%s:freopen64 %s:%p\n", mypid, myname, pathname, rv); |
405 | fprintf(ftty, "%u:%s:freopen64 %s:%p\n", mypid, myname, pathname, rv); | ||
406 | #else | ||
407 | printf("%u:%s:freopen64 %s:%p\n", mypid, myname, pathname, rv); | ||
408 | #endif | ||
409 | return rv; | 362 | return rv; |
410 | } | 363 | } |
411 | #endif /* __GLIBC__ */ | 364 | #endif /* __GLIBC__ */ |
@@ -418,11 +371,7 @@ int unlink(const char *pathname) { | |||
418 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); | 371 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); |
419 | 372 | ||
420 | int rv = orig_unlink(pathname); | 373 | int rv = orig_unlink(pathname); |
421 | #ifdef PRINTF_DEVTTY | 374 | tprintf(ftty, "%u:%s:unlink %s:%d\n", mypid, myname, pathname, rv); |
422 | fprintf(ftty, "%u:%s:unlink %s:%d\n", mypid, myname, pathname, rv); | ||
423 | #else | ||
424 | printf("%u:%s:unlink %s:%d\n", mypid, myname, pathname, rv); | ||
425 | #endif | ||
426 | return rv; | 375 | return rv; |
427 | } | 376 | } |
428 | 377 | ||
@@ -433,11 +382,7 @@ int unlinkat(int dirfd, const char *pathname, int flags) { | |||
433 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); | 382 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); |
434 | 383 | ||
435 | int rv = orig_unlinkat(dirfd, pathname, flags); | 384 | int rv = orig_unlinkat(dirfd, pathname, flags); |
436 | #ifdef PRINTF_DEVTTY | 385 | tprintf(ftty, "%u:%s:unlinkat %s:%d\n", mypid, myname, pathname, rv); |
437 | fprintf(ftty, "%u:%s:unlinkat %s:%d\n", mypid, myname, pathname, rv); | ||
438 | #else | ||
439 | printf("%u:%s:unlinkat %s:%d\n", mypid, myname, pathname, rv); | ||
440 | #endif | ||
441 | return rv; | 386 | return rv; |
442 | } | 387 | } |
443 | 388 | ||
@@ -449,11 +394,7 @@ int mkdir(const char *pathname, mode_t mode) { | |||
449 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); | 394 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); |
450 | 395 | ||
451 | int rv = orig_mkdir(pathname, mode); | 396 | int rv = orig_mkdir(pathname, mode); |
452 | #ifdef PRINTF_DEVTTY | 397 | tprintf(ftty, "%u:%s:mkdir %s:%d\n", mypid, myname, pathname, rv); |
453 | fprintf(ftty, "%u:%s:mkdir %s:%d\n", mypid, myname, pathname, rv); | ||
454 | #else | ||
455 | printf("%u:%s:mkdir %s:%d\n", mypid, myname, pathname, rv); | ||
456 | #endif | ||
457 | return rv; | 398 | return rv; |
458 | } | 399 | } |
459 | 400 | ||
@@ -464,11 +405,7 @@ int mkdirat(int dirfd, const char *pathname, mode_t mode) { | |||
464 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); | 405 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); |
465 | 406 | ||
466 | int rv = orig_mkdirat(dirfd, pathname, mode); | 407 | int rv = orig_mkdirat(dirfd, pathname, mode); |
467 | #ifdef PRINTF_DEVTTY | 408 | tprintf(ftty, "%u:%s:mkdirat %s:%d\n", mypid, myname, pathname, rv); |
468 | fprintf(ftty, "%u:%s:mkdirat %s:%d\n", mypid, myname, pathname, rv); | ||
469 | #else | ||
470 | printf("%u:%s:mkdirat %s:%d\n", mypid, myname, pathname, rv); | ||
471 | #endif | ||
472 | return rv; | 409 | return rv; |
473 | } | 410 | } |
474 | 411 | ||
@@ -479,11 +416,7 @@ int rmdir(const char *pathname) { | |||
479 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); | 416 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); |
480 | 417 | ||
481 | int rv = orig_rmdir(pathname); | 418 | int rv = orig_rmdir(pathname); |
482 | #ifdef PRINTF_DEVTTY | 419 | tprintf(ftty, "%u:%s:rmdir %s:%d\n", mypid, myname, pathname, rv); |
483 | fprintf(ftty, "%u:%s:rmdir %s:%d\n", mypid, myname, pathname, rv); | ||
484 | #else | ||
485 | printf("%u:%s:rmdir %s:%d\n", mypid, myname, pathname, rv); | ||
486 | #endif | ||
487 | return rv; | 420 | return rv; |
488 | } | 421 | } |
489 | 422 | ||
@@ -495,11 +428,7 @@ int stat(const char *pathname, struct stat *statbuf) { | |||
495 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); | 428 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); |
496 | 429 | ||
497 | int rv = orig_stat(pathname, statbuf); | 430 | int rv = orig_stat(pathname, statbuf); |
498 | #ifdef PRINTF_DEVTTY | 431 | tprintf(ftty, "%u:%s:stat %s:%d\n", mypid, myname, pathname, rv); |
499 | fprintf(ftty, "%u:%s:stat %s:%d\n", mypid, myname, pathname, rv); | ||
500 | #else | ||
501 | printf("%u:%s:stat %s:%d\n", mypid, myname, pathname, rv); | ||
502 | #endif | ||
503 | return rv; | 432 | return rv; |
504 | } | 433 | } |
505 | 434 | ||
@@ -511,11 +440,7 @@ int stat64(const char *pathname, struct stat64 *statbuf) { | |||
511 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); | 440 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); |
512 | 441 | ||
513 | int rv = orig_stat64(pathname, statbuf); | 442 | int rv = orig_stat64(pathname, statbuf); |
514 | #ifdef PRINTF_DEVTTY | 443 | tprintf(ftty, "%u:%s:stat64 %s:%d\n", mypid, myname, pathname, rv); |
515 | fprintf(ftty, "%u:%s:stat64 %s:%d\n", mypid, myname, pathname, rv); | ||
516 | #else | ||
517 | printf("%u:%s:stat64 %s:%d\n", mypid, myname, pathname, rv); | ||
518 | #endif | ||
519 | return rv; | 444 | return rv; |
520 | } | 445 | } |
521 | #endif /* __GLIBC__ */ | 446 | #endif /* __GLIBC__ */ |
@@ -528,11 +453,7 @@ int lstat(const char *pathname, struct stat *statbuf) { | |||
528 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); | 453 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); |
529 | 454 | ||
530 | int rv = orig_lstat(pathname, statbuf); | 455 | int rv = orig_lstat(pathname, statbuf); |
531 | #ifdef PRINTF_DEVTTY | 456 | tprintf(ftty, "%u:%s:lstat %s:%d\n", mypid, myname, pathname, rv); |
532 | fprintf(ftty, "%u:%s:lstat %s:%d\n", mypid, myname, pathname, rv); | ||
533 | #else | ||
534 | printf("%u:%s:lstat %s:%d\n", mypid, myname, pathname, rv); | ||
535 | #endif | ||
536 | return rv; | 457 | return rv; |
537 | } | 458 | } |
538 | 459 | ||
@@ -544,11 +465,7 @@ int lstat64(const char *pathname, struct stat64 *statbuf) { | |||
544 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); | 465 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); |
545 | 466 | ||
546 | int rv = orig_lstat64(pathname, statbuf); | 467 | int rv = orig_lstat64(pathname, statbuf); |
547 | #ifdef PRINTF_DEVTTY | 468 | tprintf(ftty, "%u:%s:lstat64 %s:%d\n", mypid, myname, pathname, rv); |
548 | fprintf(ftty, "%u:%s:lstat64 %s:%d\n", mypid, myname, pathname, rv); | ||
549 | #else | ||
550 | printf("%u:%s:lstat64 %s:%d\n", mypid, myname, pathname, rv); | ||
551 | #endif | ||
552 | return rv; | 469 | return rv; |
553 | } | 470 | } |
554 | #endif /* __GLIBC__ */ | 471 | #endif /* __GLIBC__ */ |
@@ -561,11 +478,7 @@ DIR *opendir(const char *pathname) { | |||
561 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); | 478 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); |
562 | 479 | ||
563 | DIR *rv = orig_opendir(pathname); | 480 | DIR *rv = orig_opendir(pathname); |
564 | #ifdef PRINTF_DEVTTY | 481 | tprintf(ftty, "%u:%s:opendir %s:%p\n", mypid, myname, pathname, rv); |
565 | fprintf(ftty, "%u:%s:opendir %s:%p\n", mypid, myname, pathname, rv); | ||
566 | #else | ||
567 | printf("%u:%s:opendir %s:%p\n", mypid, myname, pathname, rv); | ||
568 | #endif | ||
569 | return rv; | 482 | return rv; |
570 | } | 483 | } |
571 | 484 | ||
@@ -577,11 +490,7 @@ int access(const char *pathname, int mode) { | |||
577 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); | 490 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); |
578 | 491 | ||
579 | int rv = orig_access(pathname, mode); | 492 | int rv = orig_access(pathname, mode); |
580 | #ifdef PRINTF_DEVTTY | 493 | tprintf(ftty, "%u:%s:access %s:%d\n", mypid, myname, pathname, rv); |
581 | fprintf(ftty, "%u:%s:access %s:%d\n", mypid, myname, pathname, rv); | ||
582 | #else | ||
583 | printf("%u:%s:access %s:%d\n", mypid, myname, pathname, rv); | ||
584 | #endif | ||
585 | return rv; | 494 | return rv; |
586 | } | 495 | } |
587 | 496 | ||
@@ -639,11 +548,7 @@ int socket(int domain, int type, int protocol) { | |||
639 | sprintf(ptr, "%s", str); | 548 | sprintf(ptr, "%s", str); |
640 | } | 549 | } |
641 | 550 | ||
642 | #ifdef PRINTF_DEVTTY | 551 | tprintf(ftty, "%s:%d\n", socketbuf, rv); |
643 | fprintf(ftty, "%s:%d\n", socketbuf, rv); | ||
644 | #else | ||
645 | printf("%s:%d\n", socketbuf, rv); | ||
646 | #endif | ||
647 | return rv; | 552 | return rv; |
648 | } | 553 | } |
649 | 554 | ||
@@ -681,11 +586,7 @@ int system(const char *command) { | |||
681 | orig_system = (orig_system_t)dlsym(RTLD_NEXT, "system"); | 586 | orig_system = (orig_system_t)dlsym(RTLD_NEXT, "system"); |
682 | 587 | ||
683 | int rv = orig_system(command); | 588 | int rv = orig_system(command); |
684 | #ifdef PRINTF_DEVTTY | 589 | tprintf(ftty, "%u:%s:system %s:%d\n", mypid, myname, command, rv); |
685 | fprintf(ftty, "%u:%s:system %s:%d\n", mypid, myname, command, rv); | ||
686 | #else | ||
687 | printf("%u:%s:system %s:%d\n", mypid, myname, command, rv); | ||
688 | #endif | ||
689 | 590 | ||
690 | return rv; | 591 | return rv; |
691 | } | 592 | } |
@@ -697,11 +598,7 @@ int setuid(uid_t uid) { | |||
697 | orig_setuid = (orig_setuid_t)dlsym(RTLD_NEXT, "setuid"); | 598 | orig_setuid = (orig_setuid_t)dlsym(RTLD_NEXT, "setuid"); |
698 | 599 | ||
699 | int rv = orig_setuid(uid); | 600 | int rv = orig_setuid(uid); |
700 | #ifdef PRINTF_DEVTTY | 601 | tprintf(ftty, "%u:%s:setuid %d:%d\n", mypid, myname, uid, rv); |
701 | fprintf(ftty, "%u:%s:setuid %d:%d\n", mypid, myname, uid, rv); | ||
702 | #else | ||
703 | printf("%u:%s:setuid %d:%d\n", mypid, myname, uid, rv); | ||
704 | #endif | ||
705 | 602 | ||
706 | return rv; | 603 | return rv; |
707 | } | 604 | } |
@@ -713,11 +610,7 @@ int setgid(gid_t gid) { | |||
713 | orig_setgid = (orig_setgid_t)dlsym(RTLD_NEXT, "setgid"); | 610 | orig_setgid = (orig_setgid_t)dlsym(RTLD_NEXT, "setgid"); |
714 | 611 | ||
715 | int rv = orig_setgid(gid); | 612 | int rv = orig_setgid(gid); |
716 | #ifdef PRINTF_DEVTTY | 613 | tprintf(ftty, "%u:%s:setgid %d:%d\n", mypid, myname, gid, rv); |
717 | fprintf(ftty, "%u:%s:setgid %d:%d\n", mypid, myname, gid, rv); | ||
718 | #else | ||
719 | printf("%u:%s:setgid %d:%d\n", mypid, myname, gid, rv); | ||
720 | #endif | ||
721 | 614 | ||
722 | return rv; | 615 | return rv; |
723 | } | 616 | } |
@@ -729,11 +622,7 @@ int setfsuid(uid_t uid) { | |||
729 | orig_setfsuid = (orig_setfsuid_t)dlsym(RTLD_NEXT, "setfsuid"); | 622 | orig_setfsuid = (orig_setfsuid_t)dlsym(RTLD_NEXT, "setfsuid"); |
730 | 623 | ||
731 | int rv = orig_setfsuid(uid); | 624 | int rv = orig_setfsuid(uid); |
732 | #ifdef PRINTF_DEVTTY | 625 | tprintf(ftty, "%u:%s:setfsuid %d:%d\n", mypid, myname, uid, rv); |
733 | fprintf(ftty, "%u:%s:setfsuid %d:%d\n", mypid, myname, uid, rv); | ||
734 | #else | ||
735 | printf("%u:%s:setfsuid %d:%d\n", mypid, myname, uid, rv); | ||
736 | #endif | ||
737 | 626 | ||
738 | return rv; | 627 | return rv; |
739 | } | 628 | } |
@@ -745,11 +634,7 @@ int setfsgid(gid_t gid) { | |||
745 | orig_setfsgid = (orig_setfsgid_t)dlsym(RTLD_NEXT, "setfsgid"); | 634 | orig_setfsgid = (orig_setfsgid_t)dlsym(RTLD_NEXT, "setfsgid"); |
746 | 635 | ||
747 | int rv = orig_setfsgid(gid); | 636 | int rv = orig_setfsgid(gid); |
748 | #ifdef PRINTF_DEVTTY | 637 | tprintf(ftty, "%u:%s:setfsgid %d:%d\n", mypid, myname, gid, rv); |
749 | fprintf(ftty, "%u:%s:setfsgid %d:%d\n", mypid, myname, gid, rv); | ||
750 | #else | ||
751 | printf("%u:%s:setfsgid %d:%d\n", mypid, myname, gid, rv); | ||
752 | #endif | ||
753 | 638 | ||
754 | return rv; | 639 | return rv; |
755 | } | 640 | } |
@@ -761,11 +646,7 @@ int setreuid(uid_t ruid, uid_t euid) { | |||
761 | orig_setreuid = (orig_setreuid_t)dlsym(RTLD_NEXT, "setreuid"); | 646 | orig_setreuid = (orig_setreuid_t)dlsym(RTLD_NEXT, "setreuid"); |
762 | 647 | ||
763 | int rv = orig_setreuid(ruid, euid); | 648 | int rv = orig_setreuid(ruid, euid); |
764 | #ifdef PRINTF_DEVTTY | 649 | tprintf(ftty, "%u:%s:setreuid %d %d:%d\n", mypid, myname, ruid, euid, rv); |
765 | fprintf(ftty, "%u:%s:setreuid %d %d:%d\n", mypid, myname, ruid, euid, rv); | ||
766 | #else | ||
767 | printf("%u:%s:setreuid %d %d:%d\n", mypid, myname, ruid, euid, rv); | ||
768 | #endif | ||
769 | 650 | ||
770 | return rv; | 651 | return rv; |
771 | } | 652 | } |
@@ -777,11 +658,7 @@ int setregid(gid_t rgid, gid_t egid) { | |||
777 | orig_setregid = (orig_setregid_t)dlsym(RTLD_NEXT, "setregid"); | 658 | orig_setregid = (orig_setregid_t)dlsym(RTLD_NEXT, "setregid"); |
778 | 659 | ||
779 | int rv = orig_setregid(rgid, egid); | 660 | int rv = orig_setregid(rgid, egid); |
780 | #ifdef PRINTF_DEVTTY | 661 | tprintf(ftty, "%u:%s:setregid %d %d:%d\n", mypid, myname, rgid, egid, rv); |
781 | fprintf(ftty, "%u:%s:setregid %d %d:%d\n", mypid, myname, rgid, egid, rv); | ||
782 | #else | ||
783 | printf("%u:%s:setregid %d %d:%d\n", mypid, myname, rgid, egid, rv); | ||
784 | #endif | ||
785 | 662 | ||
786 | return rv; | 663 | return rv; |
787 | } | 664 | } |
@@ -793,11 +670,7 @@ int setresuid(uid_t ruid, uid_t euid, uid_t suid) { | |||
793 | orig_setresuid = (orig_setresuid_t)dlsym(RTLD_NEXT, "setresuid"); | 670 | orig_setresuid = (orig_setresuid_t)dlsym(RTLD_NEXT, "setresuid"); |
794 | 671 | ||
795 | int rv = orig_setresuid(ruid, euid, suid); | 672 | int rv = orig_setresuid(ruid, euid, suid); |
796 | #ifdef PRINTF_DEVTTY | 673 | tprintf(ftty, "%u:%s:setresuid %d %d %d:%d\n", mypid, myname, ruid, euid, suid, rv); |
797 | fprintf(ftty, "%u:%s:setresuid %d %d %d:%d\n", mypid, myname, ruid, euid, suid, rv); | ||
798 | #else | ||
799 | printf("%u:%s:setresuid %d %d %d:%d\n", mypid, myname, ruid, euid, suid, rv); | ||
800 | #endif | ||
801 | 674 | ||
802 | return rv; | 675 | return rv; |
803 | } | 676 | } |
@@ -809,11 +682,7 @@ int setresgid(gid_t rgid, gid_t egid, gid_t sgid) { | |||
809 | orig_setresgid = (orig_setresgid_t)dlsym(RTLD_NEXT, "setresgid"); | 682 | orig_setresgid = (orig_setresgid_t)dlsym(RTLD_NEXT, "setresgid"); |
810 | 683 | ||
811 | int rv = orig_setresgid(rgid, egid, sgid); | 684 | int rv = orig_setresgid(rgid, egid, sgid); |
812 | #ifdef PRINTF_DEVTTY | 685 | tprintf(ftty, "%u:%s:setresgid %d %d %d:%d\n", mypid, myname, rgid, egid, sgid, rv); |
813 | fprintf(ftty, "%u:%s:setresgid %d %d %d:%d\n", mypid, myname, rgid, egid, sgid, rv); | ||
814 | #else | ||
815 | printf("%u:%s:setresgid %d %d %d:%d\n", mypid, myname, rgid, egid, sgid, rv); | ||
816 | #endif | ||
817 | 686 | ||
818 | return rv; | 687 | return rv; |
819 | } | 688 | } |
@@ -828,10 +697,6 @@ static void log_exec(int argc, char** argv) { | |||
828 | int rv = readlink("/proc/self/exe", buf, PATH_MAX); | 697 | int rv = readlink("/proc/self/exe", buf, PATH_MAX); |
829 | if (rv != -1) { | 698 | if (rv != -1) { |
830 | buf[rv] = '\0'; // readlink does not add a '\0' at the end | 699 | buf[rv] = '\0'; // readlink does not add a '\0' at the end |
831 | #ifdef PRINTF_DEVTTY | 700 | tprintf(ftty, "%u:%s:exec %s:0\n", mypid, myname, buf); |
832 | fprintf(ftty, "%u:%s:exec %s:0\n", mypid, myname, buf); | ||
833 | #else | ||
834 | printf("%u:%s:exec %s:0\n", mypid, myname, buf); | ||
835 | #endif | ||
836 | } | 701 | } |
837 | } | 702 | } |