]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Use master_service_settings_parser_get()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 5 Jan 2023 02:13:50 +0000 (04:13 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 20 Nov 2023 12:11:41 +0000 (14:11 +0200)
src/imap/imap-client.c
src/imap/imap-settings.c
src/imap/imap-settings.h
src/imap/main.c

index 6d70a8e82d2043a77cd293f5ac786b3b10f332cc..2db8e7eb376b40e8fd68307a20ec753522a43195 100644 (file)
 #include "time-util.h"
 #include "var-expand.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "imap-resp-code.h"
 #include "imap-util.h"
 #include "imap-urlauth.h"
 #include "mail-error.h"
+#include "smtp-submit-settings.h"
 #include "mail-namespace.h"
 #include "mail-storage-service.h"
 #include "mail-autoexpunge.h"
@@ -557,6 +559,8 @@ static void client_default_destroy(struct client *client, const char *reason)
        imap_client_count--;
        DLLIST_REMOVE(&imap_clients, client);
 
+       master_service_settings_free(client->set);
+       master_service_settings_free(client->smtp_set);
        event_unref(&client->event);
        i_free(client->last_cmd_name);
        pool_unref(&client->pool);
index 71c880642f9a1a23b44efcb4a3f6da633a0de0db..2f0f7377a04c65c605700c0d487ae21254cfaf13 100644 (file)
@@ -142,6 +142,7 @@ const struct setting_parser_info imap_setting_parser_info = {
        .defaults = &imap_default_settings,
 
        .struct_size = sizeof(struct imap_settings),
+       .pool_offset1 = 1 + offsetof(struct imap_settings, pool),
        .check_func = imap_settings_verify,
        .dependencies = imap_setting_dependencies
 };
index 9587b7753af24c92543e99ade50474ccf3e227ba..ef62eae02b795a32c23cfa37c221ed951484e1b9 100644 (file)
@@ -20,6 +20,7 @@ enum imap_client_fetch_failure {
 /* </settings checks> */
 
 struct imap_settings {
+       pool_t pool;
        bool verbose_proctitle;
        const char *rawlog_dir;
 
index 0a826a0f25bb73fdff3455359a7148bc8918720e..53398aa240dabd9e2106747f1913e0d2f3069556 100644 (file)
@@ -14,6 +14,7 @@
 #include "settings-parser.h"
 #include "master-interface.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "master-admin-client.h"
 #include "login-server.h"
 #include "mail-user.h"
@@ -249,7 +250,7 @@ int client_create_from_input(const struct mail_storage_service_input *input,
        struct mail_user *mail_user;
        struct client *client;
        struct imap_settings *imap_set;
-       struct smtp_submit_settings *smtp_set;
+       struct smtp_submit_settings *smtp_set = NULL;
        struct event *event;
 
        event = event_create(NULL);
@@ -280,10 +281,21 @@ int client_create_from_input(const struct mail_storage_service_input *input,
 
        restrict_access_allow_coredumps(TRUE);
 
-       smtp_set = settings_parser_get_root_set(mail_user->set_parser,
-                       &smtp_submit_setting_parser_info);
-       imap_set = settings_parser_get_root_set(mail_user->set_parser,
-                       &imap_setting_parser_info);
+       if (master_service_settings_parser_get(mail_user->event,
+                       mail_user->set_parser,
+                       &smtp_submit_setting_parser_info,
+                       MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
+                       &smtp_set, error_r) < 0 ||
+          master_service_settings_parser_get(mail_user->event,
+                       mail_user->set_parser,
+                       &imap_setting_parser_info,
+                       MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
+                       &imap_set, error_r) < 0) {
+               master_service_settings_free(smtp_set);
+               mail_user_deinit(&mail_user);
+               event_unref(&event);
+               return -1;
+       }
        if (imap_set->verbose_proctitle)
                verbose_proctitle = TRUE;