]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Move settings reading code into doveadm-settings.c
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 15 Feb 2021 15:11:07 +0000 (17:11 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 21 May 2021 07:46:29 +0000 (07:46 +0000)
This code is now shared between doveadm and doveadm-server.

src/doveadm/doveadm-settings.c
src/doveadm/doveadm-settings.h
src/doveadm/doveadm.c
src/doveadm/main.c

index 35cce5cdb0ebbb3fc1004f6e5d777a6877ea0ae7..da8d1dd23c77c69c79970a111919b6baf63e1bbd 100644 (file)
@@ -7,10 +7,15 @@
 #include "service-settings.h"
 #include "mail-storage-settings.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "master-service-ssl-settings.h"
 #include "iostream-ssl.h"
 #include "doveadm-settings.h"
 
+bool doveadm_verbose_proctitle;
+
+static pool_t doveadm_settings_pool = NULL;
+
 static bool doveadm_settings_check(void *_set, pool_t pool, const char **error_r);
 
 /* <settings checks> */
@@ -221,3 +226,46 @@ void doveadm_settings_expand(struct doveadm_settings *set, pool_t pool)
                                pool, tab, &error) <= 0)
                i_fatal("Failed to expand settings: %s", error);
 }
+
+void doveadm_read_settings(void)
+{
+       static const struct setting_parser_info *set_roots[] = {
+               &master_service_ssl_setting_parser_info,
+               &doveadm_setting_parser_info,
+               NULL
+       };
+       struct master_service_settings_input input;
+       struct master_service_settings_output output;
+       const struct doveadm_settings *set;
+       const char *error;
+
+       i_zero(&input);
+       input.roots = set_roots;
+       input.module = "doveadm";
+       input.service = "doveadm";
+       input.preserve_user = TRUE;
+       input.preserve_home = TRUE;
+       if (master_service_settings_read(master_service, &input,
+                                        &output, &error) < 0)
+               i_fatal("Error reading configuration: %s", error);
+
+       doveadm_settings_pool = pool_alloconly_create("doveadm settings", 1024);
+       service_set = master_service_settings_get(master_service);
+       service_set = settings_dup(&master_service_setting_parser_info,
+                                  service_set, doveadm_settings_pool);
+       doveadm_verbose_proctitle = service_set->verbose_proctitle;
+
+       set = master_service_settings_get_others(master_service)[1];
+       doveadm_settings = settings_dup(&doveadm_setting_parser_info, set,
+                                       doveadm_settings_pool);
+       doveadm_ssl_set = settings_dup(&master_service_ssl_setting_parser_info,
+                                      master_service_ssl_settings_get(master_service),
+                                      doveadm_settings_pool);
+       doveadm_settings_expand(doveadm_settings, doveadm_settings_pool);
+       doveadm_settings->parsed_features = set->parsed_features; /* copy this value by hand */
+}
+
+void doveadm_settings_deinit(void)
+{
+       pool_unref(&doveadm_settings_pool);
+}
index defdb404e405cbe8f6d8cf4d19d9ed29bc4f7cf3..6e72ff676869c00b1da988776ea663b80f99402a 100644 (file)
@@ -3,6 +3,8 @@
 
 #include "net.h"
 
+struct ssl_iostream_settings;
+
 /* <settings checks> */
 enum dsync_features {
        DSYNC_FEATURE_EMPTY_HDR_WORKAROUND = 0x1,
@@ -40,9 +42,12 @@ extern const struct setting_parser_info doveadm_setting_parser_info;
 extern struct doveadm_settings *doveadm_settings;
 extern const struct master_service_settings *service_set;
 extern const struct master_service_ssl_settings *doveadm_ssl_set;
-struct ssl_iostream_settings;
+extern bool doveadm_verbose_proctitle;
 
 void doveadm_get_ssl_settings(struct ssl_iostream_settings *set_r, pool_t pool);
 void doveadm_settings_expand(struct doveadm_settings *set, pool_t pool);
 
+void doveadm_read_settings(void);
+void doveadm_settings_deinit(void);
+
 #endif
index d34fa17d7b28a7c2846236639316fbb86f6c00ea..8ddb83ce050c492dc66c82bff091da6e89ab12f7 100644 (file)
@@ -10,7 +10,6 @@
 #include "dict.h"
 #include "master-service-private.h"
 #include "master-service-settings.h"
-#include "master-service-ssl-settings.h"
 #include "settings-parser.h"
 #include "doveadm-print-private.h"
 #include "doveadm-dump.h"
@@ -31,11 +30,8 @@ const struct doveadm_print_vfuncs *doveadm_print_vfuncs_all[] = {
        NULL
 };
 
-bool doveadm_verbose_proctitle;
 int doveadm_exit_code = 0;
 
-static pool_t doveadm_settings_pool = NULL;
-
 static void failure_exit_callback(int *status)
 {
        enum fatal_exit_status fatal_status = *status;
@@ -247,44 +243,6 @@ static bool doveadm_has_subcommands(const char *cmd_name)
        return doveadm_mail_has_subcommands(cmd_name);
 }
 
-static void doveadm_read_settings(void)
-{
-       static const struct setting_parser_info *set_roots[] = {
-               &master_service_ssl_setting_parser_info,
-               &doveadm_setting_parser_info,
-               NULL
-       };
-       struct master_service_settings_input input;
-       struct master_service_settings_output output;
-       const struct doveadm_settings *set;
-       const char *error;
-
-       i_zero(&input);
-       input.roots = set_roots;
-       input.module = "doveadm";
-       input.service = "doveadm";
-       input.preserve_user = TRUE;
-       input.preserve_home = TRUE;
-       if (master_service_settings_read(master_service, &input,
-                                        &output, &error) < 0)
-               i_fatal("Error reading configuration: %s", error);
-
-       doveadm_settings_pool = pool_alloconly_create("doveadm settings", 1024);
-       service_set = master_service_settings_get(master_service);
-       service_set = settings_dup(&master_service_setting_parser_info,
-                                  service_set, doveadm_settings_pool);
-       doveadm_verbose_proctitle = service_set->verbose_proctitle;
-
-       set = master_service_settings_get_others(master_service)[1];
-       doveadm_settings = settings_dup(&doveadm_setting_parser_info, set,
-                                       doveadm_settings_pool);
-       doveadm_ssl_set = settings_dup(&master_service_ssl_setting_parser_info,
-                                      master_service_ssl_settings_get(master_service),
-                                      doveadm_settings_pool);
-       doveadm_settings_expand(doveadm_settings, doveadm_settings_pool);
-       doveadm_settings->parsed_features = set->parsed_features; /* copy this value by hand */
-}
-
 static struct doveadm_cmd *doveadm_cmdline_commands[] = {
        &doveadm_cmd_help,
        &doveadm_cmd_config,
@@ -417,7 +375,7 @@ int main(int argc, char *argv[])
                o_stream_unref(&doveadm_print_ostream);
        }
        doveadm_cmds_deinit();
-       pool_unref(&doveadm_settings_pool);
+       doveadm_settings_deinit();
        master_service_deinit(&master_service);
        return doveadm_exit_code;
 }
