134 lines
4.3 KiB
Diff
134 lines
4.3 KiB
Diff
|
|
From 284781bcb00be27737b52ffb974b66b7d5e990d5 Mon Sep 17 00:00:00 2001
|
||
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
|
Date: Wed, 7 Jul 2021 16:28:19 +0200
|
||
|
|
Subject: [PATCH] core: use the new quoting helper
|
||
|
|
|
||
|
|
(cherry picked from commit 8a62620ebe23945021075df7e1b0759102c286ae)
|
||
|
|
|
||
|
|
Conflict:NA
|
||
|
|
Reference:https://github.com/systemd/systemd/commit/284781bcb00be27737b52ffb974b66b7d5e990d5
|
||
|
|
---
|
||
|
|
src/core/execute.c | 64 ++++++++++------------------------------------
|
||
|
|
1 file 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));
|
||
|
|
--
|
||
|
|
2.33.0
|
||
|
|
|