# HG changeset patch # User Timo Sirainen # Date 1242600323 14400 # Node ID c5b16d6c39c9f920a9f6ac299c6c2c51b8ff2d14 # Parent 54686141353fcb7c1eab1c05c19ef915edb93f29 virtual: If we can't open a mailbox that was added using a wildcard, just skip it. diff -r 54686141353f -r c5b16d6c39c9 src/plugins/virtual/virtual-config.c --- 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); } diff -r 54686141353f -r c5b16d6c39c9 src/plugins/virtual/virtual-storage.c --- 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; diff -r 54686141353f -r c5b16d6c39c9 src/plugins/virtual/virtual-storage.h --- 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 *);