summaryrefslogtreecommitdiff
path: root/src/core/dbus-execute.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-04-24 22:03:06 +0200
committerGitHub <noreply@github.com>2023-04-24 22:03:06 +0200
commit208a59c15fd41f87248a1a981e558acd3de5e47b (patch)
tree45f73492212a2c220305ab41bb3c74cd6265efeb /src/core/dbus-execute.c
parent91ce42f008764c3c6d8d72c5fb3b72d0945b7de2 (diff)
parent2ed7a221fafb25eea937c4e86fb88ee501dba51e (diff)
downloadsystemd-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.c18
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;