aboutsummaryrefslogtreecommitdiffstats
path: root/src/libtracelog/libtracelog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracelog/libtracelog.c')
-rw-r--r--src/libtracelog/libtracelog.c72
1 files changed, 36 insertions, 36 deletions
diff --git a/src/libtracelog/libtracelog.c b/src/libtracelog/libtracelog.c
index abacb7115..dc68b0620 100644
--- a/src/libtracelog/libtracelog.c
+++ b/src/libtracelog/libtracelog.c
@@ -52,7 +52,7 @@ typedef struct list_elem_t {
52#define HMASK 0x0ff 52#define HMASK 0x0ff
53ListElem *storage[HMASK + 1]; 53ListElem *storage[HMASK + 1];
54 54
55// djb2 55// djb2
56static inline uint32_t hash(const char *str) { 56static inline uint32_t hash(const char *str) {
57 uint32_t hash = 5381; 57 uint32_t hash = 5381;
58 int c; 58 int c;
@@ -70,10 +70,10 @@ static void storage_add(const char *str) {
70 if (!str) { 70 if (!str) {
71#ifdef DEBUG 71#ifdef DEBUG
72 printf("null pointer passed to storage_add\n"); 72 printf("null pointer passed to storage_add\n");
73#endif 73#endif
74 return; 74 return;
75 } 75 }
76 76
77 ListElem *ptr = malloc(sizeof(ListElem)); 77 ListElem *ptr = malloc(sizeof(ListElem));
78 if (!ptr) { 78 if (!ptr) {
79 fprintf(stderr, "Error: cannot allocate memory\n"); 79 fprintf(stderr, "Error: cannot allocate memory\n");
@@ -85,7 +85,7 @@ static void storage_add(const char *str) {
85 free(ptr); 85 free(ptr);
86 return; 86 return;
87 } 87 }
88 88
89 // insert it into the hash table 89 // insert it into the hash table
90 uint32_t h = hash(ptr->path); 90 uint32_t h = hash(ptr->path);
91 ptr->next = storage[h]; 91 ptr->next = storage[h];
@@ -147,11 +147,11 @@ static char *storage_find(const char *str) {
147 } 147 }
148 ptr = ptr->next; 148 ptr = ptr->next;
149 } 149 }
150 150
151 if (allocated) 151 if (allocated)
152 free((char *) tofind); 152 free((char *) tofind);
153#ifdef DEBUG 153#ifdef DEBUG
154 printf("storage not found\n"); 154 printf("storage not found\n");
155#endif 155#endif
156 return NULL; 156 return NULL;
157} 157}
@@ -168,7 +168,7 @@ static char *sandbox_name_str = NULL;
168static void load_blacklist(void) { 168static void load_blacklist(void) {
169 if (blacklist_loaded) 169 if (blacklist_loaded)
170 return; 170 return;
171 171
172 // open filesystem log 172 // open filesystem log
173 if (!orig_fopen) 173 if (!orig_fopen)
174 orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); 174 orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen");
@@ -204,7 +204,7 @@ static void load_blacklist(void) {
204 } 204 }
205 fclose(fp); 205 fclose(fp);
206 blacklist_loaded = 1; 206 blacklist_loaded = 1;
207#ifdef DEBUG 207#ifdef DEBUG
208 printf("Monitoring %d blacklists\n", cnt); 208 printf("Monitoring %d blacklists\n", cnt);
209 { 209 {
210 int i; 210 int i;
@@ -215,7 +215,7 @@ static void load_blacklist(void) {
215 cnt++; 215 cnt++;
216 ptr = ptr->next; 216 ptr = ptr->next;
217 } 217 }
218 218
219 if ((i % 16) == 0) 219 if ((i % 16) == 0)
220 printf("\n"); 220 printf("\n");
221 printf("%02d ", cnt); 221 printf("%02d ", cnt);
@@ -232,8 +232,8 @@ static void sendlog(const char *name, const char *call, const char *path) {
232 printf("null pointer passed to sendlog\n"); 232 printf("null pointer passed to sendlog\n");
233#endif 233#endif
234 return; 234 return;
235 } 235 }
236 236
237 openlog ("firejail", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); 237 openlog ("firejail", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
238 if (sandbox_pid_str && sandbox_name_str) 238 if (sandbox_pid_str && sandbox_name_str)
239 syslog (LOG_INFO, "blacklist violation - sandbox %s, name %s, exe %s, syscall %s, path %s", 239 syslog (LOG_INFO, "blacklist violation - sandbox %s, name %s, exe %s, syscall %s, path %s",
@@ -266,10 +266,10 @@ static char myname[MAXNAME];
266static int nameinit = 0; 266static int nameinit = 0;
267static char *name(void) { 267static char *name(void) {
268 if (!nameinit) { 268 if (!nameinit) {
269 269
270 // initialize the name of the process based on /proc/PID/comm 270 // initialize the name of the process based on /proc/PID/comm
271 memset(myname, 0, MAXNAME); 271 memset(myname, 0, MAXNAME);
272 272
273 pid_t p = pid(); 273 pid_t p = pid();
274 char *fname; 274 char *fname;
275 if (asprintf(&fname, "/proc/%u/comm", p) == -1) 275 if (asprintf(&fname, "/proc/%u/comm", p) == -1)
@@ -286,17 +286,17 @@ static char *name(void) {
286 free(fname); 286 free(fname);
287 return "unknown"; 287 return "unknown";
288 } 288 }
289 289
290 // clean '\n' 290 // clean '\n'
291 char *ptr = strchr(myname, '\n'); 291 char *ptr = strchr(myname, '\n');
292 if (ptr) 292 if (ptr)
293 *ptr = '\0'; 293 *ptr = '\0';
294 294
295 fclose(fp); 295 fclose(fp);
296 free(fname); 296 free(fname);
297 nameinit = 1; 297 nameinit = 1;
298 } 298 }
299 299
300 return myname; 300 return myname;
301} 301}
302 302
@@ -313,10 +313,10 @@ int open(const char *pathname, int flags, mode_t mode) {
313#endif 313#endif
314 if (!orig_open) 314 if (!orig_open)
315 orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open"); 315 orig_open = (orig_open_t)dlsym(RTLD_NEXT, "open");
316 316
317 if (!blacklist_loaded) 317 if (!blacklist_loaded)
318 load_blacklist(); 318 load_blacklist();
319 319
320 if (storage_find(pathname)) 320 if (storage_find(pathname))
321 sendlog(name(), __FUNCTION__, pathname); 321 sendlog(name(), __FUNCTION__, pathname);
322 int rv = orig_open(pathname, flags, mode); 322 int rv = orig_open(pathname, flags, mode);
@@ -337,7 +337,7 @@ int open64(const char *pathname, int flags, mode_t mode) {
337 orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64"); 337 orig_open64 = (orig_open64_t)dlsym(RTLD_NEXT, "open64");
338 if (!blacklist_loaded) 338 if (!blacklist_loaded)
339 load_blacklist(); 339 load_blacklist();
340 340
341 if (storage_find(pathname)) 341 if (storage_find(pathname))
342 sendlog(name(), __FUNCTION__, pathname); 342 sendlog(name(), __FUNCTION__, pathname);
343 int rv = orig_open64(pathname, flags, mode); 343 int rv = orig_open64(pathname, flags, mode);
@@ -357,7 +357,7 @@ int openat(int dirfd, const char *pathname, int flags, mode_t mode) {
357 orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat"); 357 orig_openat = (orig_openat_t)dlsym(RTLD_NEXT, "openat");
358 if (!blacklist_loaded) 358 if (!blacklist_loaded)
359 load_blacklist(); 359 load_blacklist();
360 360
361 if (storage_find(pathname)) 361 if (storage_find(pathname))
362 sendlog(name(), __FUNCTION__, pathname); 362 sendlog(name(), __FUNCTION__, pathname);
363 int rv = orig_openat(dirfd, pathname, flags, mode); 363 int rv = orig_openat(dirfd, pathname, flags, mode);
@@ -374,7 +374,7 @@ int openat64(int dirfd, const char *pathname, int flags, mode_t mode) {
374 orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64"); 374 orig_openat64 = (orig_openat64_t)dlsym(RTLD_NEXT, "openat64");
375 if (!blacklist_loaded) 375 if (!blacklist_loaded)
376 load_blacklist(); 376 load_blacklist();
377 377
378 if (storage_find(pathname)) 378 if (storage_find(pathname))
379 sendlog(name(), __FUNCTION__, pathname); 379 sendlog(name(), __FUNCTION__, pathname);
380 int rv = orig_openat64(dirfd, pathname, flags, mode); 380 int rv = orig_openat64(dirfd, pathname, flags, mode);
@@ -391,7 +391,7 @@ FILE *fopen(const char *pathname, const char *mode) {
391 orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen"); 391 orig_fopen = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen");
392 if (!blacklist_loaded) 392 if (!blacklist_loaded)
393 load_blacklist(); 393 load_blacklist();
394 394
395 if (storage_find(pathname)) 395 if (storage_find(pathname))
396 sendlog(name(), __FUNCTION__, pathname); 396 sendlog(name(), __FUNCTION__, pathname);
397 FILE *rv = orig_fopen(pathname, mode); 397 FILE *rv = orig_fopen(pathname, mode);
@@ -407,7 +407,7 @@ FILE *fopen64(const char *pathname, const char *mode) {
407 orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64"); 407 orig_fopen64 = (orig_fopen_t)dlsym(RTLD_NEXT, "fopen64");
408 if (!blacklist_loaded) 408 if (!blacklist_loaded)
409 load_blacklist(); 409 load_blacklist();
410 410
411 if (storage_find(pathname)) 411 if (storage_find(pathname))
412 sendlog(name(), __FUNCTION__, pathname); 412 sendlog(name(), __FUNCTION__, pathname);
413 FILE *rv = orig_fopen64(pathname, mode); 413 FILE *rv = orig_fopen64(pathname, mode);
@@ -427,7 +427,7 @@ FILE *freopen(const char *pathname, const char *mode, FILE *stream) {
427 orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen"); 427 orig_freopen = (orig_freopen_t)dlsym(RTLD_NEXT, "freopen");
428 if (!blacklist_loaded) 428 if (!blacklist_loaded)
429 load_blacklist(); 429 load_blacklist();
430 430
431 if (storage_find(pathname)) 431 if (storage_find(pathname))
432 sendlog(name(), __FUNCTION__, pathname); 432 sendlog(name(), __FUNCTION__, pathname);
433 FILE *rv = orig_freopen(pathname, mode, stream); 433 FILE *rv = orig_freopen(pathname, mode, stream);
@@ -445,7 +445,7 @@ FILE *freopen64(const char *pathname, const char *mode, FILE *stream) {
445 orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64"); 445 orig_freopen64 = (orig_freopen64_t)dlsym(RTLD_NEXT, "freopen64");
446 if (!blacklist_loaded) 446 if (!blacklist_loaded)
447 load_blacklist(); 447 load_blacklist();
448 448
449 if (storage_find(pathname)) 449 if (storage_find(pathname))
450 sendlog(name(), __FUNCTION__, pathname); 450 sendlog(name(), __FUNCTION__, pathname);
451 FILE *rv = orig_freopen64(pathname, mode, stream); 451 FILE *rv = orig_freopen64(pathname, mode, stream);
@@ -464,7 +464,7 @@ int unlink(const char *pathname) {
464 orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink"); 464 orig_unlink = (orig_unlink_t)dlsym(RTLD_NEXT, "unlink");
465 if (!blacklist_loaded) 465 if (!blacklist_loaded)
466 load_blacklist(); 466 load_blacklist();
467 467
468 if (storage_find(pathname)) 468 if (storage_find(pathname))
469 sendlog(name(), __FUNCTION__, pathname); 469 sendlog(name(), __FUNCTION__, pathname);
470 int rv = orig_unlink(pathname); 470 int rv = orig_unlink(pathname);
@@ -481,7 +481,7 @@ int unlinkat(int dirfd, const char *pathname, int flags) {
481 orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat"); 481 orig_unlinkat = (orig_unlinkat_t)dlsym(RTLD_NEXT, "unlinkat");
482 if (!blacklist_loaded) 482 if (!blacklist_loaded)
483 load_blacklist(); 483 load_blacklist();
484 484
485 if (storage_find(pathname)) 485 if (storage_find(pathname))
486 sendlog(name(), __FUNCTION__, pathname); 486 sendlog(name(), __FUNCTION__, pathname);
487 int rv = orig_unlinkat(dirfd, pathname, flags); 487 int rv = orig_unlinkat(dirfd, pathname, flags);
@@ -499,7 +499,7 @@ int mkdir(const char *pathname, mode_t mode) {
499 orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir"); 499 orig_mkdir = (orig_mkdir_t)dlsym(RTLD_NEXT, "mkdir");
500 if (!blacklist_loaded) 500 if (!blacklist_loaded)
501 load_blacklist(); 501 load_blacklist();
502 502
503 if (storage_find(pathname)) 503 if (storage_find(pathname))
504 sendlog(name(), __FUNCTION__, pathname); 504 sendlog(name(), __FUNCTION__, pathname);
505 int rv = orig_mkdir(pathname, mode); 505 int rv = orig_mkdir(pathname, mode);
@@ -516,7 +516,7 @@ int mkdirat(int dirfd, const char *pathname, mode_t mode) {
516 orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat"); 516 orig_mkdirat = (orig_mkdirat_t)dlsym(RTLD_NEXT, "mkdirat");
517 if (!blacklist_loaded) 517 if (!blacklist_loaded)
518 load_blacklist(); 518 load_blacklist();
519 519
520 if (storage_find(pathname)) 520 if (storage_find(pathname))
521 sendlog(name(), __FUNCTION__, pathname); 521 sendlog(name(), __FUNCTION__, pathname);
522 int rv = orig_mkdirat(dirfd, pathname, mode); 522 int rv = orig_mkdirat(dirfd, pathname, mode);
@@ -533,7 +533,7 @@ int rmdir(const char *pathname) {
533 orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir"); 533 orig_rmdir = (orig_rmdir_t)dlsym(RTLD_NEXT, "rmdir");
534 if (!blacklist_loaded) 534 if (!blacklist_loaded)
535 load_blacklist(); 535 load_blacklist();
536 536
537 if (storage_find(pathname)) 537 if (storage_find(pathname))
538 sendlog(name(), __FUNCTION__, pathname); 538 sendlog(name(), __FUNCTION__, pathname);
539 int rv = orig_rmdir(pathname); 539 int rv = orig_rmdir(pathname);
@@ -551,7 +551,7 @@ int stat(const char *pathname, struct stat *buf) {
551 orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat"); 551 orig_stat = (orig_stat_t)dlsym(RTLD_NEXT, "stat");
552 if (!blacklist_loaded) 552 if (!blacklist_loaded)
553 load_blacklist(); 553 load_blacklist();
554 554
555 if (storage_find(pathname)) 555 if (storage_find(pathname))
556 sendlog(name(), __FUNCTION__, pathname); 556 sendlog(name(), __FUNCTION__, pathname);
557 int rv = orig_stat(pathname, buf); 557 int rv = orig_stat(pathname, buf);
@@ -569,7 +569,7 @@ int stat64(const char *pathname, struct stat64 *buf) {
569 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64"); 569 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat64");
570 if (!blacklist_loaded) 570 if (!blacklist_loaded)
571 load_blacklist(); 571 load_blacklist();
572 572
573 if (storage_find(pathname)) 573 if (storage_find(pathname))
574 sendlog(name(), __FUNCTION__, pathname); 574 sendlog(name(), __FUNCTION__, pathname);
575 int rv = orig_stat64(pathname, buf); 575 int rv = orig_stat64(pathname, buf);
@@ -587,7 +587,7 @@ int lstat(const char *pathname, struct stat *buf) {
587 orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat"); 587 orig_lstat = (orig_lstat_t)dlsym(RTLD_NEXT, "lstat");
588 if (!blacklist_loaded) 588 if (!blacklist_loaded)
589 load_blacklist(); 589 load_blacklist();
590 590
591 if (storage_find(pathname)) 591 if (storage_find(pathname))
592 sendlog(name(), __FUNCTION__, pathname); 592 sendlog(name(), __FUNCTION__, pathname);
593 int rv = orig_lstat(pathname, buf); 593 int rv = orig_lstat(pathname, buf);
@@ -605,7 +605,7 @@ int lstat64(const char *pathname, struct stat64 *buf) {
605 orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64"); 605 orig_lstat64 = (orig_lstat64_t)dlsym(RTLD_NEXT, "lstat64");
606 if (!blacklist_loaded) 606 if (!blacklist_loaded)
607 load_blacklist(); 607 load_blacklist();
608 608
609 if (storage_find(pathname)) 609 if (storage_find(pathname))
610 sendlog(name(), __FUNCTION__, pathname); 610 sendlog(name(), __FUNCTION__, pathname);
611 int rv = orig_lstat64(pathname, buf); 611 int rv = orig_lstat64(pathname, buf);
@@ -624,7 +624,7 @@ int access(const char *pathname, int mode) {
624 orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access"); 624 orig_access = (orig_access_t)dlsym(RTLD_NEXT, "access");
625 if (!blacklist_loaded) 625 if (!blacklist_loaded)
626 load_blacklist(); 626 load_blacklist();
627 627
628 if (storage_find(pathname)) 628 if (storage_find(pathname))
629 sendlog(name(), __FUNCTION__, pathname); 629 sendlog(name(), __FUNCTION__, pathname);
630 int rv = orig_access(pathname, mode); 630 int rv = orig_access(pathname, mode);
@@ -642,7 +642,7 @@ DIR *opendir(const char *pathname) {
642 orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir"); 642 orig_opendir = (orig_opendir_t)dlsym(RTLD_NEXT, "opendir");
643 if (!blacklist_loaded) 643 if (!blacklist_loaded)
644 load_blacklist(); 644 load_blacklist();
645 645
646 if (storage_find(pathname)) 646 if (storage_find(pathname))
647 sendlog(name(), __FUNCTION__, pathname); 647 sendlog(name(), __FUNCTION__, pathname);
648 DIR *rv = orig_opendir(pathname); 648 DIR *rv = orig_opendir(pathname);