Don't strip quotes from exec args
Before passing a command to a command handler the quotes are stripped from each argument in the command. This is usually the wanted behavior but causes a problem in the case of `exec` where quoted arguments can be required when passing the exec command to `/bin/sh -c`. This patch makes `exec` a special case and doesn't strip quotes from the arguments. It will just pass the exec command verbatim to the exec command handler. Fix #518
This commit is contained in:
parent
e7e1081a93
commit
99f26c61a5
|
@ -362,10 +362,8 @@ static struct cmd_results *cmd_exec_always(int argc, char **argv) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_quotes(argv + 1, argc - 1);
|
|
||||||
tmp = join_args(argv + 1, argc - 1);
|
tmp = join_args(argv + 1, argc - 1);
|
||||||
} else {
|
} else {
|
||||||
add_quotes(argv, argc);
|
|
||||||
tmp = join_args(argv, argc);
|
tmp = join_args(argv, argc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2869,12 +2867,14 @@ struct cmd_results *handle_command(char *_exec) {
|
||||||
//TODO better handling of argv
|
//TODO better handling of argv
|
||||||
int argc;
|
int argc;
|
||||||
char **argv = split_args(cmd, &argc);
|
char **argv = split_args(cmd, &argc);
|
||||||
|
if (strcmp(argv[0], "exec") != 0) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 1; i < argc; ++i) {
|
for (i = 1; i < argc; ++i) {
|
||||||
if (*argv[i] == '\"' || *argv[i] == '\'') {
|
if (*argv[i] == '\"' || *argv[i] == '\'') {
|
||||||
strip_quotes(argv[i]);
|
strip_quotes(argv[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
struct cmd_handler *handler = find_handler(argv[0], CMD_BLOCK_END);
|
struct cmd_handler *handler = find_handler(argv[0], CMD_BLOCK_END);
|
||||||
if (!handler) {
|
if (!handler) {
|
||||||
if (results) {
|
if (results) {
|
||||||
|
|
Loading…
Reference in a new issue