diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2017-12-23 18:47:33 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2017-12-23 18:47:33 +0900 |
commit | 9c0320e7abda82f78c448c2b173d2809dac6bfb1 (patch) | |
tree | 8ec56ef7cea3708653575475c5281f149e29926d /src/core/dbus-service.c | |
parent | 398ce0bc5a0e1aad57223a62dcbcc8854e103c90 (diff) | |
download | systemd-9c0320e7abda82f78c448c2b173d2809dac6bfb1.tar.gz |
core: implement transient socket unit
Diffstat (limited to 'src/core/dbus-service.c')
-rw-r--r-- | src/core/dbus-service.c | 110 |
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; } |