changeset 21316:72af7bbcb8e2

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 .. }
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 15 Dec 2016 18:15:21 +0200
parents 56569adc701b
children 1892618b85f9
files 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
diffstat 5 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index.c	Thu Dec 15 18:13:34 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-index.c	Thu Dec 15 18:15:21 2016 +0200
@@ -783,9 +783,10 @@
 	}
 	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),
--- a/src/lib-storage/list/mailbox-list-index.h	Thu Dec 15 18:13:34 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-index.h	Thu Dec 15 18:15:21 2016 +0200
@@ -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)
--- a/src/lib-storage/mailbox-list-private.h	Thu Dec 15 18:13:34 2016 +0200
+++ b/src/lib-storage/mailbox-list-private.h	Thu Dec 15 18:15:21 2016 +0200
@@ -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) \
--- a/src/lib-storage/mailbox-list.c	Thu Dec 15 18:13:34 2016 +0200
+++ b/src/lib-storage/mailbox-list.c	Thu Dec 15 18:15:21 2016 +0200
@@ -163,6 +163,8 @@
 	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 @@
 	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 @@
 			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;
--- a/src/lib-storage/mailbox-list.h	Thu Dec 15 18:13:34 2016 +0200
+++ b/src/lib-storage/mailbox-list.h	Thu Dec 15 18:15:21 2016 +0200
@@ -101,6 +101,7 @@
 
 	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: