mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-28 17:47:05 +03:00
pid1: fix serialization/deserialization of commmands with spaces
Fixes #12258. This is enough to reproduce: $ systemd-run bash -c 'sleep 10' && systemctl daemon-reload would result in Current command vanished from the unit file. We would serialize as: ExecStart 0 /usr/bin/bash /usr/bin/bash -c sleep 10000 which of course can't work. Now we serialize as ExecStart 0 /usr/bin/bash "/usr/bin/bash" "-c" "sleep 10".
This commit is contained in:
parent
cd132992bb
commit
334c0979f3
@ -2530,14 +2530,16 @@ static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command
|
||||
return log_oom();
|
||||
|
||||
n = strlen(e);
|
||||
if (!GREEDY_REALLOC(args, allocated, length + 1 + n + 1))
|
||||
if (!GREEDY_REALLOC(args, allocated, length + 2 + n + 2))
|
||||
return log_oom();
|
||||
|
||||
if (length > 0)
|
||||
args[length++] = ' ';
|
||||
|
||||
args[length++] = '"';
|
||||
memcpy(args + length, e, n);
|
||||
length += n;
|
||||
args[length++] = '"';
|
||||
}
|
||||
|
||||
if (!GREEDY_REALLOC(args, allocated, length + 1))
|
||||
@ -2682,7 +2684,7 @@ static int service_deserialize_exec_command(Unit *u, const char *key, const char
|
||||
for (;;) {
|
||||
_cleanup_free_ char *arg = NULL;
|
||||
|
||||
r = extract_first_word(&value, &arg, NULL, EXTRACT_CUNESCAPE);
|
||||
r = extract_first_word(&value, &arg, NULL, EXTRACT_CUNESCAPE | EXTRACT_UNQUOTE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user