Can't view (other) users subfolders with imapd 3.0.6
Edda
letters001 at sendmaid.org
Mon Jun 4 07:51:23 EDT 2018
Hi,
I was able to reproduce the issue with 3.0.5 with these settings:
unixhierarchysep: yes
altnamespace: no
crossdomains: no
Key factor is unixhierarchysep on. (crossdomains is a special case.
altnamespace on/off only looks different.)
I did a lot of debugging and found out the following:
Compared to version 2.4.x and 2.5.x 3.0.x function list_data in
../imap/imapd.c does not transform the hierarchy separator.
In function mboxlist_do_find (../imap/mboxlist.c) below "Other Users
namespace" we have a prefix search. With "unixhierarchysep on" cyrus
uses the wrong prefix (domainpat) for that search.
Example:
. LIST "" "user/%"
* LIST (\HasChildren) "/" user/bbb
. OK Completed (0.000 secs 4 calls)
. LIST "" "user/bbb/sub01"
. OK Completed (0.000 secs)
In this case cyrus searches with domainpat: user.bbb/sub01/subsub01
The prefix is previously generated from a variable called commonpat,
which is used only for this specific search.
So I fixed it there with this patch:
--- cyrus-imapd-3.0.5/imap/mboxlist.c.orig 2018-04-12
13:12:47.633956338 +0200
+++ cyrus-imapd-3.0.5/imap/mboxlist.c 2018-05-30 10:56:44.255724710 +0200
@@ -2774,6 +2774,10 @@
const char *pat = strarray_nth(patterns, i);
if (pat[prefixlen] != c) break;
}
+ if (rock->namespace->hier_sep == '/') {
+ if (c == '/') c = '.';
+ else if (c == '.') c = DOTCHAR;
+ }
if (i < patterns->count) break;
if (c == '*' || c == '%' || c == '?') break;
commonpat[prefixlen] = c;
Now for the example above the search pattern is user.bbb.sub01 and the
submailbox is returned correctly.
. LIST "" "user/%"
* LIST (\HasChildren) "/" user/bbb
. OK Completed (0.000 secs 4 calls)
. LIST "" "user/bbb/sub01"
* LIST (\HasChildren) "/" user/bbb/sub01
. OK Completed (0.000 secs 2 calls)
. LIST "" "user/bbb/%"
* LIST (\HasChildren) "/" user/bbb/sub01
* LIST (\HasNoChildren) "/" user/bbb/sub.dot01
. OK Completed (0.000 secs 3 calls)
. SUBSCRIBE "user/bbb/sub01"
. OK Completed
. LSUB "" "user/*"
* LSUB () "/" user/bbb/sub01
. OK Completed (0.000 secs 1 calls)
The patch works fine in my test environment and I see no caveats yet. I
would be very nice if someone could check it :-)
Best regards,
Edda
Am 15.05.18 um 10:37 schrieb marco at nucleus.it:
> Hi,
> after migrating from cyrus-imapd-2.4.17 to cyrus-imapd-3.0.6 we cannot
> view (other) users subfolders.
>
> Distro:Gentoo
> Cyrus version: cyrus-imapd-3.0.6
>
> imapd-3.0.5.conf attached
>
> In the test environment we created a user named "aaa" and "bbb", then
> we created the folder "bbb/mytest/mysubtest". We set the acl for the
> user aaa to share the mailbox bbb/mytest/mysubtest
>
> user.aaa 0 default aaa lrswipkxtecdan anonymous p
> user.bbb 0 default bbb lrswipkxtecdan anonymous p
> aaa lrswipkxtecdan
> user.bbb.mytest 0 default bbb lrswipkxtecdan anonymous p
> aaa lrswipkxtecdan
> user.bbb.mytest.mysubtest 0 default
> bbb lrswipkxtecdan
> anonymous p
> aaa lrswipkxtecdan
>
> From whatever imap client, when we search for new folders, user.bbb
> appears, but neither user.bbb.mytest nor user.bbb.mytest.mysubtest.
>
> This is the capture from imapd 3.0.6:
>
> IMAP> 62 LIST "" "user/%"
> IMAP< * LIST (\HasChildren) "/" user/bbb
> IMAP< 62 OK Completed (0.001 secs 3 calls)
> IMAP> 63 LIST "" "user/bbb/%"
> IMAP< 63 OK Completed (0.000 secs)
> IMAP> 64 LSUB "" "user/bbb/%"
> IMAP< 64 OK Completed (0.000 secs)
> IMAP> 65 LSUB "" "user/%"
> IMAP< 65 OK Completed (0.000 secs)
> IMAP> 66 LSUB "" "%"
> IMAP< * LSUB (\Noselect \HasChildren) "/" INBOX
> IMAP< 66 OK Completed (0.000 secs 4 calls)
> IMAP> 16 NOOP
> IMAP< 16 OK Success
> IMAP> 67 SUBSCRIBE "user/bbb"
> IMAP< 67 OK Completed
> IMAP> 68 LSUB "" "%"
> IMAP< * LSUB (\Noselect \HasChildren) "/" INBOX
> IMAP< * LSUB (\Noselect \HasChildren) "/" user
> IMAP< 68 OK Completed (0.001 secs 5 calls)
> IMAP> 69 LSUB "" "INBOX/%"
> IMAP< * LSUB () "/" INBOX/Drafts
> ...
> IMAP> 74 LSUB "" "user/%"
> IMAP< * LSUB () "/" user/bbb
> IMAP< 74 OK Completed (0.001 secs 1 calls)
> IMAP> 75 LSUB "" "user/bbb/%"
> IMAP< 75 OK Completed (0.001 secs)
>
> Refreshing only the user.bbb folders nothing changed
>
> IMAP> 83 LIST "" "user/%"
> IMAP< * LIST (\HasChildren) "/" user/bbb
> IMAP< 83 OK Completed (0.001 secs 3 calls)
> IMAP> 84 LIST "" "user/bbb/%"
> IMAP< 84 OK Completed (0.001 secs)
> IMAP> 85 LSUB "" "user/bbb/%"
> IMAP< 85 OK Completed (0.001 secs)
> IMAP> 86 LSUB "" "user/%"
> IMAP< * LSUB () "/" user/bbb
> IMAP< 86 OK Completed (0.001 secs 1 calls)
>
> With net-mail/cyrus-imapd-2.4.17 all is working fine
>
> imapd-2.4.17.conf attached
>
> user.aaa 0 default aaa lrswipkxtecda anonymous p
> user.bbb 0 default bbb lrswipkxtecda anonymous p
> aaa lrswipkxtecda
> user.bbb.mytest 0 default bbb lrswipkxtecda anonymous p
> aaa lrswipkxtecda
> user.bbb.mytest.mysubtest 0 default bbb lrswipkxtecda
> anonymous p
> aaa lrswipkxtecda
>
> if we search for new folders to subscribe user/bbb and all the
> subfolders appeared
>
> IMAP> 57 LIST "" "user/%"
> IMAP< * LIST (\HasChildren) "/" user/bbb
> IMAP< 57 OK Completed (0.000 secs 3 calls)
> IMAP> 58 LIST "" "user/bbb/%"
> IMAP< * LIST (\HasChildren) "/" user/bbb/mytest
> IMAP< 58 OK Completed (0.000 secs 2 calls)
> IMAP> 59 LIST "" "user/bbb/mytest/%"
> IMAP< * LIST (\HasNoChildren) "/" user/bbb/mytest/mysubtest
> IMAP< 59 OK Completed (0.000 secs 2 calls)
> IMAP> 60 LIST "" "user/bbb/mytest/mysubtest/%"
> IMAP< 60 OK Completed (0.000 secs)
> IMAP> 61 LSUB "" "user/bbb/mytest/mysubtest/%"
> IMAP< 61 OK Completed (0.000 secs)
> IMAP> 62 LSUB "" "user/bbb/mytest/%"
> IMAP< 62 OK Completed (0.000 secs)
> IMAP> 63 LSUB "" "user/bbb/%"
> IMAP< 63 OK Completed (0.000 secs)
> IMAP> 64 LSUB "" "user/%"
> IMAP< 64 OK Completed (0.000 secs)
> IMAP> 65 LSUB "" "%"
> IMAP< * LSUB (\Noselect \HasChildren) "/" INBOX
> IMAP< 65 OK Completed (0.000 secs 4 calls)
> IMAP> 66 NOOP
> IMAP< 66 OK Completed
> IMAP> 67 SUBSCRIBE "user/bbb"
> IMAP< 67 OK Completed
> IMAP> 68 SUBSCRIBE "user/bbb/mytest/mysubtest"
> IMAP< 68 OK Completed
> IMAP> 69 SUBSCRIBE "user/bbb/mytest"
> IMAP< 69 OK Completed
>
> Any suggestion?
>
> Thanks for the support
> Marco
>
>
>
> ----
> Cyrus Home Page: http://www.cyrusimap.org/
> List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
> To Unsubscribe:
> https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.andrew.cmu.edu/pipermail/info-cyrus/attachments/20180604/463c1c6d/attachment-0001.html>
More information about the Info-cyrus
mailing list