diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-07-07 16:28:19 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-02-15 14:48:00 +0100 |
commit | 284781bcb00be27737b52ffb974b66b7d5e990d5 (patch) | |
tree | ccb4e0b5f448979b7635a352f98b4c9d37fc1039 | |
parent | 17d1b0d2dd109c5e413d8ef1eb5835344f9314b9 (diff) | |
download | systemd-284781bcb00be27737b52ffb974b66b7d5e990d5.tar.gz |
core: use the new quoting helper
(cherry picked from commit 8a62620ebe23945021075df7e1b0759102c286ae)
-rw-r--r-- | src/core/execute.c | 64 |
1 files changed, 13 insertions, 51 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index e24775c150..28efe5c36f 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -51,6 +51,7 @@ #include "env-file.h" #include "env-util.h" #include "errno-list.h" +#include "escape.h" #include "execute.h" #include "exit-status.h" #include "fd-util.h" @@ -3596,8 +3597,6 @@ static int compile_suggested_paths(const ExecContext *c, const ExecParameters *p return 0; } -static char *exec_command_line(char **argv); - static int exec_parameters_get_cgroup_path(const ExecParameters *params, char **ret) { bool using_subcgroup; char *p; @@ -3800,7 +3799,7 @@ static int exec_child( const char *vc = params->confirm_spawn; _cleanup_free_ char *cmdline = NULL; - cmdline = exec_command_line(command->argv); + cmdline = quote_command_line(command->argv); if (!cmdline) { *exit_status = EXIT_MEMORY; return log_oom(); @@ -4650,12 +4649,15 @@ static int exec_child( if (DEBUG_LOGGING) { _cleanup_free_ char *line = NULL; - line = exec_command_line(final_argv); - if (line) - log_unit_struct(unit, LOG_DEBUG, - "EXECUTABLE=%s", executable, - LOG_UNIT_MESSAGE(unit, "Executing: %s", line), - LOG_UNIT_INVOCATION_ID(unit)); + line = quote_command_line(final_argv); + if (!line) { + *exit_status = EXIT_MEMORY; + return log_oom(); + } + + log_unit_struct(unit, LOG_DEBUG, + "EXECUTABLE=%s", executable, + LOG_UNIT_MESSAGE(unit, "Executing: %s", line)); } if (exec_fd >= 0) { @@ -4739,7 +4741,7 @@ int exec_spawn(Unit *unit, if (r < 0) return log_unit_error_errno(unit, r, "Failed to load environment files: %m"); - line = exec_command_line(command->argv); + line = quote_command_line(command->argv); if (!line) return log_oom(); @@ -5954,46 +5956,6 @@ void exec_status_dump(const ExecStatus *s, FILE *f, const char *prefix) { prefix, s->status); } -static char *exec_command_line(char **argv) { - size_t k; - char *n, *p, **a; - bool first = true; - - assert(argv); - - k = 1; - STRV_FOREACH(a, argv) - k += strlen(*a)+3; - - n = new(char, k); - if (!n) - return NULL; - - p = n; - STRV_FOREACH(a, argv) { - - if (!first) - *(p++) = ' '; - else - first = false; - - if (strpbrk(*a, WHITESPACE)) { - *(p++) = '\''; - p = stpcpy(p, *a); - *(p++) = '\''; - } else - p = stpcpy(p, *a); - - } - - *p = 0; - - /* FIXME: this doesn't really handle arguments that have - * spaces and ticks in them */ - - return n; -} - static void exec_command_dump(ExecCommand *c, FILE *f, const char *prefix) { _cleanup_free_ char *cmd = NULL; const char *prefix2; @@ -6004,7 +5966,7 @@ static void exec_command_dump(ExecCommand *c, FILE *f, const char *prefix) { prefix = strempty(prefix); prefix2 = strjoina(prefix, "\t"); - cmd = exec_command_line(c->argv); + cmd = quote_command_line(c->argv); fprintf(f, "%sCommand Line: %s\n", prefix, cmd ? cmd : strerror_safe(ENOMEM)); |