From 74a9ffe66e0f4e41bccea80783c5ac946c3ac51e Mon Sep 17 00:00:00 2001 From: netblue30 Date: Wed, 29 Jun 2016 12:53:35 -0400 Subject: fixed broken argument functionality --- src/firejail/join.c | 12 +++++++++--- src/firejail/no_sandbox.c | 12 +++++++++--- src/firejail/run_symlink.c | 15 ++++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/firejail/join.c b/src/firejail/join.c index 5a2c02d63..aba8f064b 100644 --- a/src/firejail/join.c +++ b/src/firejail/join.c @@ -61,9 +61,15 @@ static void extract_command(int argc, char **argv, int index) { cfg.command_line = malloc(len + 1); *cfg.command_line = '\0'; for (i = index; i < argc; i++) { - strcat(cfg.command_line, "\""); - strcat(cfg.command_line, argv[i]); - strcat(cfg.command_line, "\" "); + if (strchr(argv[i], '&')) { + strcat(cfg.command_line, "\""); + strcat(cfg.command_line, argv[i]); + strcat(cfg.command_line, "\" "); + } + else { + strcat(cfg.command_line, argv[i]); + strcat(cfg.command_line, " "); + } } if (arg_debug) printf("Extracted command #%s#\n", cfg.command_line); diff --git a/src/firejail/no_sandbox.c b/src/firejail/no_sandbox.c index f6ad3d472..898803615 100644 --- a/src/firejail/no_sandbox.c +++ b/src/firejail/no_sandbox.c @@ -191,9 +191,15 @@ void run_no_sandbox(int argc, char **argv) { // copy for (i = start_index; i < argc; i++) { - strcat(command, "\""); - strcat(command, argv[i]); - strcat(command, "\" "); + if (strchr(argv[i], '&')) { + strcat(command, "\""); + strcat(command, argv[i]); + strcat(command, "\" "); + } + else { + strcat(command, argv[i]); + strcat(command, " "); + } } } diff --git a/src/firejail/run_symlink.c b/src/firejail/run_symlink.c index 554d243e5..26c6c5133 100644 --- a/src/firejail/run_symlink.c +++ b/src/firejail/run_symlink.c @@ -103,11 +103,16 @@ void run_symlink(int argc, char **argv) { a[1] = program; int i; for (i = 0; i < (argc - 1); i++) { - char *str = malloc(strlen(argv[i + 1])); - if (str == NULL) - errExit("malloc"); - sprintf(str, "\"%s\"", argv[i + 1]); - a[i + 2] = str; + // look for & character + if (strchr(argv[i + 1], '&')) { + char *str = malloc(strlen(argv[i + 1])); + if (str == NULL) + errExit("malloc"); + sprintf(str, "\"%s\"", argv[i + 1]); + a[i + 2] = str; + } + else + a[i + 2] = argv[i + 1]; } a[i + 2] = NULL; execvp(a[0], a); -- cgit v1.2.3-70-g09d2