summaryrefslogtreecommitdiff
path: root/src/core/dbus-service.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2017-12-23 18:47:33 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2017-12-23 18:47:33 +0900
commit9c0320e7abda82f78c448c2b173d2809dac6bfb1 (patch)
tree8ec56ef7cea3708653575475c5281f149e29926d /src/core/dbus-service.c
parent398ce0bc5a0e1aad57223a62dcbcc8854e103c90 (diff)
downloadsystemd-9c0320e7abda82f78c448c2b173d2809dac6bfb1.tar.gz
core: implement transient socket unit
Diffstat (limited to 'src/core/dbus-service.c')
-rw-r--r--src/core/dbus-service.c110
1 files changed, 2 insertions, 108 deletions
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index 0189952124..c5eba5f4e5 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -239,114 +239,8 @@ static int bus_service_set_transient_property(
return 1;
- } else if ((ci = service_exec_command_from_string(name)) >= 0) {
- unsigned n = 0;
-
- r = sd_bus_message_enter_container(message, 'a', "(sasb)");
- if (r < 0)
- return r;
-
- while ((r = sd_bus_message_enter_container(message, 'r', "sasb")) > 0) {
- _cleanup_strv_free_ char **argv = NULL;
- const char *path;
- int b;
-
- r = sd_bus_message_read(message, "s", &path);
- if (r < 0)
- return r;
-
- if (!path_is_absolute(path))
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path %s is not absolute.", path);
-
- r = sd_bus_message_read_strv(message, &argv);
- if (r < 0)
- return r;
-
- r = sd_bus_message_read(message, "b", &b);
- if (r < 0)
- return r;
-
- r = sd_bus_message_exit_container(message);
- if (r < 0)
- return r;
-
- if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
- ExecCommand *c;
-
- c = new0(ExecCommand, 1);
- if (!c)
- return -ENOMEM;
-
- c->path = strdup(path);
- if (!c->path) {
- free(c);
- return -ENOMEM;
- }
-
- c->argv = argv;
- argv = NULL;
-
- c->flags = b ? EXEC_COMMAND_IGNORE_FAILURE : 0;
-
- path_kill_slashes(c->path);
- exec_command_append_list(&s->exec_command[ci], c);
- }
-
- n++;
- }
-
- if (r < 0)
- return r;
-
- r = sd_bus_message_exit_container(message);
- if (r < 0)
- return r;
-
- if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
- _cleanup_free_ char *buf = NULL;
- _cleanup_fclose_ FILE *f = NULL;
- ExecCommand *c;
- size_t size = 0;
-
- if (n == 0)
- s->exec_command[ci] = exec_command_free_list(s->exec_command[ci]);
-
- f = open_memstream(&buf, &size);
- if (!f)
- return -ENOMEM;
-
- (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
-
- fputs("ExecStart=\n", f);
-
- LIST_FOREACH(command, c, s->exec_command[ci]) {
- _cleanup_free_ char *a = NULL, *t = NULL;
- const char *p;
-
- p = unit_escape_setting(c->path, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS, &t);
- if (!p)
- return -ENOMEM;
-
- a = unit_concat_strv(c->argv, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS);
- if (!a)
- return -ENOMEM;
-
- fprintf(f, "%s=%s@%s %s\n",
- name,
- c->flags & EXEC_COMMAND_IGNORE_FAILURE ? "-" : "",
- p,
- a);
- }
-
- r = fflush_and_check(f);
- if (r < 0)
- return r;
-
- unit_write_setting(UNIT(s), flags, name, buf);
- }
-
- return 1;
- }
+ } else if ((ci = service_exec_command_from_string(name)) >= 0)
+ return bus_exec_command_set_transient_property(UNIT(s), name, &s->exec_command[ci], message, flags, error);
return 0;
}