changeset 9047:c5b16d6c39c9 HEAD

virtual: If we can't open a mailbox that was added using a wildcard, just skip it.
author Timo Sirainen <tss@iki.fi>
date Sun, 17 May 2009 18:45:23 -0400
parents 54686141353f
children cc484a16bbe4
files src/plugins/virtual/virtual-config.c src/plugins/virtual/virtual-storage.c src/plugins/virtual/virtual-storage.h
diffstat 3 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-config.c	Sun May 17 18:36:12 2009 -0400
+++ b/src/plugins/virtual/virtual-config.c	Sun May 17 18:45:23 2009 -0400
@@ -213,6 +213,7 @@
 	*bbox = *wbox;
 	bbox->name = p_strdup(ctx->pool, name);
 	bbox->glob = NULL;
+	bbox->wildcard = TRUE;
 	mail_search_args_ref(bbox->search_args);
 	array_append(&ctx->mbox->backend_boxes, &bbox, 1);
 }
--- a/src/plugins/virtual/virtual-storage.c	Sun May 17 18:36:12 2009 -0400
+++ b/src/plugins/virtual/virtual-storage.c	Sun May 17 18:45:23 2009 -0400
@@ -211,7 +211,7 @@
 	open_flags |= MAILBOX_OPEN_KEEP_RECENT;
 
 	bboxes = array_get(&mbox->backend_boxes, &count);
-	for (i = 0; i < count; i++) {
+	for (i = 0; i < count; ) {
 		mailbox = bboxes[i]->name;
 		ns = mail_namespace_find(user->namespaces, &mailbox);
 		storage = ns->storage;
@@ -219,10 +219,19 @@
 					      NULL, open_flags);
 
 		if (bboxes[i]->box == NULL) {
+			str = mail_storage_get_last_error(storage, &error);
+			if (bboxes[i]->wildcard &&
+			    (error == MAIL_ERROR_PERM ||
+			     error == MAIL_ERROR_NOTFOUND)) {
+				/* this mailbox wasn't explicitly specified.
+				   just skip it. */
+				mail_search_args_unref(&bboxes[i]->search_args);
+				array_delete(&mbox->backend_boxes, i, 1);
+				bboxes = array_get(&mbox->backend_boxes, &count);
+				continue;
+			}
 			if (storage != mbox->ibox.box.storage) {
 				/* copy the error */
-				str = mail_storage_get_last_error(storage,
-								  &error);
 				mail_storage_set_error(mbox->ibox.box.storage,
 						       error, str);
 			}
@@ -232,6 +241,7 @@
 		i_array_init(&bboxes[i]->sync_pending_removes, 64);
 		mail_search_args_init(bboxes[i]->search_args, bboxes[i]->box,
 				      FALSE, NULL);
+		i++;
 	}
 	if (i == count)
 		return 0;
--- a/src/plugins/virtual/virtual-storage.h	Sun May 17 18:36:12 2009 -0400
+++ b/src/plugins/virtual/virtual-storage.h	Sun May 17 18:45:23 2009 -0400
@@ -90,6 +90,7 @@
 	struct mail_namespace *ns;
 
 	unsigned int sync_seen:1;
+	unsigned int wildcard:1;
 };
 ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *);