From: Timo Sirainen Date: Thu, 5 Jan 2023 01:38:54 +0000 (+0200) Subject: doveadm: Use master_service_settings_get[_or_fatal]() X-Git-Tag: 2.4.0~2334 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a3df77bef2dc771f522da8cfd9f9d1a23f353c4;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Use master_service_settings_get[_or_fatal]() --- diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c index 60f5be2aec..2553402c13 100644 --- a/src/doveadm/client-connection.c +++ b/src/doveadm/client-connection.c @@ -47,12 +47,13 @@ static int client_connection_read_settings(struct client_connection *conn) input.remote_ip = conn->remote_ip; if (master_service_settings_read(master_service, &input, - &output, &error) < 0) { + &output, &error) < 0 || + master_service_settings_get(conn->event, + &doveadm_setting_parser_info, 0, + &conn->set, &error) < 0) { e_error(conn->event, "%s", error); return -1; } - conn->set = master_service_settings_get_root_set_dup(master_service, - &doveadm_setting_parser_info, conn->pool); return 0; } @@ -94,6 +95,7 @@ void client_connection_destroy(struct client_connection **_conn) if (doveadm_verbose_proctitle) process_title_set("[idling]"); + master_service_settings_free(conn->set); event_unref(&conn->event); pool_unref(&conn->pool); } diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index e524f378e6..b08bbf069d 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -839,7 +839,7 @@ doveadm_cmdv2_wrapper_parse_common_options(struct doveadm_mail_cmd_context *mctx { struct doveadm_cmd_context *cctx = mctx->cctx; bool tcp_server = cctx->conn_type == DOVEADM_CONNECTION_TYPE_TCP; - const char *value_str; + const char *socket_path, *value_str; mctx->service_flags |= MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP; *wildcard_user_r = NULL; @@ -865,10 +865,15 @@ doveadm_cmdv2_wrapper_parse_common_options(struct doveadm_mail_cmd_context *mctx i_fatal("One of -u, -F, or -A must be provided"); } - if (doveadm_cmd_param_str(cctx, "socket-path", - &doveadm_settings->doveadm_socket_path) && - doveadm_settings->doveadm_worker_count == 0) - doveadm_settings->doveadm_worker_count = 1; + if (doveadm_cmd_param_str(cctx, "socket-path", &socket_path)) { + struct doveadm_settings *set = + p_memdup(doveadm_settings->pool, doveadm_settings, + sizeof(*doveadm_settings)); + set->doveadm_socket_path = p_strdup(set->pool, socket_path); + if (set->doveadm_worker_count == 0) + set->doveadm_worker_count = 1; + doveadm_settings = mctx->set = set; + } if (doveadm_cmd_param_istream(cctx, "file", &mctx->cmd_input)) i_stream_ref(mctx->cmd_input); diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c index 8da21d149a..483f7ca7b3 100644 --- a/src/doveadm/doveadm-settings.c +++ b/src/doveadm/doveadm-settings.c @@ -14,7 +14,6 @@ bool doveadm_verbose_proctitle; -static pool_t doveadm_settings_pool = NULL; static int global_config_fd = -1; static bool doveadm_settings_check(void *_set, pool_t pool, const char **error_r); @@ -134,11 +133,12 @@ const struct setting_parser_info doveadm_setting_parser_info = { .defaults = &doveadm_default_settings, .struct_size = sizeof(struct doveadm_settings), + .pool_offset1 = 1 + offsetof(struct doveadm_settings, pool), .check_func = doveadm_settings_check, .dependencies = doveadm_setting_dependencies }; -struct doveadm_settings *doveadm_settings; +const struct doveadm_settings *doveadm_settings; static void fix_base_path(struct doveadm_settings *set, pool_t pool, const char **str) @@ -217,16 +217,6 @@ void doveadm_get_ssl_settings(struct ssl_iostream_settings *set_r, pool_t pool) pool, set_r); } -void doveadm_settings_expand(struct doveadm_settings *set, pool_t pool) -{ - struct var_expand_table tab[] = { { '\0', NULL, NULL } }; - const char *error; - - if (settings_var_expand(&doveadm_setting_parser_info, set, - 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[] = { @@ -236,7 +226,6 @@ void doveadm_read_settings(void) }; struct master_service_settings_input input; struct master_service_settings_output output; - const struct doveadm_settings *set; const char *error; i_zero(&input); @@ -252,18 +241,12 @@ void doveadm_read_settings(void) global_config_fd = output.config_fd; fd_close_on_exec(output.config_fd, TRUE); - doveadm_settings_pool = pool_alloconly_create("doveadm settings", 1024); doveadm_verbose_proctitle = master_service_get_service_settings(master_service)->verbose_proctitle; - set = master_service_settings_get_root_set( - master_service, &doveadm_setting_parser_info); - doveadm_settings = settings_dup(&doveadm_setting_parser_info, set, - doveadm_settings_pool); - doveadm_ssl_set = master_service_settings_get_root_set_dup( - master_service, &master_service_ssl_setting_parser_info, - doveadm_settings_pool); - doveadm_settings_expand(doveadm_settings, doveadm_settings_pool); - doveadm_settings->parsed_features = set->parsed_features; /* copy this value by hand */ + doveadm_settings = master_service_settings_get_or_fatal( + NULL, &doveadm_setting_parser_info); + doveadm_ssl_set = master_service_settings_get_or_fatal( + NULL, &master_service_ssl_setting_parser_info); } int doveadm_settings_get_config_fd(void) @@ -272,11 +255,8 @@ int doveadm_settings_get_config_fd(void) return global_config_fd; } -void doveadm_settings_init(void) -{ -} - void doveadm_settings_deinit(void) { - pool_unref(&doveadm_settings_pool); + master_service_settings_free(doveadm_settings); + master_service_settings_free(doveadm_ssl_set); } diff --git a/src/doveadm/doveadm-settings.h b/src/doveadm/doveadm-settings.h index bb8b08f77b..ae7fa26ca2 100644 --- a/src/doveadm/doveadm-settings.h +++ b/src/doveadm/doveadm-settings.h @@ -13,6 +13,7 @@ enum dsync_features { /* */ struct doveadm_settings { + pool_t pool; const char *base_dir; const char *libexec_dir; const char *mail_plugins; @@ -38,18 +39,17 @@ struct doveadm_settings { ARRAY(const char *) plugin_envs; }; + extern const struct setting_parser_info doveadm_setting_parser_info; -extern struct doveadm_settings *doveadm_settings; +extern const struct doveadm_settings *doveadm_settings; extern const struct master_service_ssl_settings *doveadm_ssl_set; 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); int doveadm_settings_get_config_fd(void); -void doveadm_settings_init(void); void doveadm_settings_deinit(void); #endif diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index e8e89a84e4..10fe93332b 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -320,7 +320,6 @@ int main(int argc, char *argv[]) } master_service_init_log(master_service); - doveadm_settings_init(); doveadm_cmds_init(); for (i = 0; i < N_ELEMENTS(doveadm_cmdline_commands_ver2); i++) doveadm_cmd_register_ver2(doveadm_cmdline_commands_ver2[i]); diff --git a/src/doveadm/main.c b/src/doveadm/main.c index 5cde83f14a..d9a9b4a43a 100644 --- a/src/doveadm/main.c +++ b/src/doveadm/main.c @@ -64,7 +64,6 @@ static void main_init(void) { doveadm_server = TRUE; - doveadm_settings_init(); doveadm_cmds_init(); doveadm_register_auth_server_commands(); doveadm_dump_init(); diff --git a/src/doveadm/test-doveadm-util.c b/src/doveadm/test-doveadm-util.c index 872646165d..e5b54a8ea8 100644 --- a/src/doveadm/test-doveadm-util.c +++ b/src/doveadm/test-doveadm-util.c @@ -6,7 +6,7 @@ #include "doveadm-settings.h" #include "doveadm-util.h" -struct doveadm_settings *doveadm_settings; /* just to avoid linker error */ +const struct doveadm_settings *doveadm_settings; /* just to avoid linker error */ bool version_string_verify(const char *line ATTR_UNUSED, const char *service_name ATTR_UNUSED,