]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Change mailboxes_fs to be initialized with fs_init_auto()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Aug 2023 22:23:42 +0000 (01:23 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.c

index 76615f8bf7be38b03322b80c839a8ea719e8d03b..2bf9994398858a77d5f368d466332d8ebf1886dd 100644 (file)
@@ -192,6 +192,7 @@ struct mail_storage {
 
        /* optional fs-api object for accessing mailboxes */
        struct fs *mailboxes_fs;
+       struct settings_instance *mailboxes_fs_set_instance;
 
        /* Module-specific contexts. See mail_storage_module_id. */
        ARRAY(union mail_storage_module_context *) module_contexts;
index 65162c155fca52eb0acf4d3cde72754afe91418f..693b5535dc4bfadafa6f0530735d7d4c2c89b408 100644 (file)
@@ -26,6 +26,7 @@
 #include "mailbox-tree.h"
 #include "mailbox-list-private.h"
 #include "mail-storage-private.h"
+#include "mail-storage-service.h"
 #include "mail-storage-settings.h"
 #include "mail-namespace.h"
 #include "mail-search.h"
@@ -455,15 +456,28 @@ mail_storage_create_full_real(struct mail_namespace *ns, const char *driver,
                struct fs_parameters fs_params;
                const char *error;
                i_zero(&fs_params);
-
                mail_user_init_fs_parameters(storage->user, &fs_params);
-               if (fs_legacy_init("posix", "", storage->user->event,
-                                  &fs_params, &storage->mailboxes_fs,
-                                  &error) < 0) {
+
+               struct settings_instance *set_instance =
+                       mail_storage_service_user_get_settings_instance(
+                               storage->user->service_user);
+               storage->mailboxes_fs_set_instance =
+                       settings_instance_dup(set_instance);
+               settings_override(storage->mailboxes_fs_set_instance,
+                                 "fs_driver", "posix",
+                                 SETTINGS_OVERRIDE_TYPE_CODE);
+
+               struct event *event = event_create(storage->event);
+               event_set_ptr(event, SETTINGS_EVENT_INSTANCE,
+                             storage->mailboxes_fs_set_instance);
+               if (fs_init_auto(event, &fs_params, &storage->mailboxes_fs,
+                                &error) <= 0) {
                        *error_r = t_strdup_printf("fs_init(posix) failed: %s", error);
+                       event_unref(&event);
                        storage->v.destroy(storage);
                        return -1;
                }
+               event_unref(&event);
        }
 
        T_BEGIN {
@@ -529,6 +543,7 @@ void mail_storage_unref(struct mail_storage **_storage)
                array_free(&storage->error_stack);
        }
        fs_unref(&storage->mailboxes_fs);
+       settings_instance_free(&storage->mailboxes_fs_set_instance);
        event_unref(&storage->event);
 
        *_storage = NULL;