From 40d81119e5f42a3db807c23d9737e0e8dfafc6e0 Mon Sep 17 00:00:00 2001 From: smitsohu Date: Mon, 21 Dec 2020 00:59:44 +0100 Subject: simplify private option code --- src/firejail/fs_home.c | 51 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/firejail/fs_home.c b/src/firejail/fs_home.c index af891d61f..8c7c19203 100644 --- a/src/firejail/fs_home.c +++ b/src/firejail/fs_home.c @@ -360,43 +360,38 @@ void fs_private(void) { selinux_relabel_path("/root", "/root"); fs_logger("tmpfs /root"); - if (arg_allusers) { - if (u != 0) - // mask user home directory - // the directory should be owned by the current user - fs_tmpfs(homedir, 1); - } - else { // mask /home + // mask /home + if (!arg_allusers) { if (arg_debug) printf("Mounting a new /home directory\n"); if (mount("tmpfs", "/home", "tmpfs", MS_NOSUID | MS_NODEV | MS_NOEXEC | MS_STRICTATIME, "mode=755,gid=0") < 0) errExit("mounting /home directory"); selinux_relabel_path("/home", "/home"); fs_logger("tmpfs /home"); + } - if (u != 0) { - if (strncmp(homedir, "/home/", 6) == 0) { - // create /home/user - if (arg_debug) - printf("Create a new user directory\n"); - if (mkdir(homedir, S_IRWXU) == -1) { - if (mkpath_as_root(homedir) == -1) - errExit("mkpath"); - if (mkdir(homedir, S_IRWXU) == -1 && errno != EEXIST) - errExit("mkdir"); - } - if (chown(homedir, u, g) < 0) - errExit("chown"); - - selinux_relabel_path(homedir, homedir); - fs_logger2("mkdir", homedir); - fs_logger2("tmpfs", homedir); + if (u != 0) { + if (!arg_allusers && strncmp(homedir, "/home/", 6) == 0) { + // create new empty /home/user directory + if (arg_debug) + printf("Create a new user directory\n"); + if (mkdir(homedir, S_IRWXU) == -1) { + if (mkpath_as_root(homedir) == -1) + errExit("mkpath"); + if (mkdir(homedir, S_IRWXU) == -1) + errExit("mkdir"); } - else - // mask user home directory - // the directory should be owned by the current user - fs_tmpfs(homedir, 1); + if (chown(homedir, u, g) < 0) + errExit("chown"); + + selinux_relabel_path(homedir, homedir); + fs_logger2("mkdir", homedir); + fs_logger2("tmpfs", homedir); } + else + // mask user home directory + // the directory should be owned by the current user + fs_tmpfs(homedir, 1); } skel(homedir, u, g); -- cgit v1.2.3-70-g09d2