]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Make dovecot.list.index's filename configurable.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 15 Dec 2016 16:15:21 +0000 (18:15 +0200)
committerGitLab <gitlab@git.dovecot.net>
Fri, 16 Dec 2016 21:08:21 +0000 (23:08 +0200)
This is useful when there are multiple namespaces pointing to the same mail
root directory. For example mdbox with lazy-expunge:

namespace {
  prefix = Expunged/
  location = mdbox:~/mdbox:MAILBOXDIR=expunged:LISTINDEX=expunged.list.index
  ..
}

src/lib-storage/list/mailbox-list-index.c
src/lib-storage/list/mailbox-list-index.h
src/lib-storage/mailbox-list-private.h
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 2674cd114a177e06db0a21d6bf39143216975eb0..bd250a320f8f064237787600d6c632fb076335df 100644 (file)
@@ -783,9 +783,10 @@ static void mailbox_list_index_init_finish(struct mailbox_list *list)
        }
        i_assert(ilist->has_backing_store || dir != NULL);
 
+       i_assert(list->set.list_index_fname != NULL);
        ilist->path = dir == NULL ? "(in-memory mailbox list index)" :
-               p_strdup_printf(list->pool, "%s/"MAILBOX_LIST_INDEX_PREFIX, dir);
-       ilist->index = mail_index_alloc(dir, MAILBOX_LIST_INDEX_PREFIX);
+               p_strdup_printf(list->pool, "%s/%s", dir, list->set.list_index_fname);
+       ilist->index = mail_index_alloc(dir, list->set.list_index_fname);
 
        ilist->ext_id = mail_index_ext_register(ilist->index, "list",
                                sizeof(struct mailbox_list_index_header),
index 00bcd9cba12b52dc527efb730774e3a2909ee115..97655782b646ab3b22db545040879724d2cde85d 100644 (file)
@@ -30,7 +30,6 @@
 #include <sys/time.h>
 
 #define MAILBOX_LIST_INDEX_HIERARHCY_SEP '~'
-#define MAILBOX_LIST_INDEX_PREFIX "dovecot.list.index"
 
 #define INDEX_LIST_CONTEXT(obj) \
        MODULE_CONTEXT(obj, mailbox_list_index_module)
index 13fb1f5b4436f71b0aaa6f4f9ba3f725ce2c4140..7d589e28a77944f4edf08148707dc0c0b6608eef 100644 (file)
@@ -14,6 +14,7 @@
 #define MAILBOX_LIST_NAME_INDEX "index"
 #define MAILBOX_LIST_NAME_NONE "none"
 
+#define MAILBOX_LIST_INDEX_DEFAULT_PREFIX "dovecot.list.index"
 #define MAILBOX_LOG_FILE_NAME "dovecot.mailbox.log"
 
 #define T_MAILBOX_LIST_ERR_NOT_FOUND(list, name) \
index 76a5a954d172a737266fbc20e75b54f1d32ab12e..27928f93cd64818f6f9948cfcb9ac09048377a01 100644 (file)
@@ -163,6 +163,8 @@ int mailbox_list_create(const char *driver, struct mail_namespace *ns,
        list->set.inbox_path = p_strdup(list->pool, set->inbox_path);
        list->set.subscription_fname =
                p_strdup(list->pool, set->subscription_fname);
+       list->set.list_index_fname =
+               p_strdup(list->pool, set->list_index_fname);
        list->set.maildir_name =
                p_strdup(list->pool, set->maildir_name);
        list->set.mailbox_dir_name =
@@ -266,6 +268,7 @@ void mailbox_list_settings_init_defaults(struct mailbox_list_settings *set_r)
        memset(set_r, 0, sizeof(*set_r));
        set_r->mailbox_dir_name = "";
        set_r->maildir_name = "";
+       set_r->list_index_fname = MAILBOX_LIST_INDEX_DEFAULT_PREFIX;
 }
 
 static int
@@ -333,6 +336,8 @@ mailbox_list_settings_parse_full(struct mail_user *user, const char *data,
                        dest = &set_r->maildir_name;
                else if (strcmp(key, "MAILBOXDIR") == 0)
                        dest = &set_r->mailbox_dir_name;
+               else if (strcmp(key, "LISTINDEX") == 0)
+                       dest = &set_r->list_index_fname;
                else if (strcmp(key, "FULLDIRNAME") == 0) {
                        set_r->index_control_use_maildir_name = TRUE;
                        dest = &set_r->maildir_name;
index ae953837bcb3cd5068528dc891fd6cea05dea2db..253bc64d155cb7ab06f66a925a48df00db35cd3e 100644 (file)
@@ -101,6 +101,7 @@ struct mailbox_list_settings {
 
        const char *inbox_path;
        const char *subscription_fname;
+       const char *list_index_fname;
        /* If non-empty, it means that mails exist in a maildir_name
           subdirectory. eg. if you have a directory containing directories: