From 3e4772ecadd9c2c820204c6fc88a48c38b5131fb Mon Sep 17 00:00:00 2001 From: netblue30 Date: Thu, 18 Aug 2016 21:13:26 -0400 Subject: small fixes for command args --- src/firejail/main.c | 5 +++-- src/firejail/no_sandbox.c | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/firejail/main.c b/src/firejail/main.c index 4946db2bd..8e18ec724 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c @@ -723,7 +723,7 @@ static void detect_quiet(int argc, char **argv) { } char *guess_shell(void) { - char *shell; + char *shell = NULL; // shells in order of preference char *shells[] = {"/bin/bash", "/bin/csh", "/usr/bin/zsh", "/bin/sh", "/bin/ash", NULL }; @@ -910,7 +910,8 @@ int main(int argc, char **argv) { #endif drop_privs(1); - run_no_sandbox(argc, argv); + int rv = system(argv[2]); + exit(rv); } } } diff --git a/src/firejail/no_sandbox.c b/src/firejail/no_sandbox.c index 090c06761..f7d62f90c 100644 --- a/src/firejail/no_sandbox.c +++ b/src/firejail/no_sandbox.c @@ -237,7 +237,7 @@ void run_no_sandbox(int argc, char **argv) { } // guess shell otherwise if (!arg_shell_none && !cfg.shell) { - guess_shell(); + cfg.shell = guess_shell(); if (arg_debug) printf("Autoselecting %s as shell\n", cfg.shell); } @@ -247,8 +247,19 @@ void run_no_sandbox(int argc, char **argv) { } int prog_index = 0; - // find first non option arg + // find first non option arg: + // - first argument not starting wiht --, + // - whatever follows after -c (example: firejail -c ls) for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-c") == 0) { + prog_index = i + 1; + if (prog_index == argc) { + fprintf(stderr, "Error: option -c requires an argument\n"); + exit(1); + } + break; + } + // check first argument not starting with -- if (strncmp(argv[i],"--",2) != 0) { prog_index = i; break; -- cgit v1.2.3-54-g00ecf