From: Timo Sirainen Date: Fri, 16 Apr 2010 14:23:43 +0000 (+0300) Subject: lib-storage: Fixed autocreating namespaces for shared users in some situations. X-Git-Tag: 2.0.beta5~108 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=229504f3f8ca4bba9f606fd26cb6080f841f5aed;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Fixed autocreating namespaces for shared users in some situations. --HG-- branch : HEAD --- diff --git a/src/lib-storage/mail-namespace.c b/src/lib-storage/mail-namespace.c index dfa333da6b..872ece1aa4 100644 --- a/src/lib-storage/mail-namespace.c +++ b/src/lib-storage/mail-namespace.c @@ -545,10 +545,31 @@ mail_namespace_find_mask(struct mail_namespace *namespaces, return best; } +static struct mail_namespace * +mail_namespace_find_shared(struct mail_namespace *ns, const char **mailbox) +{ + struct mailbox_list *list = ns->list; + struct mail_storage *storage; + + if (mailbox_list_get_storage(&list, mailbox, &storage) < 0) + return ns; + + return mailbox_list_get_namespace(list); +} + struct mail_namespace * mail_namespace_find(struct mail_namespace *namespaces, const char **mailbox) { - return mail_namespace_find_mask(namespaces, mailbox, 0, 0); + struct mail_namespace *ns; + + ns = mail_namespace_find_mask(namespaces, mailbox, 0, 0); + if (ns != NULL && ns->type == NAMESPACE_SHARED && + (ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) { + /* see if we need to autocreate a namespace for shared user */ + if (strchr(*mailbox, ns->sep) != NULL) + return mail_namespace_find_shared(ns, mailbox); + } + return ns; } struct mail_namespace *