From 3c56ce9f3960329db46340ce13c6b337849bbdf5 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 30 May 2017 09:18:14 +0300 Subject: [PATCH] lib-storage: Fix ACL in parent mailbox potentially hiding its children. fs_get_existence_info_flag() was only being called with LAYOUT=fs and Maildir combination, so only it was broken if the parent mailbox wasn't visible but its children were. --- src/lib-storage/list/mailbox-list-fs-iter.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib-storage/list/mailbox-list-fs-iter.c b/src/lib-storage/list/mailbox-list-fs-iter.c index ccf97f8026..646fc82c89 100644 --- a/src/lib-storage/list/mailbox-list-fs-iter.c +++ b/src/lib-storage/list/mailbox-list-fs-iter.c @@ -75,8 +75,12 @@ fs_get_existence_info_flag(struct fs_list_iterate_context *ctx, } switch (existence) { case MAILBOX_EXISTENCE_NONE: - *info_flags |= MAILBOX_NONEXISTENT; - break; + /* We already found out that this mailbox exists. So this is + either a race condition or ACL plugin prevented access to + this. In any case treat this as a \NoSelect mailbox so that + we'll recurse into its potential children. This is + especially important if ACL disabled access to the parent + mailbox, but child mailboxes would be accessible. */ case MAILBOX_EXISTENCE_NOSELECT: *info_flags |= MAILBOX_NOSELECT; break; -- 2.47.3