From: Timo Sirainen Date: Tue, 28 Aug 2012 16:06:01 +0000 (+0300) Subject: imapc: If imapc_list_prefix=INBOX, don't treat INBOX/INBOX as the INBOX itself. X-Git-Tag: 2.1.10~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aecc59fc5c5cc32de1f7c5ba3e1575b79197a3df;p=thirdparty%2Fdovecot%2Fcore.git imapc: If imapc_list_prefix=INBOX, don't treat INBOX/INBOX as the INBOX itself. --- diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index 0ad0bf104e..be77afe52b 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -345,6 +345,7 @@ static int imapc_list_refresh(struct imapc_mailbox_list *list) { struct imapc_command *cmd; struct imapc_simple_context ctx; + struct mailbox_node *node; const char *pattern; i_assert(list->sep != '\0'); @@ -364,16 +365,23 @@ static int imapc_list_refresh(struct imapc_mailbox_list *list) mailbox_tree_deinit(&list->mailboxes); list->mailboxes = mailbox_tree_init(list->sep); mailbox_tree_set_parents_nonexistent(list->mailboxes); + imapc_simple_run(&ctx); if ((list->list.ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0) { /* INBOX always exists in IMAP server. since this namespace is marked with inbox=yes, show the INBOX even if imapc_list_prefix doesn't match it */ bool created; - (void)mailbox_tree_get(list->mailboxes, "INBOX", &created); + node = mailbox_tree_get(list->mailboxes, "INBOX", &created); + if (*list->storage->set->imapc_list_prefix != '\0') { + /* this listing didn't include the INBOX itself, but + might have included its children. make sure there + aren't any extra flags in it (especially + \NonExistent) */ + node->flags &= MAILBOX_CHILDREN; + } } - imapc_simple_run(&ctx); if (ctx.ret == 0) { list->refreshed_mailboxes = TRUE; imapc_list_delete_unused_indexes(list);