]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Use master_service_settings_get[_or_fatal]()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 5 Jan 2023 01:38:54 +0000 (03:38 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 20 Nov 2023 12:11:41 +0000 (14:11 +0200)
src/doveadm/client-connection.c
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-settings.c
src/doveadm/doveadm-settings.h
src/doveadm/doveadm.c
src/doveadm/main.c
src/doveadm/test-doveadm-util.c

index 60f5be2aec121ae1d2a1ad03b96ba6fc54d4c23f..2553402c13e2c99f2f997bbff8cbaa44b0960f46 100644 (file)
@@ -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);
 }
index e524f378e6856711aa0caf4014bf1ec797eb1106..b08bbf069da700aa647308c450068336ff6d85a7 100644 (file)
@@ -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);
index 8da21d149ae627c199eaf41568bd16f5bde7217b..483f7ca7b3ecd812d6a258cc4d259f7948375c50 100644 (file)
@@ -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);
 }
index bb8b08f77b3127b03114b63d565a4992f506ec60..ae7fa26ca21e9b547a2f8cf115edca2234958227 100644 (file)
@@ -13,6 +13,7 @@ enum dsync_features {
 /* </settings checks> */
 
 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
index e8e89a84e4007dd3edc30e567514865aa87889bf..10fe93332bccbb5c9fefbce638f814672e23422e 100644 (file)
@@ -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]);
index 5cde83f14aead7a67a0049d7c36d4b9a791094ce..d9a9b4a43ae76e675294e38b603a0618c64df3a0 100644 (file)
@@ -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();
index 872646165d7d3237e97cbf863a98a83d679f84b7..e5b54a8ea8c619bedb8ca6265f00fe10b0b219ab 100644 (file)
@@ -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,