]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Delay reading settings until doveadm plugins are loaded
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 11 Feb 2021 23:22:25 +0000 (01:22 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 21 May 2021 07:46:29 +0000 (07:46 +0000)
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h
src/doveadm/doveadm.c
src/doveadm/main.c

index 6a9fb08b6b4b5cfd25f386adbe0b13f21a840b47..1d0b67f0b919098aae14d67819d77b006ebc5da1 100644 (file)
@@ -958,7 +958,6 @@ static struct doveadm_cmd_ver2 *mail_commands_ver2[] = {
 
 void doveadm_mail_init(void)
 {
-       struct module_dir_load_settings mod_set;
        unsigned int i;
 
        i_array_init(&doveadm_mail_cmds, 32);
@@ -967,6 +966,11 @@ void doveadm_mail_init(void)
 
        for (i = 0; i < N_ELEMENTS(mail_commands_ver2); i++)
                doveadm_cmd_register_ver2(mail_commands_ver2[i]);
+}
+
+void doveadm_mail_init_finish(void)
+{
+       struct module_dir_load_settings mod_set;
 
        i_zero(&mod_set);
        mod_set.abi_version = DOVECOT_ABI_VERSION;
index 0292ead5c86955c69b71e68ad9d5c6a17eb48ad0..cc64c936cc0d024760c2a8b9af31a4f426bebe80 100644 (file)
@@ -126,6 +126,7 @@ void doveadm_mail_try_help_name(const char *cmd_name);
 bool doveadm_mail_has_subcommands(const char *cmd_name);
 
 void doveadm_mail_init(void);
+void doveadm_mail_init_finish(void);
 void doveadm_mail_deinit(void);
 
 const struct doveadm_mail_cmd *
index 792bf904883336a9fd64187ca9c79c1a19692f4f..1ac107cb2db142a28fcf0e26ae54d06d017ce497 100644 (file)
@@ -297,16 +297,14 @@ int main(int argc, char *argv[])
        }
        cmd_name = argv[optind];
 
-       doveadm_settings_init();
        if (cmd_name != NULL && strcmp(cmd_name, "help") == 0 &&
            argv[optind+1] != NULL) {
                /* "help cmd" doesn't need any configuration */
                quick_init = TRUE;
-       } else {
-               doveadm_read_settings();
        }
        master_service_init_log(master_service);
 
+       doveadm_settings_init();
        doveadm_cmds_init();
        for (i = 0; i < N_ELEMENTS(doveadm_cmdline_commands); i++)
                doveadm_register_cmd(doveadm_cmdline_commands[i]);
@@ -320,12 +318,11 @@ int main(int argc, char *argv[])
                /* special case commands: even if there is something wrong
                   with the config (e.g. mail_plugins), don't fail these
                   commands */
+               if (strcmp(cmd_name, "help") != 0)
+                       doveadm_read_settings();
                quick_init = TRUE;
        } else {
                quick_init = FALSE;
-               if (doveadm_debug && getenv("LOG_STDERR_TIMESTAMP") == NULL)
-                       i_set_failure_timestamp_format(master_service->set->log_timestamp);
-               master_service_init_stats_client(master_service, TRUE);
                doveadm_print_ostream = o_stream_create_fd(STDOUT_FILENO, 0);
                o_stream_set_no_error_handling(doveadm_print_ostream, TRUE);
                o_stream_cork(doveadm_print_ostream);
@@ -334,6 +331,18 @@ int main(int argc, char *argv[])
                dict_drivers_register_builtin();
                doveadm_load_modules();
 
+               /* read settings only after loading doveadm plugins, which
+                  may modify what settings are read */
+               doveadm_read_settings();
+               if (doveadm_debug && getenv("LOG_STDERR_TIMESTAMP") == NULL)
+                       i_set_failure_timestamp_format(master_service->set->log_timestamp);
+               master_service_init_stats_client(master_service, TRUE);
+               /* Load mail_plugins */
+               doveadm_mail_init_finish();
+               /* kludgy: Load the rest of the doveadm plugins after
+                  mail_plugins have been loaded. */
+               doveadm_load_modules();
+
                if (cmd_name == NULL) {
                        /* show usage after registering all plugins */
                        usage_to(stdout, "");
index e8e9c91c9a1755719747ae10dd6464fcd790f601..b35dccc545bca672986e96f1aaee0913226cc758 100644 (file)
@@ -72,11 +72,18 @@ static void main_init(void)
        doveadm_cmds_init();
        doveadm_register_auth_server_commands();
        doveadm_dump_init();
+       doveadm_mail_init();
        dict_drivers_register_builtin();
        doveadm_load_modules();
-
+       /* read settings only after loading doveadm plugins, which
+          may modify what settings are read */
        doveadm_read_settings();
-       doveadm_mail_init();
+       /* Load mail_plugins */
+       doveadm_mail_init_finish();
+       /* kludgy: Load the rest of the doveadm plugins after
+          mail_plugins have been loaded. */
+       doveadm_load_modules();
+
        doveadm_server_init();
        if (doveadm_verbose_proctitle)
                process_title_set("[idling]");