From d871bef1d21f030b2e44049ac7d3e1c01928c660 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Tue, 8 Mar 2016 11:37:52 -0500 Subject: fs work --- src/firejail/fs_dev.c | 4 ++-- src/firejail/fs_etc.c | 8 +++++++- src/firejail/ls.c | 34 +++++++++++++++------------------- 3 files changed, 24 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/firejail/fs_dev.c b/src/firejail/fs_dev.c index 2525dab24..5c645b8da 100644 --- a/src/firejail/fs_dev.c +++ b/src/firejail/fs_dev.c @@ -133,7 +133,7 @@ void fs_private_dev(void){ errExit("chmod"); if (mount(RUN_DRI_DIR, "/dev/dri", NULL, MS_BIND|MS_REC, NULL) < 0) errExit("mounting /dev/dri"); - fs_logger("clone /dev/dri"); + fs_logger("whitelist /dev/dri"); } // create /dev/shm @@ -181,7 +181,7 @@ void fs_private_dev(void){ // mount -vt devpts -o newinstance -o ptmxmode=0666 devpts //dev/pts if (mount("devpts", "/dev/pts", "devpts", MS_MGC_VAL, "newinstance,ptmxmode=0666") < 0) errExit("mounting /dev/pts"); - fs_logger("mount devpts"); + fs_logger("clone /dev/pts"); #if 0 // stdin, stdout, stderr diff --git a/src/firejail/fs_etc.c b/src/firejail/fs_etc.c index 5a8bf6904..bb33b4c76 100644 --- a/src/firejail/fs_etc.c +++ b/src/firejail/fs_etc.c @@ -98,7 +98,12 @@ static void duplicate(char *fname) { if (system(cmd)) errExit("system cp -a --parents"); free(cmd); - fs_logger2("clone", fname); + + char *name; + if (asprintf(&name, "/etc/%s", fname) == -1) + errExit("asprintf"); + fs_logger2("clone", name); + free(name); } @@ -121,6 +126,7 @@ void fs_private_etc_list(void) { errExit("chown"); if (chmod(RUN_ETC_DIR, 0755) < 0) errExit("chmod"); + fs_logger("tmpfs /etc"); // copy the list of files in the new etc directory // using a new child process without root privileges diff --git a/src/firejail/ls.c b/src/firejail/ls.c index bd4a4e347..b814af445 100644 --- a/src/firejail/ls.c +++ b/src/firejail/ls.c @@ -25,6 +25,9 @@ #include #include #include +//#include +//#include +//#include // uid/gid cache static uid_t c_uid = 0; @@ -169,27 +172,20 @@ static void print_directory(const char *path) { return; assert(S_ISDIR(s.st_mode)); - DIR *dir; - if (!(dir = opendir(path))) { - // sleep 2 seconds and try again - sleep(2); - if (!(dir = opendir(path))) { - fprintf(stderr, "Error: cannot open directory %s\n", path); - exit(1); + struct dirent **namelist; + int i; + int n; + + n = scandir(path, &namelist, 0, alphasort); + if (n < 0) + errExit("scandir"); + else { + for (i = 0; i < n; i++) { + print_file_or_dir(path, namelist[i]->d_name, 0); + free(namelist[i]); } } - - struct dirent *entry; - while ((entry = readdir(dir))) { - if (strcmp(entry->d_name, ".") == 0) - continue; - if (strcmp(entry->d_name, "..") == 0) - continue; - - print_file_or_dir(path, entry->d_name, 0); - } - - closedir(dir); + free(namelist); } void ls_name(const char *name, const char *path) { -- cgit v1.2.3-54-g00ecf