From: Timo Sirainen Date: Mon, 15 Feb 2021 15:11:07 +0000 (+0200) Subject: doveadm: Move settings reading code into doveadm-settings.c X-Git-Tag: 2.3.16~128 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b1b19b0e252e2ce616649025efe179dd1e575d92;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Move settings reading code into doveadm-settings.c This code is now shared between doveadm and doveadm-server. --- diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c index 35cce5cdb0..da8d1dd23c 100644 --- a/src/doveadm/doveadm-settings.c +++ b/src/doveadm/doveadm-settings.c @@ -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); /* */ @@ -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); +} diff --git a/src/doveadm/doveadm-settings.h b/src/doveadm/doveadm-settings.h index defdb404e4..6e72ff6768 100644 --- a/src/doveadm/doveadm-settings.h +++ b/src/doveadm/doveadm-settings.h @@ -3,6 +3,8 @@ #include "net.h" +struct ssl_iostream_settings; + /* */ 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 diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index d34fa17d7b..8ddb83ce05 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -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; } diff --git a/src/doveadm/main.c b/src/doveadm/main.c index e081e249ab..6fb2b5b8f0 100644 --- a/src/doveadm/main.c +++ b/src/doveadm/main.c @@ -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);