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

index 30fe87a13fc3fe1ea6756cd176bfc6d0cfcf2b88..6f44be6cb95eb1fc948e48672b8a3b99bfde930b 100644 (file)
@@ -15,6 +15,7 @@
 #include "var-expand.h"
 #include "restrict-access.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "master-interface.h"
 
 #include "imap-urlauth-worker-client.h"
@@ -48,6 +49,7 @@ int client_create(const char *service, const char *username,
 
        client = i_new(struct client, 1);
        client->set = set;
+       pool_ref(client->set->pool);
 
        client->event = event_create(NULL);
        event_set_forced_debug(client->event, set->mail_debug);
@@ -131,6 +133,7 @@ void client_destroy(struct client *client, const char *reason)
 
        connection_deinit(&client->conn);
        event_unref(&client->event);
+       master_service_settings_free(client->set);
 
        i_free(client->username);
        i_free(client->service);
index a843b235f4868d9a9e11ccae0ad2fbd4b08aa477..6cbaf4a61993f9a6afa2df523fcdaa8b5ed72433 100644 (file)
@@ -91,5 +91,6 @@ const struct setting_parser_info imap_urlauth_setting_parser_info = {
        .defaults = &imap_urlauth_default_settings,
 
        .struct_size = sizeof(struct imap_urlauth_settings),
+       .pool_offset1 = 1 + offsetof(struct imap_urlauth_settings, pool),
        .dependencies = imap_urlauth_setting_dependencies
 };
index c04080e16a8d287b26161188d2a9bca72c196c48..fb0a4af8a7d251604e908315170922c9c4209df7 100644 (file)
@@ -4,6 +4,7 @@
 struct mail_user_settings;
 
 struct imap_urlauth_settings {
+       pool_t pool;
        const char *base_dir;
 
        bool mail_debug;
index 11ffa0b1c5becb0341bdbaedaa87ba4add058f8b..7bc9d783a570d397ddf7214b108b6d1bd1868ba1 100644 (file)
@@ -86,5 +86,6 @@ const struct setting_parser_info imap_urlauth_worker_setting_parser_info = {
        .defaults = &imap_urlauth_worker_default_settings,
 
        .struct_size = sizeof(struct imap_urlauth_worker_settings),
+       .pool_offset1 = 1 + offsetof(struct imap_urlauth_worker_settings, pool),
        .dependencies = imap_urlauth_worker_setting_dependencies
 };
index 28154e8bccb2b895bbff1b1446308871ab9eaa5f..36340b3fd2d0e30cb1c92b8f86499b274e5b4cbe 100644 (file)
@@ -4,6 +4,7 @@
 struct mail_user_settings;
 
 struct imap_urlauth_worker_settings {
+       pool_t pool;
        bool verbose_proctitle;
 
        /* imap_urlauth: */
index a1ba880e665dbe726a767982348e4c5265e19d09..dc61c231dd6f060abe81961eb06f153dde436860 100644 (file)
@@ -20,6 +20,7 @@
 #include "settings-parser.h"
 #include "connection.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "master-interface.h"
 #include "mail-storage.h"
 #include "mail-storage-service.h"
@@ -238,6 +239,7 @@ static void client_destroy(struct client *client)
        connection_deinit(&client->conn_ctrl);
        connection_deinit(&client->conn);
        event_unref(&client->event);
+       master_service_settings_free(client->set);
        i_free(client);
 
        imap_urlauth_worker_refresh_proctitle();
@@ -557,14 +559,21 @@ client_handle_user_command(struct client *client, const char *cmd,
                return 1;
        }
 
+       if (master_service_settings_parser_get(client->event,
+                       mail_user->set_parser,
+                       &imap_urlauth_worker_setting_parser_info,
+                       MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
+                       &set, &error) < 0) {
+               e_error(client->event, "user %s: %s", input.username, error);
+               client_abort(client, "Session aborted: Failed to get settings");
+               return 0;
+       }
+
        event_set_forced_debug(client->event, mail_user->mail_debug);
 
        /* drop privileges */
        restrict_access_allow_coredumps(TRUE);
 
-       set = settings_parser_get_root_set(mail_user->set_parser,
-                       &imap_urlauth_worker_setting_parser_info);
-
        if (set->verbose_proctitle) {
                verbose_proctitle = TRUE;
                imap_urlauth_worker_refresh_proctitle();
index 3a843488a6036dbcda929e90e3a9f866714fad28..882a6faba573c0492470f99499f91037394f6a1f 100644 (file)
@@ -255,12 +255,13 @@ int main(int argc, char *argv[])
        i_zero(&input);
        input.roots = set_roots;
        input.service = "imap-urlauth";
+       input.disable_check_settings = TRUE;
        if (master_service_settings_read(master_service, &input, &output,
                                                &error) < 0)
                i_fatal("%s", error);
 
        imap_urlauth_settings = 
-               master_service_settings_get_root_set(master_service,
+               master_service_settings_get_or_fatal(NULL,
                        &imap_urlauth_setting_parser_info);
 
        if (imap_urlauth_settings->verbose_proctitle)
@@ -299,6 +300,7 @@ int main(int argc, char *argv[])
 
        if (login_server != NULL)
                login_server_deinit(&login_server);
+       master_service_settings_free(imap_urlauth_settings);
        master_service_deinit(&master_service);
        return 0;
 }