From ddcd56b11c47278fe887e5b4fb5bd86715881114 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Wed, 31 Aug 2016 10:40:16 -0400 Subject: Arch fixes --- src/firejail/fs_whitelist.c | 38 ++++++++++++++++++++++---------------- test/fs/private-etc-empty.exp | 9 ++++++--- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/firejail/fs_whitelist.c b/src/firejail/fs_whitelist.c index 33037da29..11e626b6e 100644 --- a/src/firejail/fs_whitelist.c +++ b/src/firejail/fs_whitelist.c @@ -554,24 +554,30 @@ void fs_whitelist(void) { // /media mountpoint if (media_dir) { - // keep a copy of real /media directory in RUN_WHITELIST_MEDIA_DIR - int rv = mkdir(RUN_WHITELIST_MEDIA_DIR, 0755); - if (rv == -1) - errExit("mkdir"); - if (chown(RUN_WHITELIST_MEDIA_DIR, 0, 0) < 0) - errExit("chown"); - if (chmod(RUN_WHITELIST_MEDIA_DIR, 0755) < 0) - errExit("chmod"); + // some distros don't have a /media directory + struct stat s; + if (stat("/media", &s) == 0) { + // keep a copy of real /media directory in RUN_WHITELIST_MEDIA_DIR + int rv = mkdir(RUN_WHITELIST_MEDIA_DIR, 0755); + if (rv == -1) + errExit("mkdir"); + if (chown(RUN_WHITELIST_MEDIA_DIR, 0, 0) < 0) + errExit("chown"); + if (chmod(RUN_WHITELIST_MEDIA_DIR, 0755) < 0) + errExit("chmod"); - if (mount("/media", RUN_WHITELIST_MEDIA_DIR, NULL, MS_BIND|MS_REC, NULL) < 0) - errExit("mount bind"); + if (mount("/media", RUN_WHITELIST_MEDIA_DIR, NULL, MS_BIND|MS_REC, NULL) < 0) + errExit("mount bind"); - // mount tmpfs on /media - if (arg_debug || arg_debug_whitelists) - printf("Mounting tmpfs on /media directory\n"); - if (mount("tmpfs", "/media", "tmpfs", MS_NOSUID | MS_STRICTATIME | MS_REC, "mode=755,gid=0") < 0) - errExit("mounting tmpfs on /media"); - fs_logger("tmpfs /media"); + // mount tmpfs on /media + if (arg_debug || arg_debug_whitelists) + printf("Mounting tmpfs on /media directory\n"); + if (mount("tmpfs", "/media", "tmpfs", MS_NOSUID | MS_STRICTATIME | MS_REC, "mode=755,gid=0") < 0) + errExit("mounting tmpfs on /media"); + fs_logger("tmpfs /media"); + } + else + media_dir = 0; } // /var mountpoint diff --git a/test/fs/private-etc-empty.exp b/test/fs/private-etc-empty.exp index 2ab634afd..5ddce8678 100755 --- a/test/fs/private-etc-empty.exp +++ b/test/fs/private-etc-empty.exp @@ -3,7 +3,7 @@ # Copyright (C) 2014-2016 Firejail Authors # License GPL v2 -set timeout 30 +set timeout 10 spawn $env(SHELL) match_max 100000 @@ -17,7 +17,8 @@ sleep 1 send -- "ls -l /etc | wc -l\r" expect { timeout {puts "TESTING ERROR 1\n";exit} - "0" + "0" {puts "Debian\n"} + "1" {puts "Arch\n"} } send -- "exit\r" sleep 1 @@ -32,7 +33,9 @@ sleep 1 send -- "ls -l /etc | wc -l\r" expect { timeout {puts "TESTING ERROR 1\n";exit} - "0" + "0" {puts "Debian\n"} + "1" {puts "Arch\n"} + } after 100 -- cgit v1.2.3-70-g09d2