]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add fields to mail_storage needed for list rebuild
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 13 Aug 2021 07:29:59 +0000 (10:29 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Tue, 7 Sep 2021 08:38:03 +0000 (08:38 +0000)
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.c

index dc035a851c683bea6725893d630d6c8b61386bee..c9847f52716628f1a01a4064d7f461eb2021d5ed 100644 (file)
@@ -12,6 +12,7 @@
 
 struct file_lock;
 struct file_create_settings;
+struct fs;
 
 /* Default prefix for indexes */
 #define MAIL_INDEX_PREFIX "dovecot.index"
@@ -23,6 +24,8 @@ struct file_create_settings;
 
 #define MAIL_SHARED_STORAGE_NAME "shared"
 
+#define MAIL_STORAGE_LOST_MAILBOX_PREFIX "recovered-lost-folder-"
+
 enum mail_storage_list_index_rebuild_reason {
        /* Mailbox list index was found to be corrupted. */
        MAIL_STORAGE_LIST_INDEX_REBUILD_REASON_CORRUPTED,
@@ -153,6 +156,9 @@ struct mail_storage {
         * uniqueness checking (via strcmp) and never used as a path. */
        const char *unique_root_dir;
 
+       /* prefix for lost mailbox */
+       const char *lost_mailbox_prefix;
+
        /* Last error set in mail_storage_set_critical(). */
        char *last_internal_error;
 
@@ -176,12 +182,17 @@ struct mail_storage {
           attributes. */
        struct dict *_shared_attr_dict;
 
+       /* optional fs-api object for accessing mailboxes */
+       struct fs *mailboxes_fs;
+
        /* Module-specific contexts. See mail_storage_module_id. */
        ARRAY(union mail_storage_module_context *) module_contexts;
 
        /* Failed to create shared attribute dict, don't try again */
        bool shared_attr_dict_failed:1;
        bool last_error_is_internal:1;
+       bool rebuilding_list_index:1;
+       bool rebuild_list_index:1;
 };
 
 struct mail_attachment_part {
index df1f59a4c67b27d3e5511ba8e541e9a97a78f5de..d7923b265e37432186efb99cb6ef40680708701f 100644 (file)
@@ -417,6 +417,8 @@ int mail_storage_create_full(struct mail_namespace *ns, const char *driver,
        }
 
        storage = storage_class->v.alloc();
+       if (storage->lost_mailbox_prefix == NULL)
+               storage->lost_mailbox_prefix = MAIL_STORAGE_LOST_MAILBOX_PREFIX;
        storage->refcount = 1;
        storage->storage_class = storage_class;
        storage->user = ns->user;