]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, global: Split MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS into separate flags
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Apr 2025 11:03:49 +0000 (14:03 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 12 May 2025 15:51:47 +0000 (15:51 +0000)
Use MASTER_SERVICE_FLAG_CONFIG_BUILTIN for unit tests and
MASTER_SERVICE_FLAG_CONFIG_DEFAULTS for getting defaults via doveconf.

15 files changed:
src/auth/test-auth-client.c
src/auth/test-auth-master.c
src/auth/test-main.c
src/auth/test-mech.c
src/config/config-parser.c
src/imap/test-imap-client-hibernate.c
src/lib-lua/test-lua-http-client.c
src/lib-master/master-service-settings.c
src/lib-master/master-service-settings.h
src/lib-master/master-service.c
src/lib-master/master-service.h
src/lib-storage/test-mail-storage.c
src/lib-storage/test-mail.c
src/plugins/mail-crypt/test-mail-key.c
src/util/test-fs.c

index 00b0f69058ed5badebe40d77d957c7c8632b680c..6b2b5cad9c307c5f006ffc02222dc97c3515c1d0 100644 (file)
@@ -78,7 +78,7 @@ int main(int argc, char *argv[])
                NULL
        };
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index 4b745787b725c023a57ee31b6a31331ddc81453f..f0440cf137f570b1d16db25622709efc011bb638 100644 (file)
@@ -63,7 +63,7 @@ int main(int argc, char *argv[])
                NULL
        };
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index d82f44f7efc352d1e7d98dd5cb041418b83ec495..dedffbea3948417ead932d30e7ebfb784d4c050e 100644 (file)
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
 {
        const char *match = "";
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index b923c95af649a37c671e210124e91c9a12a13e9c..235102ac76ec326f9e6d012921d8b620f969bf46 100644 (file)
@@ -354,7 +354,7 @@ int main(int argc, char *argv[])
                NULL
        };
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index 91a8e93d51faa8ad69422eceeb76c7683ac677ed..bddfd732151db11200e2146138034c03672f0294 100644 (file)
@@ -3010,6 +3010,13 @@ int config_parse_file(const char *path, enum config_parse_flags flags,
        if (fd != -1) {
                if (config_parser_add_seen_file_fd(&ctx, fd, path, error_r) < 0)
                        return -1;
+       } else {
+               /* stat contents don't matter for defaults, as long as they
+                  don't change. */
+               struct stat st;
+               i_zero(&st);
+               config_parser_add_seen_file(&ctx, &st,
+                       MASTER_SERVICE_BINARY_CONFIG_DEFAULTS);
        }
 
        for (count = 0; all_infos[count] != NULL; count++) ;
index d87e71bec4fc64afd562a1bfe79a275cc6a228ac..1c04d26aef078ceb9497b74fd212bec04d38d63d 100644 (file)
@@ -308,7 +308,7 @@ static const struct setting_parser_info test_service_setting_parser_info = {
 int main(int argc, char *argv[])
 {
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index 37cf91bc1d7444e4723da1f02ad825be6793b94d..345a03229ad5e7911a10682918564c4b0b3926ee 100644 (file)
@@ -783,7 +783,7 @@ static void main_deinit(void)
 int main(int argc, char *argv[])
 {
        const enum master_service_flags service_flags =
-               MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+               MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                MASTER_SERVICE_FLAG_STANDALONE |
                MASTER_SERVICE_FLAG_STD_CLIENT |
                MASTER_SERVICE_FLAG_DONT_SEND_STATS;
index 162f34dbefbcbed8785274a2fdc17b9ffddcbd0b..7936b9dc5ef46dc51f6d5e2aa0ca158fff41144f 100644 (file)
@@ -257,8 +257,12 @@ master_service_exec_config(struct master_service *service,
 
        t_array_init(&conf_argv, 11 + (service->argc + 1) + 1);
        strarr_push(&conf_argv, DOVECOT_CONFIG_BIN_PATH);
-       strarr_push(&conf_argv, "-c");
-       strarr_push(&conf_argv, service->config_path);
+       if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+               strarr_push(&conf_argv, "-d");
+       else {
+               strarr_push(&conf_argv, "-c");
+               strarr_push(&conf_argv, service->config_path);
+       }
 
        if (input->check_full_config)
                strarr_push(&conf_argv, "-C");
@@ -344,14 +348,23 @@ master_service_open_config(struct master_service *service,
        const char *path;
        int fd = -1;
 
+       if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+               path = MASTER_SERVICE_BINARY_CONFIG_DEFAULTS;
+       else if (input->config_path != NULL)
+               path = input->config_path;
+       else
+               path = master_service_get_config_path(service);
+       *path_r = path;
        *cached_config_r = FALSE;
-       *path_r = path = input->config_path != NULL ? input->config_path :
-               master_service_get_config_path(service);
+
        if ((fd = master_service_binary_config_cache_get(cache_dir, path)) != -1) {
                *cached_config_r = TRUE;
                return fd;
        }
 
+       if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+               master_service_exec_config(service, input);
+
        if (!service->config_path_from_master &&
            !service->config_path_changed_with_param &&
            !input->always_exec &&
@@ -485,7 +498,7 @@ master_service_settings_read_int(struct master_service *service,
                if (str_to_int(value, &fd) < 0 || fd < 0)
                        i_fatal("Invalid "DOVECOT_CONFIG_FD_ENV": %s", value);
                path = t_strdup_printf("<"DOVECOT_CONFIG_FD_ENV" %d>", fd);
-       } else if ((service->flags & MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS) == 0) {
+       } else if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_BUILTIN) == 0) {
                /* Open config via socket if possible. If it doesn't work,
                   execute doveconf -F. */
                T_BEGIN {
index e993138e8a6db241aa88af23d381dde13a825b2b..89944d7bd02becbc2e660611917c6e41386ac4c3 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef MASTER_SERVICE_SETTINGS_H
 #define MASTER_SERVICE_SETTINGS_H
 
+#define MASTER_SERVICE_BINARY_CONFIG_DEFAULTS "<default config>"
+
 /* <settings checks> */
 #ifdef DOVECOT_PRO_EDITION
 #  define VERBOSE_PROCTITLE_DEFAULT TRUE
index a18cb39dbe00607217b93feaec9a3f5800bf6cc8..d1553da7bf05997cabb6375dc7c7c42dcd277241 100644 (file)
@@ -885,7 +885,7 @@ bool master_service_parse_option(struct master_service *service,
                array_push_back(&service->config_overrides, &arg);
                break;
        case 'O':
-               service->flags |= MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS;
+               service->flags |= MASTER_SERVICE_FLAG_CONFIG_DEFAULTS;
                break;
        case 'L':
                service->log_directly = TRUE;
index 1dca3a6403bf0bdabf4e42801dc9294fc4b55289..9ee6af923b81e7fa0d3a953fc7d82170e488340c 100644 (file)
@@ -18,8 +18,12 @@ enum master_service_flags {
        /* Log to configured log file instead of stderr. By default when
           _FLAG_STANDALONE is set, logging is done to stderr. */
        MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR  = 0x04,
-       /* Don't read settings, but use whatever is in environment */
-       MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS  = 0x10,
+       /* Use only default settings (by executing doveconf -dF) */
+       MASTER_SERVICE_FLAG_CONFIG_DEFAULTS     = 0x10,
+       /* Use only built-in settings (do not execute doveconf). If any
+          settings are overridden, their infos must be registered with
+          settings_info_register(). Used by unit tests. */
+       MASTER_SERVICE_FLAG_CONFIG_BUILTIN      = 0x20,
        /* Use MASTER_LOGIN_NOTIFY_FD to track login overflow state */
        MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE   = 0x40,
        /* If master sends SIGINT, don't die even if we don't have clients */
index 25fd192840ebf2b5305793b0197b5ba269efce15..d5adfeb59754fe555d5fca47fbf4af7b35756010 100644 (file)
@@ -743,7 +743,7 @@ int main(int argc, char **argv)
        master_service = master_service_init("test-mail-storage",
                                             MASTER_SERVICE_FLAG_STANDALONE |
                                             MASTER_SERVICE_FLAG_DONT_SEND_STATS |
-                                            MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+                                            MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                                             MASTER_SERVICE_FLAG_NO_SSL_INIT |
                                             MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
                                             &argc, &argv, "");
index 3c8f75c49aaad8525d39eb0bcd5d2b2a3ccef464..367fbf157d918a8c21497733e1aa4892e7df4bf6 100644 (file)
@@ -743,7 +743,7 @@ int main(int argc, char **argv)
        master_service = master_service_init("test-mail",
                                             MASTER_SERVICE_FLAG_STANDALONE |
                                             MASTER_SERVICE_FLAG_DONT_SEND_STATS |
-                                            MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+                                            MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                                             MASTER_SERVICE_FLAG_NO_SSL_INIT |
                                             MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
                                             &argc, &argv, "");
index 756264079e895ce0ecaf2c1d90ec8ecb269723fd..a99b0cc852254e8398e4c32132e34f423035f80c 100644 (file)
@@ -423,7 +423,7 @@ int main(int argc, char **argv)
        master_service = master_service_init("test-mail-key",
                                             MASTER_SERVICE_FLAG_STANDALONE |
                                             MASTER_SERVICE_FLAG_DONT_SEND_STATS |
-                                            MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+                                            MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
                                             MASTER_SERVICE_FLAG_NO_SSL_INIT |
                                             MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
                                             &argc, &argv, "");
index d0bf7470c546828ce4f27f664589d315013d21d6..61c27b1488de55acbeca75899b422a681311ae91 100644 (file)
@@ -382,7 +382,7 @@ int main(int argc, char *argv[])
        params.base_dir = PKG_RUNDIR;
        master_service = master_service_init("test-fs",
                                             MASTER_SERVICE_FLAG_STANDALONE |
-                                            MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS,
+                                            MASTER_SERVICE_FLAG_CONFIG_DEFAULTS,
                                             &argc, &argv, "Daf:p:st:u:");
        while ((c = master_getopt(master_service)) > 0) {
                switch (c) {