index e081e249ab028d22bcf93d567ab08d4387422b55..6fb2b5b8f06579fcf9dbd7d2767815f3d50ed3e2 100644 (file)
@@ -4,8 +4,6 @@
 #include "restrict-access.h"
 #include "process-title.h"
 #include "master-service.h"
-#include "master-service-settings.h"
-#include "master-service-ssl-settings.h"
 #include "settings-parser.h"
 #include "dict.h"
 #include "doveadm.h"
@@ -25,11 +23,8 @@ const struct doveadm_print_vfuncs *doveadm_print_vfuncs_all[] = {
 };
 
 struct client_connection *doveadm_client;
-bool doveadm_verbose_proctitle;
 int doveadm_exit_code = 0;
 
-static pool_t doveadm_settings_pool;
-
 static void doveadm_die(void)
 {
        /* do nothing. doveadm connections should be over soon. */
@@ -72,26 +67,18 @@ static void main_preinit(void)
 static void main_init(void)
 {
        doveadm_server = TRUE;
-       doveadm_settings_pool = pool_alloconly_create("doveadm settings", 1024);
-       doveadm_settings = master_service_settings_get_others(master_service)[1];
-       doveadm_settings = settings_dup(&doveadm_setting_parser_info,
-                                       doveadm_settings, doveadm_settings_pool);
-       doveadm_ssl_set = settings_dup(&master_service_ssl_setting_parser_info,
-                                      master_service_ssl_settings_get(master_service),
-                                      doveadm_settings_pool);
-       doveadm_settings_expand(doveadm_settings, doveadm_settings_pool);
-       doveadm_verbose_proctitle =
-               master_service_settings_get(master_service)->verbose_proctitle;
-       if (doveadm_verbose_proctitle)
-               process_title_set("[idling]");
 
        doveadm_cmds_init();
        doveadm_register_auth_server_commands();
        doveadm_dump_init();
-       doveadm_mail_init();
-       doveadm_server_init();
        dict_drivers_register_builtin();
        doveadm_load_modules();
+
+       doveadm_read_settings();
+       doveadm_mail_init();
+       doveadm_server_init();
+       if (doveadm_verbose_proctitle)
+               process_title_set("[idling]");
 }
 
 static void main_deinit(void)
@@ -103,23 +90,15 @@ static void main_deinit(void)
        dict_drivers_unregister_builtin();
        doveadm_print_deinit();
        doveadm_cmds_deinit();
-       pool_unref(&doveadm_settings_pool);
+       doveadm_settings_deinit();
 }
 
 int main(int argc, char *argv[])
 {
-       const struct setting_parser_info *set_roots[] = {
-               &master_service_ssl_setting_parser_info,
-               &doveadm_setting_parser_info,
-               NULL
-       };
        enum master_service_flags service_flags =
                MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN |
                MASTER_SERVICE_FLAG_HAVE_STARTTLS |
                MASTER_SERVICE_FLAG_USE_SSL_SETTINGS;
-       struct master_service_settings_input input;
-       struct master_service_settings_output output;
-       const char *error;
        int c;
 
        master_service = master_service_init("doveadm", service_flags,
@@ -135,15 +114,6 @@ int main(int argc, char *argv[])
                }
        }
 
-       i_zero(&input);
-       input.roots = set_roots;
-       input.module = "doveadm";
-       input.service = "doveadm";
-
-       if (master_service_settings_read(master_service, &input, &output,
-                                        &error) < 0)
-               i_fatal("Error reading configuration: %s", error);
-
        master_service_init_log(master_service);
        main_preinit();
        master_service_set_die_callback(master_service, doveadm_die);