dovecot-2.2: lib-storage: Fixed support for list=no prefix="" li...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Feb 24 18:31:24 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/fad7f879caa1
changeset: 17151:fad7f879caa1
user: Timo Sirainen <tss at iki.fi>
date: Mon Feb 24 12:30:51 2014 -0600
description:
lib-storage: Fixed support for list=no prefix="" listing.
This behavior works with e.g. Outlook where it's allowed to CREATE and LIST
the Sent/Trash/etc mailboxes to root level, even though the primary
namespace has a prefix.
diffstat:
src/lib-storage/list/mailbox-list-iter.c | 18 ++++++++++++++++--
1 files changed, 16 insertions(+), 2 deletions(-)
diffs (35 lines):
diff -r 2397adb8c1bd -r fad7f879caa1 src/lib-storage/list/mailbox-list-iter.c
--- a/src/lib-storage/list/mailbox-list-iter.c Mon Feb 24 11:29:52 2014 -0600
+++ b/src/lib-storage/list/mailbox-list-iter.c Mon Feb 24 12:30:51 2014 -0600
@@ -239,6 +239,15 @@
return FALSE;
}
+static bool list_pattern_has_wildcards(const char *pattern)
+{
+ for (; *pattern != '\0'; pattern++) {
+ if (*pattern == '%' || *pattern == '*')
+ return TRUE;
+ }
+ return FALSE;
+}
+
static bool ns_match_next(struct ns_list_iterate_context *ctx,
struct mail_namespace *ns, const char *pattern)
{
@@ -256,8 +265,13 @@
/* non-listable namespace matches only with exact prefix */
if (strncmp(ns->prefix, pattern, ns->prefix_len) != 0)
return FALSE;
- /* prefix="" list=no is never listed */
- if (ns->prefix_len == 0)
+ /* with prefix="", list=no we don't want to show anything,
+ except when the client explicitly lists a mailbox without
+ wildcards (e.g. LIST "" mailbox). this is mainly useful
+ for working around client bugs (and supporting a specific
+ IMAP client behavior that's not exactly buggy but not very
+ good IMAP behavior either). */
+ if (ns->prefix_len == 0 && list_pattern_has_wildcards(pattern))
return FALSE;
}
More information about the dovecot-cvs
mailing list