From 23ff373602a9d7df207c8df8bbce60d2a409a908 Mon Sep 17 00:00:00 2001 From: Sam Varshavchik Date: Tue, 22 Feb 2022 20:10:38 -0500 Subject: Fix response to a SELECT with insufficient ACLs. --- imap/imapd.c | 30 +++++++++++++++--------------- imap/testsuite.txt | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/imap/imapd.c b/imap/imapd.c index 0d5cbbb..71af3fe 100644 --- a/imap/imapd.c +++ b/imap/imapd.c @@ -5271,6 +5271,21 @@ int uid=0; return (-1); } + /* check if this is a shared read-only folder */ + + if (is_sharedsubdir(mailbox) && + maildir_sharedisro(mailbox)) + ro=1; + + for (p=current_mailbox_acl; *p; p++) + if (strchr(ACL_INSERT ACL_EXPUNGE + ACL_SEEN ACL_WRITE ACL_DELETEMSGS, + *p)) + break; + + if (*p == 0) + ro=1; + if (imapscan_maildir(¤t_maildir_info, mailbox, 0, ro, NULL)) { @@ -5281,12 +5296,6 @@ int uid=0; } current_mailbox=mailbox; - /* check if this is a shared read-only folder */ - - if (is_sharedsubdir(mailbox) && - maildir_sharedisro(mailbox)) - ro=1; - current_mailbox_ro=ro; mailboxflags(ro); @@ -5297,15 +5306,6 @@ int uid=0; myrights(); writes(tag); - for (p=current_mailbox_acl; *p; p++) - if (strchr(ACL_INSERT ACL_EXPUNGE - ACL_SEEN ACL_WRITE ACL_DELETEMSGS, - *p)) - break; - - if (*p == 0) - ro=1; - writes(ro ? " OK [READ-ONLY] Ok\r\n":" OK [READ-WRITE] Ok\r\n"); return (0); } diff --git a/imap/testsuite.txt b/imap/testsuite.txt index 617a1a0..7de709f 100644 --- a/imap/testsuite.txt +++ b/imap/testsuite.txt @@ -1552,7 +1552,7 @@ 001335 T033 OK LIST completed 001336 T034 NO Access denied for SELECT/EXAMINE on #shared.a.user1 (ACL "r" required) 001337 * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) -001338 * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited +001338 * OK [PERMANENTFLAGS ()] No permanent flags permitted 001339 * 1 EXISTS 001340 * 0 RECENT 001341 * OK [UIDVALIDITY] Ok -- cgit v1.2.3