Can't view (other) users subfolders with imapd 3.0.6

ellie timoney ellie at fastmail.com
Mon Jun 4 22:50:47 EDT 2018


Hi Edda,

Thanks for the patch!  I've added your email below to the  GitHub issue
for this: https://github.com/cyrusimap/cyrus-imapd/issues/2362
I'll review the patch and if it looks good, will include it in the next
3.0 release.  I'll also forward-port it to master if necessary.
Let me know if you'd like to submit this as a Pull Request, so your
GitHub identity can be credited for it, otherwise I'll just set your
email address as the author on the commit. :)
Cheers,

ellie


On Mon, Jun 4, 2018, at 9:51 PM, Edda wrote:
> 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> 


> ----
> 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/20180605/dbf7af94/attachment.html>


More information about the Info-cyrus mailing list