diff options
author | Glenn Washburn <development@efficientek.com> | 2019-07-09 03:49:44 -0500 |
---|---|---|
committer | Glenn Washburn <development@efficientek.com> | 2019-07-09 03:49:44 -0500 |
commit | 97518da939533a5cf4637bd8f7f81d69b2579ad7 (patch) | |
tree | e45c166970b98d0cb388f81c34e4cbaf1e86a5c5 /src/libtrace | |
parent | Fix #2726 (diff) | |
download | firejail-97518da939533a5cf4637bd8f7f81d69b2579ad7.tar.gz firejail-97518da939533a5cf4637bd8f7f81d69b2579ad7.tar.zst firejail-97518da939533a5cf4637bd8f7f81d69b2579ad7.zip |
Fix issue #561. Refactor/Optimize code to get and use pid and process name.
Diffstat (limited to 'src/libtrace')
-rw-r--r-- | src/libtrace/libtrace.c | 148 |
1 files changed, 72 insertions, 76 deletions
diff --git a/src/libtrace/libtrace.c b/src/libtrace/libtrace.c index 397761c74..e252e9d26 100644 --- a/src/libtrace/libtrace.c +++ b/src/libtrace/libtrace.c | |||
@@ -41,54 +41,50 @@ typedef FILE *(*orig_fopen64_t)(const char *pathname, const char *mode); | |||
41 | static orig_fopen64_t orig_fopen64 = NULL; | 41 | static orig_fopen64_t orig_fopen64 = NULL; |
42 | 42 | ||
43 | // | 43 | // |
44 | // pid | 44 | // library constructor/destructor |
45 | // | 45 | // |
46 | static FILE *ftty = NULL; | ||
46 | static pid_t mypid = 0; | 47 | static pid_t mypid = 0; |
47 | static inline pid_t pid(void) { | ||
48 | if (!mypid) | ||
49 | mypid = getpid(); | ||
50 | return mypid; | ||
51 | } | ||
52 | |||
53 | // | ||
54 | // process name | ||
55 | // | ||
56 | #define MAXNAME 16 | 48 | #define MAXNAME 16 |
57 | static char myname[MAXNAME]; | 49 | static char myname[MAXNAME] = {'\0', }; |
58 | static int nameinit = 0; | 50 | |
59 | static char *name(void) { | 51 | static void init(void) __attribute__((constructor)); |
60 | if (!nameinit) { | 52 | void init(void) { |
61 | // initialize the name of the process based on /proc/PID/comm | 53 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
62 | memset(myname, 0, MAXNAME); | 54 | |
63 | 55 | // tty | |
64 | pid_t p = pid(); | 56 | ftty = orig_fopen("/dev/tty", "w"); |
65 | char *fname; | ||
66 | if (asprintf(&fname, "/proc/%u/comm", p) == -1) | ||
67 | return "unknown"; | ||
68 | |||
69 | // read file | ||
70 | if (!orig_fopen) | ||
71 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | ||
72 | FILE *fp = orig_fopen(fname, "r"); | ||
73 | if (!fp) | ||
74 | return "unknown"; | ||
75 | if (fgets(myname, MAXNAME, fp) == NULL) { | ||
76 | fclose(fp); | ||
77 | free(fname); | ||
78 | return "unknown"; | ||
79 | } | ||
80 | |||
81 | // clean '\n' | ||
82 | char *ptr = strchr(myname, '\n'); | ||
83 | if (ptr) | ||
84 | *ptr = '\0'; | ||
85 | 57 | ||
58 | // pid | ||
59 | mypid = getpid(); | ||
60 | |||
61 | // process name | ||
62 | char *fname; | ||
63 | if (asprintf(&fname, "/proc/%u/comm", mypid) == -1) | ||
64 | strncpy(myname, "unknown", MAXNAME-1); | ||
65 | |||
66 | // read file | ||
67 | FILE *fp = orig_fopen(fname, "r"); | ||
68 | if (!fp) | ||
69 | strncpy(myname, "unknown", MAXNAME-1); | ||
70 | if (fgets(myname, MAXNAME, fp) == NULL) { | ||
86 | fclose(fp); | 71 | fclose(fp); |
87 | free(fname); | 72 | free(fname); |
88 | nameinit = 1; | 73 | strncpy(myname, "unknown", MAXNAME-1); |
89 | } | 74 | } |
90 | 75 | ||
91 | return myname; | 76 | // clean '\n' |
77 | char *ptr = strchr(myname, '\n'); | ||
78 | if (ptr) | ||
79 | *ptr = '\0'; | ||
80 | |||
81 | fclose(fp); | ||
82 | free(fname); | ||
83 | } | ||
84 | |||
85 | static void fini(void) __attribute__((destructor)); | ||
86 | void fini(void) { | ||
87 | fclose(ftty); | ||
92 | } | 88 | } |
93 | 89 | ||
94 | // | 90 | // |
@@ -235,23 +231,23 @@ static char *translate(XTable *table, int val) { | |||
235 | static void print_sockaddr(int sockfd, const char *call, const struct sockaddr *addr, int rv) { | 231 | static void print_sockaddr(int sockfd, const char *call, const struct sockaddr *addr, int rv) { |
236 | if (addr->sa_family == AF_INET) { | 232 | if (addr->sa_family == AF_INET) { |
237 | struct sockaddr_in *a = (struct sockaddr_in *) addr; | 233 | struct sockaddr_in *a = (struct sockaddr_in *) addr; |
238 | printf("%u:%s:%s %d %s port %u:%d\n", pid(), name(), call, sockfd, inet_ntoa(a->sin_addr), ntohs(a->sin_port), rv); | 234 | 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); |
239 | } | 235 | } |
240 | else if (addr->sa_family == AF_INET6) { | 236 | else if (addr->sa_family == AF_INET6) { |
241 | struct sockaddr_in6 *a = (struct sockaddr_in6 *) addr; | 237 | struct sockaddr_in6 *a = (struct sockaddr_in6 *) addr; |
242 | char str[INET6_ADDRSTRLEN]; | 238 | char str[INET6_ADDRSTRLEN]; |
243 | inet_ntop(AF_INET6, &(a->sin6_addr), str, INET6_ADDRSTRLEN); | 239 | inet_ntop(AF_INET6, &(a->sin6_addr), str, INET6_ADDRSTRLEN); |
244 | printf("%u:%s:%s %d %s:%d\n", pid(), name(), call, sockfd, str, rv); | 240 | fprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, str, rv); |
245 | } | 241 | } |
246 | else if (addr->sa_family == AF_UNIX) { | 242 | else if (addr->sa_family == AF_UNIX) { |
247 | struct sockaddr_un *a = (struct sockaddr_un *) addr; | 243 | struct sockaddr_un *a = (struct sockaddr_un *) addr; |
248 | if (a->sun_path[0]) | 244 | if (a->sun_path[0]) |
249 | printf("%u:%s:%s %d %s:%d\n", pid(), name(), call, sockfd, a->sun_path, rv); | 245 | fprintf(ftty, "%u:%s:%s %d %s:%d\n", mypid, myname, call, sockfd, a->sun_path, rv); |
250 | else | 246 | else |
251 | printf("%u:%s:%s %d @%s:%d\n", pid(), name(), call, sockfd, a->sun_path + 1, rv); | 247 | fprintf(ftty, "%u:%s:%s %d @%s:%d\n", mypid, myname, call, sockfd, a->sun_path + 1, rv); |
252 | } | 248 | } |
253 | else { | 249 | else { |
254 | printf("%u:%s:%s %d family %d:%d\n", pid(), name(), call, sockfd, addr->sa_family, rv); | 250 | fprintf(ftty, "%u:%s:%s %d family %d:%d\n", mypid, myname, call, sockfd, addr->sa_family, rv); |
255 | } | 251 | } |
256 | } | 252 | } |
257 | 253 | ||
@@ -267,7 +263,7 @@ int open(const char *pathname, int flags, mode_t mode) { | |||
267 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); | 263 | orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); |
268 | 264 | ||
269 | int rv = orig_open(pathname, flags, mode); | 265 | int rv = orig_open(pathname, flags, mode); |
270 | printf("%u:%s:open %s:%d\n", pid(), name(), pathname, rv); | 266 | fprintf(ftty, "%u:%s:open %s:%d\n", mypid, myname, pathname, rv); |
271 | return rv; | 267 | return rv; |
272 | } | 268 | } |
273 | 269 | ||
@@ -278,7 +274,7 @@ int open64(const char *pathname, int flags, mode_t mode) { | |||
278 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); | 274 | orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); |
279 | 275 | ||
280 | int rv = orig_open64(pathname, flags, mode); | 276 | int rv = orig_open64(pathname, flags, mode); |
281 | printf("%u:%s:open64 %s:%d\n", pid(), name(), pathname, rv); | 277 | fprintf(ftty, "%u:%s:open64 %s:%d\n", mypid, myname, pathname, rv); |
282 | return rv; | 278 | return rv; |
283 | } | 279 | } |
284 | 280 | ||
@@ -290,7 +286,7 @@ int openat(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
290 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); | 286 | orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); |
291 | 287 | ||
292 | int rv = orig_openat(dirfd, pathname, flags, mode); | 288 | int rv = orig_openat(dirfd, pathname, flags, mode); |
293 | printf("%u:%s:openat %s:%d\n", pid(), name(), pathname, rv); | 289 | fprintf(ftty, "%u:%s:openat %s:%d\n", mypid, myname, pathname, rv); |
294 | return rv; | 290 | return rv; |
295 | } | 291 | } |
296 | 292 | ||
@@ -301,7 +297,7 @@ int openat64(int dirfd, const char *pathname, int flags, mode_t mode) { | |||
301 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); | 297 | orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); |
302 | 298 | ||
303 | int rv = orig_openat64(dirfd, pathname, flags, mode); | 299 | int rv = orig_openat64(dirfd, pathname, flags, mode); |
304 | printf("%u:%s:openat64 %s:%d\n", pid(), name(), pathname, rv); | 300 | fprintf(ftty, "%u:%s:openat64 %s:%d\n", mypid, myname, pathname, rv); |
305 | return rv; | 301 | return rv; |
306 | } | 302 | } |
307 | 303 | ||
@@ -312,7 +308,7 @@ FILE *fopen(const char *pathname, const char *mode) { | |||
312 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); | 308 | orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); |
313 | 309 | ||
314 | FILE *rv = orig_fopen(pathname, mode); | 310 | FILE *rv = orig_fopen(pathname, mode); |
315 | printf("%u:%s:fopen %s:%p\n", pid(), name(), pathname, rv); | 311 | fprintf(ftty, "%u:%s:fopen %s:%p\n", mypid, myname, pathname, rv); |
316 | return rv; | 312 | return rv; |
317 | } | 313 | } |
318 | 314 | ||
@@ -322,7 +318,7 @@ FILE *fopen64(const char *pathname, const char *mode) { | |||
322 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); | 318 | orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); |
323 | 319 | ||
324 | FILE *rv = orig_fopen64(pathname, mode); | 320 | FILE *rv = orig_fopen64(pathname, mode); |
325 | printf("%u:%s:fopen64 %s:%p\n", pid(), name(), pathname, rv); | 321 | fprintf(ftty, "%u:%s:fopen64 %s:%p\n", mypid, myname, pathname, rv); |
326 | return rv; | 322 | return rv; |
327 | } | 323 | } |
328 | #endif /* __GLIBC__ */ | 324 | #endif /* __GLIBC__ */ |
@@ -336,7 +332,7 @@ FILE *freopen(const char *pathname, const char *mode, FILE *stream) { | |||
336 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); | 332 | orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); |
337 | 333 | ||
338 | FILE *rv = orig_freopen(pathname, mode, stream); | 334 | FILE *rv = orig_freopen(pathname, mode, stream); |
339 | printf("%u:%s:freopen %s:%p\n", pid(), name(), pathname, rv); | 335 | fprintf(ftty, "%u:%s:freopen %s:%p\n", mypid, myname, pathname, rv); |
340 | return rv; | 336 | return rv; |
341 | } | 337 | } |
342 | 338 | ||
@@ -348,7 +344,7 @@ FILE *freopen64(const char *pathname, const char *mode, FILE *stream) { | |||
348 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); | 344 | orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); |
349 | 345 | ||
350 | FILE *rv = orig_freopen64(pathname, mode, stream); | 346 | FILE *rv = orig_freopen64(pathname, mode, stream); |
351 | printf("%u:%s:freopen64 %s:%p\n", pid(), name(), pathname, rv); | 347 | fprintf(ftty, "%u:%s:freopen64 %s:%p\n", mypid, myname, pathname, rv); |
352 | return rv; | 348 | return rv; |
353 | } | 349 | } |
354 | #endif /* __GLIBC__ */ | 350 | #endif /* __GLIBC__ */ |
@@ -361,7 +357,7 @@ int unlink(const char *pathname) { | |||
361 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); | 357 | orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); |
362 | 358 | ||
363 | int rv = orig_unlink(pathname); | 359 | int rv = orig_unlink(pathname); |
364 | printf("%u:%s:unlink %s:%d\n", pid(), name(), pathname, rv); | 360 | fprintf(ftty, "%u:%s:unlink %s:%d\n", mypid, myname, pathname, rv); |
365 | return rv; | 361 | return rv; |
366 | } | 362 | } |
367 | 363 | ||
@@ -372,7 +368,7 @@ int unlinkat(int dirfd, const char *pathname, int flags) { | |||
372 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); | 368 | orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); |
373 | 369 | ||
374 | int rv = orig_unlinkat(dirfd, pathname, flags); | 370 | int rv = orig_unlinkat(dirfd, pathname, flags); |
375 | printf("%u:%s:unlinkat %s:%d\n", pid(), name(), pathname, rv); | 371 | fprintf(ftty, "%u:%s:unlinkat %s:%d\n", mypid, myname, pathname, rv); |
376 | return rv; | 372 | return rv; |
377 | } | 373 | } |
378 | 374 | ||
@@ -384,7 +380,7 @@ int mkdir(const char *pathname, mode_t mode) { | |||
384 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); | 380 | orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); |
385 | 381 | ||
386 | int rv = orig_mkdir(pathname, mode); | 382 | int rv = orig_mkdir(pathname, mode); |
387 | printf("%u:%s:mkdir %s:%d\n", pid(), name(), pathname, rv); | 383 | fprintf(ftty, "%u:%s:mkdir %s:%d\n", mypid, myname, pathname, rv); |
388 | return rv; | 384 | return rv; |
389 | } | 385 | } |
390 | 386 | ||
@@ -395,7 +391,7 @@ int mkdirat(int dirfd, const char *pathname, mode_t mode) { | |||
395 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); | 391 | orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); |
396 | 392 | ||
397 | int rv = orig_mkdirat(dirfd, pathname, mode); | 393 | int rv = orig_mkdirat(dirfd, pathname, mode); |
398 | printf("%u:%s:mkdirat %s:%d\n", pid(), name(), pathname, rv); | 394 | fprintf(ftty, "%u:%s:mkdirat %s:%d\n", mypid, myname, pathname, rv); |
399 | return rv; | 395 | return rv; |
400 | } | 396 | } |
401 | 397 | ||
@@ -406,7 +402,7 @@ int rmdir(const char *pathname) { | |||
406 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); | 402 | orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); |
407 | 403 | ||
408 | int rv = orig_rmdir(pathname); | 404 | int rv = orig_rmdir(pathname); |
409 | printf("%u:%s:rmdir %s:%d\n", pid(), name(), pathname, rv); | 405 | fprintf(ftty, "%u:%s:rmdir %s:%d\n", mypid, myname, pathname, rv); |
410 | return rv; | 406 | return rv; |
411 | } | 407 | } |
412 | 408 | ||
@@ -418,7 +414,7 @@ int stat(const char *pathname, struct stat *buf) { | |||
418 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); | 414 | orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); |
419 | 415 | ||
420 | int rv = orig_stat(pathname, buf); | 416 | int rv = orig_stat(pathname, buf); |
421 | printf("%u:%s:stat %s:%d\n", pid(), name(), pathname, rv); | 417 | fprintf(ftty, "%u:%s:stat %s:%d\n", mypid, myname, pathname, rv); |
422 | return rv; | 418 | return rv; |
423 | } | 419 | } |
424 | 420 | ||
@@ -430,7 +426,7 @@ int stat64(const char *pathname, struct stat64 *buf) { | |||
430 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); | 426 | orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); |
431 | 427 | ||
432 | int rv = orig_stat64(pathname, buf); | 428 | int rv = orig_stat64(pathname, buf); |
433 | printf("%u:%s:stat64 %s:%d\n", pid(), name(), pathname, rv); | 429 | fprintf(ftty, "%u:%s:stat64 %s:%d\n", mypid, myname, pathname, rv); |
434 | return rv; | 430 | return rv; |
435 | } | 431 | } |
436 | #endif /* __GLIBC__ */ | 432 | #endif /* __GLIBC__ */ |
@@ -443,7 +439,7 @@ int lstat(const char *pathname, struct stat *buf) { | |||
443 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); | 439 | orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); |
444 | 440 | ||
445 | int rv = orig_lstat(pathname, buf); | 441 | int rv = orig_lstat(pathname, buf); |
446 | printf("%u:%s:lstat %s:%d\n", pid(), name(), pathname, rv); | 442 | fprintf(ftty, "%u:%s:lstat %s:%d\n", mypid, myname, pathname, rv); |
447 | return rv; | 443 | return rv; |
448 | } | 444 | } |
449 | 445 | ||
@@ -455,7 +451,7 @@ int lstat64(const char *pathname, struct stat64 *buf) { | |||
455 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); | 451 | orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); |
456 | 452 | ||
457 | int rv = orig_lstat64(pathname, buf); | 453 | int rv = orig_lstat64(pathname, buf); |
458 | printf("%u:%s:lstat64 %s:%d\n", pid(), name(), pathname, rv); | 454 | fprintf(ftty, "%u:%s:lstat64 %s:%d\n", mypid, myname, pathname, rv); |
459 | return rv; | 455 | return rv; |
460 | } | 456 | } |
461 | #endif /* __GLIBC__ */ | 457 | #endif /* __GLIBC__ */ |
@@ -468,7 +464,7 @@ DIR *opendir(const char *pathname) { | |||
468 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); | 464 | orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); |
469 | 465 | ||
470 | DIR *rv = orig_opendir(pathname); | 466 | DIR *rv = orig_opendir(pathname); |
471 | printf("%u:%s:opendir %s:%p\n", pid(), name(), pathname, rv); | 467 | fprintf(ftty, "%u:%s:opendir %s:%p\n", mypid, myname, pathname, rv); |
472 | return rv; | 468 | return rv; |
473 | } | 469 | } |
474 | 470 | ||
@@ -480,7 +476,7 @@ int access(const char *pathname, int mode) { | |||
480 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); | 476 | orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); |
481 | 477 | ||
482 | int rv = orig_access(pathname, mode); | 478 | int rv = orig_access(pathname, mode); |
483 | printf("%u:%s:access %s:%d\n", pid(), name(), pathname, rv); | 479 | fprintf(ftty, "%u:%s:access %s:%d\n", mypid, myname, pathname, rv); |
484 | return rv; | 480 | return rv; |
485 | } | 481 | } |
486 | 482 | ||
@@ -508,7 +504,7 @@ int socket(int domain, int type, int protocol) { | |||
508 | 504 | ||
509 | int rv = orig_socket(domain, type, protocol); | 505 | int rv = orig_socket(domain, type, protocol); |
510 | char *ptr = buf; | 506 | char *ptr = buf; |
511 | ptr += sprintf(ptr, "%u:%s:socket ", pid(), name()); | 507 | ptr += sprintf(ptr, "%u:%s:socket ", mypid, myname); |
512 | char *str = translate(socket_domain, domain); | 508 | char *str = translate(socket_domain, domain); |
513 | if (str == NULL) | 509 | if (str == NULL) |
514 | ptr += sprintf(ptr, "%d ", domain); | 510 | ptr += sprintf(ptr, "%d ", domain); |
@@ -538,7 +534,7 @@ int socket(int domain, int type, int protocol) { | |||
538 | sprintf(ptr, "%s", str); | 534 | sprintf(ptr, "%s", str); |
539 | } | 535 | } |
540 | 536 | ||
541 | printf("%s:%d\n", buf, rv); | 537 | fprintf(ftty, "%s:%d\n", buf, rv); |
542 | return rv; | 538 | return rv; |
543 | } | 539 | } |
544 | 540 | ||
@@ -576,7 +572,7 @@ int system(const char *command) { | |||
576 | orig_system = (orig_system_t)dlsym(RTLD_NEXT, "system"); | 572 | orig_system = (orig_system_t)dlsym(RTLD_NEXT, "system"); |
577 | 573 | ||
578 | int rv = orig_system(command); | 574 | int rv = orig_system(command); |
579 | printf("%u:%s:system %s:%d\n", pid(), name(), command, rv); | 575 | fprintf(ftty, "%u:%s:system %s:%d\n", mypid, myname, command, rv); |
580 | 576 | ||
581 | return rv; | 577 | return rv; |
582 | } | 578 | } |
@@ -588,7 +584,7 @@ int setuid(uid_t uid) { | |||
588 | orig_setuid = (orig_setuid_t)dlsym(RTLD_NEXT, "setuid"); | 584 | orig_setuid = (orig_setuid_t)dlsym(RTLD_NEXT, "setuid"); |
589 | 585 | ||
590 | int rv = orig_setuid(uid); | 586 | int rv = orig_setuid(uid); |
591 | printf("%u:%s:setuid %d:%d\n", pid(), name(), uid, rv); | 587 | fprintf(ftty, "%u:%s:setuid %d:%d\n", mypid, myname, uid, rv); |
592 | 588 | ||
593 | return rv; | 589 | return rv; |
594 | } | 590 | } |
@@ -600,7 +596,7 @@ int setgid(gid_t gid) { | |||
600 | orig_setgid = (orig_setgid_t)dlsym(RTLD_NEXT, "setgid"); | 596 | orig_setgid = (orig_setgid_t)dlsym(RTLD_NEXT, "setgid"); |
601 | 597 | ||
602 | int rv = orig_setgid(gid); | 598 | int rv = orig_setgid(gid); |
603 | printf("%u:%s:setgid %d:%d\n", pid(), name(), gid, rv); | 599 | fprintf(ftty, "%u:%s:setgid %d:%d\n", mypid, myname, gid, rv); |
604 | 600 | ||
605 | return rv; | 601 | return rv; |
606 | } | 602 | } |
@@ -612,7 +608,7 @@ int setfsuid(uid_t uid) { | |||
612 | orig_setfsuid = (orig_setfsuid_t)dlsym(RTLD_NEXT, "setfsuid"); | 608 | orig_setfsuid = (orig_setfsuid_t)dlsym(RTLD_NEXT, "setfsuid"); |
613 | 609 | ||
614 | int rv = orig_setfsuid(uid); | 610 | int rv = orig_setfsuid(uid); |
615 | printf("%u:%s:setfsuid %d:%d\n", pid(), name(), uid, rv); | 611 | fprintf(ftty, "%u:%s:setfsuid %d:%d\n", mypid, myname, uid, rv); |
616 | 612 | ||
617 | return rv; | 613 | return rv; |
618 | } | 614 | } |
@@ -624,7 +620,7 @@ int setfsgid(gid_t gid) { | |||
624 | orig_setfsgid = (orig_setfsgid_t)dlsym(RTLD_NEXT, "setfsgid"); | 620 | orig_setfsgid = (orig_setfsgid_t)dlsym(RTLD_NEXT, "setfsgid"); |
625 | 621 | ||
626 | int rv = orig_setfsgid(gid); | 622 | int rv = orig_setfsgid(gid); |
627 | printf("%u:%s:setfsgid %d:%d\n", pid(), name(), gid, rv); | 623 | fprintf(ftty, "%u:%s:setfsgid %d:%d\n", mypid, myname, gid, rv); |
628 | 624 | ||
629 | return rv; | 625 | return rv; |
630 | } | 626 | } |
@@ -636,7 +632,7 @@ int setreuid(uid_t ruid, uid_t euid) { | |||
636 | orig_setreuid = (orig_setreuid_t)dlsym(RTLD_NEXT, "setreuid"); | 632 | orig_setreuid = (orig_setreuid_t)dlsym(RTLD_NEXT, "setreuid"); |
637 | 633 | ||
638 | int rv = orig_setreuid(ruid, euid); | 634 | int rv = orig_setreuid(ruid, euid); |
639 | printf("%u:%s:setreuid %d %d:%d\n", pid(), name(), ruid, euid, rv); | 635 | fprintf(ftty, "%u:%s:setreuid %d %d:%d\n", mypid, myname, ruid, euid, rv); |
640 | 636 | ||
641 | return rv; | 637 | return rv; |
642 | } | 638 | } |
@@ -648,7 +644,7 @@ int setregid(gid_t rgid, gid_t egid) { | |||
648 | orig_setregid = (orig_setregid_t)dlsym(RTLD_NEXT, "setregid"); | 644 | orig_setregid = (orig_setregid_t)dlsym(RTLD_NEXT, "setregid"); |
649 | 645 | ||
650 | int rv = orig_setregid(rgid, egid); | 646 | int rv = orig_setregid(rgid, egid); |
651 | printf("%u:%s:setregid %d %d:%d\n", pid(), name(), rgid, egid, rv); | 647 | fprintf(ftty, "%u:%s:setregid %d %d:%d\n", mypid, myname, rgid, egid, rv); |
652 | 648 | ||
653 | return rv; | 649 | return rv; |
654 | } | 650 | } |
@@ -660,7 +656,7 @@ int setresuid(uid_t ruid, uid_t euid, uid_t suid) { | |||
660 | orig_setresuid = (orig_setresuid_t)dlsym(RTLD_NEXT, "setresuid"); | 656 | orig_setresuid = (orig_setresuid_t)dlsym(RTLD_NEXT, "setresuid"); |
661 | 657 | ||
662 | int rv = orig_setresuid(ruid, euid, suid); | 658 | int rv = orig_setresuid(ruid, euid, suid); |
663 | printf("%u:%s:setresuid %d %d %d:%d\n", pid(), name(), ruid, euid, suid, rv); | 659 | fprintf(ftty, "%u:%s:setresuid %d %d %d:%d\n", mypid, myname, ruid, euid, suid, rv); |
664 | 660 | ||
665 | return rv; | 661 | return rv; |
666 | } | 662 | } |
@@ -672,7 +668,7 @@ int setresgid(gid_t rgid, gid_t egid, gid_t sgid) { | |||
672 | orig_setresgid = (orig_setresgid_t)dlsym(RTLD_NEXT, "setresgid"); | 668 | orig_setresgid = (orig_setresgid_t)dlsym(RTLD_NEXT, "setresgid"); |
673 | 669 | ||
674 | int rv = orig_setresgid(rgid, egid, sgid); | 670 | int rv = orig_setresgid(rgid, egid, sgid); |
675 | printf("%u:%s:setresgid %d %d %d:%d\n", pid(), name(), rgid, egid, sgid, rv); | 671 | fprintf(ftty, "%u:%s:setresgid %d %d %d:%d\n", mypid, myname, rgid, egid, sgid, rv); |
676 | 672 | ||
677 | return rv; | 673 | return rv; |
678 | } | 674 | } |
@@ -687,6 +683,6 @@ static void log_exec(int argc, char** argv) { | |||
687 | int rv = readlink("/proc/self/exe", buf, PATH_MAX); | 683 | int rv = readlink("/proc/self/exe", buf, PATH_MAX); |
688 | if (rv != -1) { | 684 | if (rv != -1) { |
689 | buf[rv] = '\0'; // readlink does not add a '\0' at the end | 685 | buf[rv] = '\0'; // readlink does not add a '\0' at the end |
690 | printf("%u:%s:exec %s:0\n", pid(), name(), buf); | 686 | fprintf(ftty, "%u:%s:exec %s:0\n", mypid, myname, buf); |
691 | } | 687 | } |
692 | } | 688 | } |