Fixes this bug:
alxchk > systemctl --user set-environment A=B
alxchk > systemctl --user show-environment | grep ^A=
A=B
alxchk > systemctl --user daemon-reexec
alxchk > systemctl --user show-environment | grep ^A=
alxchk >
---
 src/core/manager.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/src/core/manager.c b/src/core/manager.c
index 4bebb29..af77598 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1856,6 +1856,7 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, 
bool serialize_jobs) {
         Iterator i;
         Unit *u;
         const char *t;
+        char **e;
         int r;
 
         assert(m);
@@ -1879,6 +1880,13 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, 
bool serialize_jobs) {
                 dual_timestamp_serialize(f, "finish-timestamp", 
&m->finish_timestamp);
         }
 
+        STRV_FOREACH(e, m->environment) {
+                _cleanup_free_ char *ce = cescape(*e);
+
+                if (ce)
+                        fprintf(f, "env=%s\n", *e);
+        }
+
         fputc('\n', f);
 
         HASHMAP_FOREACH_KEY(u, t, m->units, i) {
@@ -1979,6 +1987,27 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) 
{
                         dual_timestamp_deserialize(l+20, 
&m->userspace_timestamp);
                 else if (startswith(l, "finish-timestamp="))
                         dual_timestamp_deserialize(l+17, &m->finish_timestamp);
+                else if (startswith(l, "env="))
+                        {
+                                _cleanup_free_
+                                char *uce = NULL;
+                                char ** e = NULL;
+
+                                uce = cunescape(l+4);
+                                if (! uce) {
+                                        r = -ENOMEM;
+                                        goto finish;
+                                }
+
+                                e = strv_env_set(m->environment, uce);
+                                if (! e) {
+                                        r = -ENOMEM;
+                                        goto finish;
+                                }
+
+                                strv_free(m->environment);
+                                m->environment = e;
+                        }
                 else
                         log_debug("Unknown serialization item '%s'", l);
         }
-- 
1.8.1.2

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to