changeset 22120:59626374824b

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.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 30 May 2017 09:18:14 +0300
parents b851ae883087
children 21f67d3a4a90
files src/lib-storage/list/mailbox-list-fs-iter.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Tue May 30 09:15:09 2017 +0300
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Tue May 30 09:18:14 2017 +0300
@@ -75,8 +75,12 @@
 	}
 	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;