diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-11-19 12:23:13 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-11-19 13:01:19 +0100 |
commit | 79a224c46012f2817e3fa431ff30d10f4d3b6626 (patch) | |
tree | 27e257f5b581059570de956c70be39e1737159c5 /src | |
parent | 2fbbbf9a5fbcc71c91a93642f227864568d3a699 (diff) | |
download | systemd-79a224c46012f2817e3fa431ff30d10f4d3b6626.tar.gz |
main: when reloading PID 1 let's reset the default environment
Otherwise we keep collecting stuff from env generators, and we really
shouldn't.
This was working properly on reexec but not on reload, as for reexec we
would always start fresh, but for reload would reuse the Manager object
and hence its default environment set.
Fixes: #10671
Diffstat (limited to 'src')
-rw-r--r-- | src/core/main.c | 6 | ||||
-rw-r--r-- | src/core/manager.c | 2 | ||||
-rw-r--r-- | src/core/manager.h | 1 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/core/main.c b/src/core/main.c index f1dad983b7..70227da4b7 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -767,8 +767,10 @@ static void set_manager_defaults(Manager *m) { m->default_tasks_accounting = arg_default_tasks_accounting; m->default_tasks_max = arg_default_tasks_max; - manager_set_default_rlimits(m, arg_default_rlimit); - manager_transient_environment_add(m, arg_default_environment); + (void) manager_set_default_rlimits(m, arg_default_rlimit); + + (void) manager_default_environment(m); + (void) manager_transient_environment_add(m, arg_default_environment); } static void set_manager_settings(Manager *m) { diff --git a/src/core/manager.c b/src/core/manager.c index eba4bf356d..f4fdd91c2c 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -600,7 +600,7 @@ static char** sanitize_environment(char **l) { return l; } -static int manager_default_environment(Manager *m) { +int manager_default_environment(Manager *m) { assert(m); m->transient_environment = strv_free(m->transient_environment); diff --git a/src/core/manager.h b/src/core/manager.h index b65c4c8451..f3ad44d26e 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -442,6 +442,7 @@ void manager_clear_jobs(Manager *m); unsigned manager_dispatch_load_queue(Manager *m); +int manager_default_environment(Manager *m); int manager_transient_environment_add(Manager *m, char **plus); int manager_client_environment_modify(Manager *m, char **minus, char **plus); int manager_get_effective_environment(Manager *m, char ***ret); |