summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2019-07-09 11:48:50 -0500
committerLibravatar GitHub <noreply@github.com>2019-07-09 11:48:50 -0500
commitce3c7070dda23dae17d6605b77c23475d14fcca3 (patch)
tree8218956e6592f9cff2160a15bf4bcad1b33de29e /src
parentMerge pull request #2843 from crass/fix-2842-extra-appimage-envvars (diff)
parentFix issue #561. Refactor/Optimize code to get and use pid and process name. (diff)
downloadfirejail-ce3c7070dda23dae17d6605b77c23475d14fcca3.tar.gz
firejail-ce3c7070dda23dae17d6605b77c23475d14fcca3.tar.zst
firejail-ce3c7070dda23dae17d6605b77c23475d14fcca3.zip
Merge pull request #2844 from crass/fix-561-trace-appimage
Fix issue #561. Refactor/Optimize code to get and use pid and process name.
Diffstat (limited to 'src')
-rw-r--r--src/libtrace/libtrace.c148
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);
41static orig_fopen64_t orig_fopen64 = NULL; 41static orig_fopen64_t orig_fopen64 = NULL;
42 42
43// 43//
44// pid 44// library constructor/destructor
45// 45//
46static FILE *ftty = NULL;
46static pid_t mypid = 0; 47static pid_t mypid = 0;
47static 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
57static char myname[MAXNAME]; 49static char myname[MAXNAME] = {'\0', };
58static int nameinit = 0; 50
59static char *name(void) { 51static void init(void) __attribute__((constructor));
60 if (!nameinit) { 52void 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
85static void fini(void) __attribute__((destructor));
86void fini(void) {
87 fclose(ftty);
92} 88}
93 89
94// 90//
@@ -235,23 +231,23 @@ static char *translate(XTable *table, int val) {
235static void print_sockaddr(int sockfd, const char *call, const struct sockaddr *addr, int rv) { 231static 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}