]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Added _NO_CONFIG_SETTIGS and _NO_ENV_SETTINGS flags.
authorTimo Sirainen <tss@iki.fi>
Sun, 18 Oct 2009 19:33:13 +0000 (15:33 -0400)
committerTimo Sirainen <tss@iki.fi>
Sun, 18 Oct 2009 19:33:13 +0000 (15:33 -0400)
--HG--
branch : HEAD

src/lib-master/master-service-private.h
src/lib-master/master-service-settings.c
src/lib-master/master-service.c
src/lib-master/master-service.h

index d8a3dbe66209e21c45266da560e82af4a9ab645e..24e9523a49a49c49e1f18381b029ecda7fb1b0e6 100644 (file)
@@ -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;
 };
index ab94bf277260c5bfbd191b84ccbf49c85bc9a964..4d9a028f11db46ea1561a3fe6e33d10ff828d681 100644 (file)
@@ -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,
index 46286a6cc6c68c9bc4c66d01036e98ddd3a917c1..4c177cc8501871bf1382e8bcf0dfba8f304692ab 100644 (file)
@@ -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)
index 29935f9592b56a621564bca2f736643a7d4203fc..b70a537697c748ee2e882a454d575dbbfe0df101 100644 (file)
@@ -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 {