From 40ed53c20b7a1a5569795a858c3bfe100083c666 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Sat, 8 Oct 2016 08:33:42 -0400 Subject: nvidia fix --- src/firejail/firejail.h | 3 +-- src/firejail/fs_dev.c | 2 +- src/firejail/main.c | 27 +++++++++++++++++++++------ src/firejail/util.c | 21 +++++---------------- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h index f4d468394..c801ea262 100644 --- a/src/firejail/firejail.h +++ b/src/firejail/firejail.h @@ -457,8 +457,7 @@ char *expand_home(const char *path, const char* homedir); const char *gnu_basename(const char *path); uid_t pid_get_uid(pid_t pid); void invalid_filename(const char *fname); -uid_t get_tty_gid(void); -uid_t get_audio_gid(void); +uid_t get_group_id(const char *group); int remove_directory(const char *path); void flush_stdin(void); diff --git a/src/firejail/fs_dev.c b/src/firejail/fs_dev.c index daf0afd9e..aa5f7c28b 100644 --- a/src/firejail/fs_dev.c +++ b/src/firejail/fs_dev.c @@ -225,7 +225,7 @@ void fs_private_dev(void){ // mount /dev/pts - gid_t ttygid = get_tty_gid(); + gid_t ttygid = get_group_id("tty"); char *data; if (asprintf(&data, "newinstance,gid=%d,mode=620,ptmxmode=0666", (int) ttygid) == -1) errExit("asprintf"); diff --git a/src/firejail/main.c b/src/firejail/main.c index 6d4eb21df..987a79d1c 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c @@ -2555,16 +2555,31 @@ int main(int argc, char **argv) { ptr += strlen(ptr); // add tty group - gid_t ttygid = get_tty_gid(); - if (ttygid) { - sprintf(ptr, "%d %d 1\n", ttygid, ttygid); + gid_t g = get_group_id("tty"); + if (g) { + sprintf(ptr, "%d %d 1\n", g, g); ptr += strlen(ptr); } // add audio group - gid_t audiogid = get_audio_gid(); - if (ttygid) { - sprintf(ptr, "%d %d 1\n", audiogid, audiogid); + g = get_group_id("audio"); + if (g) { + sprintf(ptr, "%d %d 1\n", g, g); + ptr += strlen(ptr); + } + + // add video group + g = get_group_id("video"); + if (g) { + sprintf(ptr, "%d %d 1\n", g, g); + ptr += strlen(ptr); + } + + // add games group + g = get_group_id("games"); + if (g) { + sprintf(ptr, "%d %d 1\n", g, g); + ptr += strlen(ptr); } EUID_ROOT(); diff --git a/src/firejail/util.c b/src/firejail/util.c index 7aa0ae0e8..f38b02fd0 100644 --- a/src/firejail/util.c +++ b/src/firejail/util.c @@ -649,25 +649,14 @@ void invalid_filename(const char *fname) { } -uid_t get_tty_gid(void) { +uid_t get_group_id(const char *group) { // find tty group id - gid_t ttygid = 0; - struct group *g = getgrnam("tty"); + gid_t gid = 0; + struct group *g = getgrnam(group); if (g) - ttygid = g->gr_gid; + gid = g->gr_gid; - return ttygid; -} - - -uid_t get_audio_gid(void) { - // find tty group id - gid_t audiogid = 0; - struct group *g = getgrnam("audio"); - if (g) - audiogid = g->gr_gid; - - return audiogid; + return gid; } -- cgit v1.2.3-70-g09d2