From: Timo Sirainen Date: Thu, 15 Dec 2016 16:15:21 +0000 (+0200) Subject: lib-storage: Make dovecot.list.index's filename configurable. X-Git-Tag: 2.3.0.rc1~2416 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fa780a18c41881036af582f7a3473d6399e9d34d;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Make dovecot.list.index's filename configurable. 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 .. } --- diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 2674cd114a..bd250a320f 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -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), diff --git a/src/lib-storage/list/mailbox-list-index.h b/src/lib-storage/list/mailbox-list-index.h index 00bcd9cba1..97655782b6 100644 --- a/src/lib-storage/list/mailbox-list-index.h +++ b/src/lib-storage/list/mailbox-list-index.h @@ -30,7 +30,6 @@ #include #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) diff --git a/src/lib-storage/mailbox-list-private.h b/src/lib-storage/mailbox-list-private.h index 13fb1f5b44..7d589e28a7 100644 --- a/src/lib-storage/mailbox-list-private.h +++ b/src/lib-storage/mailbox-list-private.h @@ -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) \ diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 76a5a954d1..27928f93cd 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -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; diff --git a/src/lib-storage/mailbox-list.h b/src/lib-storage/mailbox-list.h index ae953837bc..253bc64d15 100644 --- a/src/lib-storage/mailbox-list.h +++ b/src/lib-storage/mailbox-list.h @@ -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: