mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
manager: pass environment over daemon-reexec
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 >
This commit is contained in:
parent
d01a73b639
commit
4a9fd066f0
@ -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,14 @@ 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;
|
||||
|
||||
ce = cescape(*e);
|
||||
if (ce)
|
||||
fprintf(f, "env=%s\n", *e);
|
||||
}
|
||||
|
||||
fputc('\n', f);
|
||||
|
||||
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
|
||||
@ -1979,7 +1988,25 @@ 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
|
||||
else if (startswith(l, "env=")) {
|
||||
_cleanup_free_ char *uce = NULL;
|
||||
char **e;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user