]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Hook more properties for transient units 1614/head
authorNicolas Cornu <ncornu@aldebaran.com>
Mon, 19 Oct 2015 19:57:01 +0000 (21:57 +0200)
committerNicolas Cornu <ncornu@aldebaran.com>
Mon, 19 Oct 2015 19:58:01 +0000 (21:58 +0200)
systemd-run can now launch units with EnvironmentFile set.

src/core/dbus-execute.c
src/shared/bus-util.c

index 2662b0752568eef2b1a67131922c3f9e5213011c..b71e5ad300f95491fbac14915075901c6e1752a6 100644 (file)
@@ -1204,6 +1204,77 @@ int bus_exec_context_set_transient_property(
 
                 return 1;
 
+        } else if (streq(name, "EnvironmentFiles")) {
+
+                _cleanup_free_ char *joined = NULL;
+                _cleanup_fclose_ FILE *f = NULL;
+                size_t size = 0;
+                bool empty_array = true;
+
+                r = sd_bus_message_enter_container(message, 'a', "(sb)");
+                if (r < 0)
+                        return r;
+
+                f = open_memstream(&joined, &size);
+                if (!f)
+                        return -ENOMEM;
+
+                if (mode != UNIT_CHECK) {
+                        char **buf;
+                        STRV_FOREACH(buf, c->environment_files)
+                                fprintf(f, "EnvironmentFile=%s\n", *buf);
+                }
+
+                while ((r = sd_bus_message_enter_container(message, 'r', "sb")) > 0) {
+                        const char *path;
+                        int b;
+
+                        empty_array = false;
+
+                        r = sd_bus_message_read(message, "sb", &path, &b);
+                        if (r < 0)
+                                return r;
+
+                        r = sd_bus_message_exit_container(message);
+                        if (r < 0)
+                                return r;
+
+                        if (!isempty(path) && !path_is_absolute(path))
+                                return sd_bus_error_set_errnof(error, EINVAL, "Path %s is not absolute.", path);
+
+                        if (mode != UNIT_CHECK) {
+                                _cleanup_free_ char *drop_in = NULL;
+                                char *buf = NULL;
+
+                                buf = strjoin(b ? "-" : "", path, NULL);
+                                if (buf == NULL)
+                                        return -ENOMEM;
+
+                                fprintf(f, "EnvironmentFile=%s\n", buf);
+
+                                r = strv_consume(&c->environment_files, buf);
+                                if (r < 0)
+                                        return r;
+                        }
+                }
+                if (r < 0)
+                        return r;
+
+                fflush(f);
+
+                if (mode != UNIT_CHECK)
+                        if (empty_array) {
+                                strv_clear(c->environment_files);
+                                unit_write_drop_in_private(u, mode, name, "EnvironmentFile=\n");
+                        } else
+                                unit_write_drop_in_private(u, mode, name, joined);
+
+                r = sd_bus_message_exit_container(message);
+                if (r < 0)
+                        return r;
+
+                return 1;
+
         } else if (rlimit_from_string(name) >= 0) {
                 uint64_t rl;
                 rlim_t x;
index 78d6b0eb27657745c63b2245b0055b47cf500fe1..65ca173876f4f72f509b2291d2f50aae0be9f9d5 100644 (file)
@@ -1416,6 +1416,17 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
                         return bus_log_create_error(r);
 
                 return 0;
+        } else if (streq(field, "EnvironmentFile")) {
+                r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, "EnvironmentFiles");
+                if (r < 0)
+                        return r;
+
+                r = sd_bus_message_append(m, "v", "a(sb)", 1,
+                                          eq[0] == '-' ? eq + 1 : eq,
+                                          eq[0] == '-');
+                if (r < 0)
+                        return r;
+                return 0;
         }
 
         r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, field);