From 79a224c46012f2817e3fa431ff30d10f4d3b6626 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 19 Nov 2018 12:23:13 +0100 Subject: [PATCH] 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 --- src/core/main.c | 6 ++++-- src/core/manager.c | 2 +- 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 f1dad983b72..70227da4b77 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 eba4bf356da..f4fdd91c2c4 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 b65c4c8451f..f3ad44d26e2 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);