From: Timo Sirainen Date: Sun, 18 Oct 2009 19:33:13 +0000 (-0400) Subject: lib-master: Added _NO_CONFIG_SETTIGS and _NO_ENV_SETTINGS flags. X-Git-Tag: 2.0.alpha2~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=047c00cd3f7f403672f81569413669238df8c15a;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Added _NO_CONFIG_SETTIGS and _NO_ENV_SETTINGS flags. --HG-- branch : HEAD --- diff --git a/src/lib-master/master-service-private.h b/src/lib-master/master-service-private.h index d8a3dbe662..24e9523a49 100644 --- a/src/lib-master/master-service-private.h +++ b/src/lib-master/master-service-private.h @@ -46,7 +46,6 @@ struct master_service { unsigned int keep_environment:1; unsigned int log_directly:1; unsigned int initial_status_sent:1; - unsigned int default_settings:1; unsigned int die_with_master:1; unsigned int call_avail_overflow:1; }; diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index ab94bf2772..4d9a028f11 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -192,7 +192,8 @@ int master_service_settings_read(struct master_service *service, int ret, fd = -1; time_t now, timeout; - if (getenv("DOVECONF_ENV") == NULL && !service->default_settings) { + if (getenv("DOVECONF_ENV") == NULL && + (service->flags & MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS) == 0) { path = input->config_path != NULL ? input->config_path : master_service_get_config_path(service); fd = master_service_read_config(service, path, input, error_r); @@ -258,18 +259,21 @@ int master_service_settings_read(struct master_service *service, else if (fd != -1) (void)close(fd); - /* let environment override settings. especially useful for the - settings from userdb. */ - if (settings_parse_environ(parser) < 0) { - *error_r = settings_parser_get_error(parser); - return -1; + if ((service->flags & MASTER_SERVICE_FLAG_NO_ENV_SETTINGS) == 0) { + /* let environment override settings. especially useful for the + settings from userdb. */ + if (settings_parse_environ(parser) < 0) { + *error_r = settings_parser_get_error(parser); + return -1; + } + env = getenv("VARS_EXPANDED"); + if (env != NULL) T_BEGIN { + keys = t_strsplit(env, " "); + settings_parse_set_keys_expandeded(parser, + service->set_pool, + keys); + } T_END; } - env = getenv("VARS_EXPANDED"); - if (env != NULL) T_BEGIN { - keys = t_strsplit(env, " "); - settings_parse_set_keys_expandeded(parser, service->set_pool, - keys); - } T_END; if (array_is_created(&service->config_overrides)) { if (master_service_apply_config_overrides(service, parser, diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 46286a6cc6..4c177cc850 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -205,7 +205,7 @@ bool master_service_parse_option(struct master_service *service, array_append(&service->config_overrides, &arg, 1); break; case 'O': - service->default_settings = TRUE; + service->flags |= MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS; break; case 's': if ((i = atoi(arg)) < 0) diff --git a/src/lib-master/master-service.h b/src/lib-master/master-service.h index 29935f9592..b70a537697 100644 --- a/src/lib-master/master-service.h +++ b/src/lib-master/master-service.h @@ -13,7 +13,11 @@ enum master_service_flags { MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR = 0x04, /* Service is going to do multiple configuration lookups, keep the connection to config service open. */ - MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN = 0x08 + MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN = 0x08, + /* Don't read settings by executing config binary */ + MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS = 0x10, + /* Don't read settings from environment */ + MASTER_SERVICE_FLAG_NO_ENV_SETTINGS = 0x20 }; struct master_service_connection {