X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmanager.c;h=95fc7e64acb467b334645c976ff1a0287c804104;hb=5a72317435a39f23520b42731e53bd13d20f489e;hp=a80d6a161ae58baf33a53066be254a934af3b7af;hpb=5bf348d77ec35260e2c021ad11d08dca7b92498d;p=elogind.git diff --git a/src/core/manager.c b/src/core/manager.c index a80d6a161..95fc7e64a 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -332,6 +332,23 @@ static int manager_setup_signals(Manager *m) { return 0; } +static void manager_clean_environment(Manager *m) { + assert(m); + + /* Let's remove some environment variables that we + * need ourselves to communicate with our clients */ + strv_env_unset_many( + m->environment, + "NOTIFY_SOCKET", + "MAINPID", + "MANAGERPID", + "LISTEN_PID", + "LISTEN_FDS", + "WATCHDOG_PID", + "WATCHDOG_USEC", + NULL); +} + static int manager_default_environment(Manager *m) { assert(m); @@ -348,14 +365,16 @@ static int manager_default_environment(Manager *m) { /* Import locale variables LC_*= from configuration */ locale_setup(&m->environment); - } else + } else { /* The user manager passes its own environment * along to its children. */ m->environment = strv_copy(environ); + } if (!m->environment) return -ENOMEM; + manager_clean_environment(m); strv_sort(m->environment); return 0; @@ -2675,7 +2694,10 @@ int manager_environment_add(Manager *m, char **minus, char **plus) { if (b != l) strv_free(b); - m->environment = strv_sort(l); + m->environment = l; + manager_clean_environment(m); + strv_sort(m->environment); + return 0; }