From 11e5b2ce21d6efa1ed0fea4db18e410427436162 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Wed, 24 Feb 2016 22:37:20 -0500 Subject: x11 work --- src/firejail/firejail.h | 2 ++ src/firejail/profile.c | 4 ++-- src/firejail/x11.c | 15 ++++++++++++++- src/firemon/firemon.c | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h index b37c3aba8..1fcb92fea 100644 --- a/src/firejail/firejail.h +++ b/src/firejail/firejail.h @@ -526,6 +526,8 @@ void fs_mkdir(const char *name); void fs_x11(void); void x11_start(int argc, char **argv); int x11_display(void); +// return 1 if xpra is installed on the system +int x11_check_xpra(void); #endif diff --git a/src/firejail/profile.c b/src/firejail/profile.c index ba287027c..8771a7fa8 100644 --- a/src/firejail/profile.c +++ b/src/firejail/profile.c @@ -102,13 +102,13 @@ int profile_check_line(char *ptr, int lineno, const char *fname) { return 0; } + // mkdir if (strncmp(ptr, "mkdir ", 6) == 0) { fs_mkdir(ptr + 6); return 0; } - // sandbox name - if (strncmp(ptr, "name ", 5) == 0) { + else if (strncmp(ptr, "name ", 5) == 0) { cfg.name = ptr + 5; if (strlen(cfg.name) == 0) { fprintf(stderr, "Error: invalid sandbox name\n"); diff --git a/src/firejail/x11.c b/src/firejail/x11.c index 980a4dbca..8f9a4c11f 100644 --- a/src/firejail/x11.c +++ b/src/firejail/x11.c @@ -26,6 +26,17 @@ #include #include +// return 1 if xpra is installed on the system +int x11_check_xpra(void) { + struct stat s; + + // check xpra + if (stat("/usr/bin/xpra", &s) == -1) + return 0; + + return 1; +} + // return display number, -1 if not configured int x11_display(void) { // extract display @@ -117,7 +128,7 @@ void x11_start(int argc, char **argv) { pid_t server = 0; // check xpra - if (stat("/usr/bin/xpra", &s) == -1) { + if (x11_check_xpra() == 0) { fprintf(stderr, "\nError: Xpra program was not found in /usr/bin directory, please install it:\n"); fprintf(stderr, " Debian/Ubuntu/Mint: sudo apt-get install xpra\n"); exit(0); @@ -127,6 +138,8 @@ void x11_start(int argc, char **argv) { int found = 1; for (i = 0; i < 100; i++) { display = rand() % 1024; + if (display < 10) + continue; char *fname; if (asprintf(&fname, "/tmp/.X11-unix/X%d", display) == -1) errExit("asprintf"); diff --git a/src/firemon/firemon.c b/src/firemon/firemon.c index c19c344b0..0e38696ac 100644 --- a/src/firemon/firemon.c +++ b/src/firemon/firemon.c @@ -224,7 +224,7 @@ int main(int argc, char **argv) { if (arg_x11) x11((pid_t) pid); - if (!arg_route && !arg_arp && !arg_interface && !arg_tree && !arg_caps && !arg_seccomp) + if (!arg_route && !arg_arp && !arg_interface && !arg_tree && !arg_caps && !arg_seccomp && !arg_x11) procevent((pid_t) pid); // never to return return 0; -- cgit v1.2.3-54-g00ecf