From b1c42176a65dbe9c83a0af766e6bd8315530f3a5 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 7 Apr 2009 17:57:34 -0400 Subject: [PATCH] Shared mailboxes: If selecting prefix/, try to open the user's INBOX. --HG-- branch : HEAD --- src/lib-storage/index/shared/shared-storage.c | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/lib-storage/index/shared/shared-storage.c b/src/lib-storage/index/shared/shared-storage.c index a4f14682b7..fec0a32315 100644 --- a/src/lib-storage/index/shared/shared-storage.c +++ b/src/lib-storage/index/shared/shared-storage.c @@ -148,12 +148,8 @@ int shared_storage_get_namespace(struct mail_storage *_storage, p = storage->ns_prefix_pattern; for (name = *_name; *p != '\0';) { if (*p != '%') { - if (*p != *name) { - mail_storage_set_critical(_storage, - "Invalid namespace prefix %s vs %s", - storage->ns_prefix_pattern, *_name); - return -1; - } + if (*p != *name) + break; p++; name++; continue; } @@ -175,15 +171,25 @@ int shared_storage_get_namespace(struct mail_storage *_storage, next = strchr(name, *p != '\0' ? *p : _storage->ns->sep); if (next == NULL) { - mail_storage_set_critical(_storage, - "Invalid namespace prefix %s vs %s", - storage->ns_prefix_pattern, *_name); - return -1; + *dest = name; + name = ""; + break; } - *dest = t_strdup_until(name, next); name = next; } + if (*p != '\0') { + if (*name == '\0' || + (name[1] == '\0' && *name == _storage->ns->sep)) { + /* trying to open / mailbox */ + name = "INBOX"; + } else { + mail_storage_set_critical(_storage, + "Invalid namespace prefix %s vs %s", + storage->ns_prefix_pattern, *_name); + return -1; + } + } /* successfully matched the name. */ if (userdomain == NULL) { i_assert(username != NULL); -- 2.47.3