Mercurial > dovecot > core-2.2
changeset 22490:48772f0423cd
lib-master, config: Move the responsibility of cleaning environment to doveconf
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 08 Jun 2017 00:40:12 +0300 |
parents | bca86353ccd5 |
children | 5854337cc4ad |
files | src/config/doveconf.c src/lib-master/master-service-settings.c |
diffstat | 2 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/config/doveconf.c Thu Jun 08 00:35:08 2017 +0300 +++ b/src/config/doveconf.c Thu Jun 08 00:40:12 2017 +0300 @@ -12,6 +12,7 @@ #include "str.h" #include "strescape.h" #include "settings-parser.h" +#include "master-interface.h" #include "master-service.h" #include "all-settings.h" #include "sysinfo-get.h" @@ -865,11 +866,21 @@ } else { struct config_export_context *ctx; - env_put("DOVECONF_ENV=1"); ctx = config_export_init(wanted_modules, CONFIG_DUMP_SCOPE_SET, CONFIG_DUMP_FLAG_CHECK_SETTINGS, config_request_putenv, NULL); config_export_by_filter(ctx, &filter); + + if (getenv(DOVECOT_PRESERVE_ENVS_ENV) != NULL) { + /* Standalone binary is getting its configuration via + doveconf. Clean the environment before calling it. + Do this only if the environment exists, because + lib-master doesn't set it if it doesn't want the + environment to be cleaned (e.g. -k parameter). */ + master_service_env_clean(); + } + + env_put("DOVECONF_ENV=1"); if (config_export_finish(&ctx) < 0) i_fatal("Invalid configuration"); execvp(exec_args[0], exec_args);
--- a/src/lib-master/master-service-settings.c Thu Jun 08 00:35:08 2017 +0300 +++ b/src/lib-master/master-service-settings.c Thu Jun 08 00:40:12 2017 +0300 @@ -134,7 +134,14 @@ master_service_import_environment("USER"); if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) != 0) master_service_import_environment("LOG_STDERR_TIMESTAMP"); - master_service_env_clean(); + + /* doveconf empties the environment before exec()ing us back + if DOVECOT_PRESERVE_ENVS is set, so make sure it is. */ + if (getenv(DOVECOT_PRESERVE_ENVS_ENV) == NULL) + env_put(DOVECOT_PRESERVE_ENVS_ENV"="); + } else { + /* make sure doveconf doesn't remove any environment */ + env_remove(DOVECOT_PRESERVE_ENVS_ENV); } if (input->use_sysexits) env_put("USE_SYSEXITS=1");