diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2023-04-24 22:03:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-24 22:03:06 +0200 |
commit | 208a59c15fd41f87248a1a981e558acd3de5e47b (patch) | |
tree | 45f73492212a2c220305ab41bb3c74cd6265efeb /src/core/dbus-execute.c | |
parent | 91ce42f008764c3c6d8d72c5fb3b72d0945b7de2 (diff) | |
parent | 2ed7a221fafb25eea937c4e86fb88ee501dba51e (diff) | |
download | systemd-208a59c15fd41f87248a1a981e558acd3de5e47b.tar.gz |
Merge pull request #27113 from keszybz/variable-expansion-rework
Rework serialization of command lines in pid1 and make run not expand variables
Diffstat (limited to 'src/core/dbus-execute.c')
-rw-r--r-- | src/core/dbus-execute.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index ce20183a70..4c413f4d29 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -1543,6 +1543,9 @@ int bus_set_transient_exec_command( unsigned n = 0; int r; + /* Drop Ex from the written setting. E.g. ExecStart=, not ExecStartEx=. */ + const char *written_name = is_ex_prop ? strndupa(name, strlen(name) - 2) : name; + r = sd_bus_message_enter_container(message, 'a', is_ex_prop ? "(sasas)" : "(sasb)"); if (r < 0) return r; @@ -1624,31 +1627,32 @@ int bus_set_transient_exec_command( if (!f) return -ENOMEM; - fprintf(f, "%s=\n", name); + fprintf(f, "%s=\n", written_name); LIST_FOREACH(command, c, *exec_command) { _cleanup_free_ char *a = NULL, *exec_chars = NULL; + UnitWriteFlags esc_flags = UNIT_ESCAPE_SPECIFIERS | + (FLAGS_SET(c->flags, EXEC_COMMAND_NO_ENV_EXPAND) ? UNIT_ESCAPE_EXEC_SYNTAX : UNIT_ESCAPE_EXEC_SYNTAX_ENV); exec_chars = exec_command_flags_to_exec_chars(c->flags); if (!exec_chars) return -ENOMEM; - a = unit_concat_strv(c->argv, UNIT_ESCAPE_SPECIFIERS|UNIT_ESCAPE_EXEC_SYNTAX); + a = unit_concat_strv(c->argv, esc_flags); if (!a) return -ENOMEM; if (streq_ptr(c->path, c->argv ? c->argv[0] : NULL)) - fprintf(f, "%s=%s%s\n", name, exec_chars, a); + fprintf(f, "%s=%s%s\n", written_name, exec_chars, a); else { _cleanup_free_ char *t = NULL; const char *p; - p = unit_escape_setting(c->path, - UNIT_ESCAPE_SPECIFIERS|UNIT_ESCAPE_EXEC_SYNTAX, &t); + p = unit_escape_setting(c->path, esc_flags, &t); if (!p) return -ENOMEM; - fprintf(f, "%s=%s@%s %s\n", name, exec_chars, p, a); + fprintf(f, "%s=%s@%s %s\n", written_name, exec_chars, p, a); } } @@ -1656,7 +1660,7 @@ int bus_set_transient_exec_command( if (r < 0) return r; - unit_write_setting(u, flags, name, buf); + unit_write_setting(u, flags, written_name, buf); } return 1; |