chiark / gitweb /
systemd-run: properly escape arguments
[elogind.git] / src / core / dbus-service.c
index 85b13f01ef924b93c8673d14c702b8f39e236d8c..696c4462fe257010dcd394afd4bea39e7060bdb6 100644 (file)
@@ -273,21 +273,16 @@ static int bus_service_set_transient_property(
                         fputs("ExecStart=\n", f);
 
                         LIST_FOREACH(command, c, s->exec_command[SERVICE_EXEC_START]) {
-                                char **a;
-                                fputs("ExecStart=", f);
+                                _cleanup_free_ char *a;
 
-                                if (c->ignore)
-                                        fputc('-', f);
-
-                                fputc('@', f);
-                                fputs(c->path, f);
-
-                                STRV_FOREACH(a, c->argv) {
-                                        fputc(' ', f);
-                                        fputs(*a, f);
-                                }
+                                a = strv_join_quoted(c->argv);
+                                if (!a)
+                                        return -ENOMEM;
 
-                                fputc('\n', f);
+                                fprintf(f, "ExecStart=%s@%s %s\n",
+                                        c->ignore ? "-" : "",
+                                        c->path,
+                                        a);
                         }
 
                         fflush(f);