Mercurial > dovecot > original-hg > dovecot-1.2
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 *);