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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx:
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

----
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

[Index of Archives]     [Cyrus SASL]     [Squirrel Mail]     [Asterisk PBX]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [KDE]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux