From: Timo Sirainen Date: Fri, 28 May 2010 17:30:55 +0000 (+0100) Subject: imap: LIST now handles better if INBOX is in a different namespace than prefix="" X-Git-Tag: 2.0.beta6~103 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c24bb6b8e2e39c19687b0b43e1beafd5d2aa9488;p=thirdparty%2Fdovecot%2Fcore.git imap: LIST now handles better if INBOX is in a different namespace than prefix="" --HG-- branch : HEAD --- diff --git a/src/imap/cmd-list.c b/src/imap/cmd-list.c index 92650c995f..ce31352905 100644 --- a/src/imap/cmd-list.c +++ b/src/imap/cmd-list.c @@ -16,6 +16,7 @@ struct cmd_list_context { const char *const *patterns; enum mailbox_list_iter_flags list_flags; struct imap_status_items status_items; + enum mailbox_info_flags inbox_flags; struct mail_namespace *ns; struct mailbox_list_iterate_context *list_iter; @@ -348,6 +349,15 @@ static void list_send_status(struct cmd_list_context *ctx, const char *name, imap_status_send(ctx->cmd->client, name, &ctx->status_items, &result); } +static bool list_has_empty_prefix_ns(struct mail_user *user) +{ + struct mail_namespace *ns; + + ns = mail_namespace_find_prefix(user->namespaces, ""); + return ns != NULL && (ns->flags & (NAMESPACE_FLAG_LIST_PREFIX | + NAMESPACE_FLAG_LIST_CHILDREN)) != 0; +} + static int list_namespace_mailboxes(struct cmd_list_context *ctx) { @@ -374,8 +384,19 @@ list_namespace_mailboxes(struct cmd_list_context *ctx) and we're now listing prefixless namespace that contains INBOX. There's no way we can show this mailbox. */ + ctx->inbox_flags = flags & + (MAILBOX_CHILDREN|MAILBOX_NOCHILDREN); continue; } + + if (*info->ns->prefix != '\0' && + list_has_empty_prefix_ns(info->ns->user)) { + /* INBOX is in its own namespace, while a + namespace with prefix="" has its children. */ + flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN| + MAILBOX_NOINFERIORS); + flags |= ctx->inbox_flags; + } ctx->inbox_found = TRUE; } if (ctx->cur_ns_send_prefix)