<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Ellie,<br>
      <br>
      thank you very much for the handling of my patch! I don't have an
      account on github. So, it's easiest for me to just dump it on the
      users list. Please let me know if that bothers you.<br>
      <br>
      As an author, "Edda" would be fine :) Thank you.<br>
      <br>
      Best regards,<br>
      Edda<br>
      <br>
      Am 05.06.18 um 04:50 schrieb ellie timoney:<br>
    </div>
    <blockquote type="cite"
cite="mid:1528167047.3654579.1396537248.3C4F6C8E@webmail.messagingengine.com">
      <title></title>
      <style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
      <div>Hi Edda,<br>
      </div>
      <div><br>
      </div>
      <div>Thanks for the patch!  I've added your email below to the
        GitHub issue for this: <a
          href="https://github.com/cyrusimap/cyrus-imapd/issues/2362"
          moz-do-not-send="true">https://github.com/cyrusimap/cyrus-imapd/issues/2362</a><br>
      </div>
      <div><br>
      </div>
      <div>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.<br>
      </div>
      <div><br>
      </div>
      <div>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. :)<br>
      </div>
      <div><br>
      </div>
      <div>Cheers,<br>
      </div>
      <div><br>
      </div>
      <div>ellie</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>On Mon, Jun 4, 2018, at 9:51 PM, Edda wrote:<br>
      </div>
      <blockquote type="cite">
        <div>
          <div>Hi,<br>
          </div>
          <div> <br>
          </div>
          <div> I was able to reproduce the issue with 3.0.5 with these
            settings:<br>
          </div>
          <div> <br>
          </div>
          <div> unixhierarchysep: yes<br>
          </div>
          <div> altnamespace: no<br>
          </div>
          <div> crossdomains: no<br>
          </div>
          <div> <br>
          </div>
          <div> Key factor is unixhierarchysep on. (crossdomains is a
            special case. altnamespace on/off only looks different.)<br>
          </div>
          <div> <br>
          </div>
          <div> I did a lot of debugging and found out the following:<br>
          </div>
          <div> <br>
          </div>
          <div> 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.<br>
          </div>
          <div> <br>
          </div>
          <div> 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.<br>
          </div>
          <div> <br>
          </div>
          <div> Example:<br>
          </div>
          <div> <br>
          </div>
          <div> . LIST "" "user/%"<br>
          </div>
          <div> * LIST (\HasChildren) "/" user/bbb<br>
          </div>
          <div> . OK Completed (0.000 secs 4 calls)<br>
          </div>
          <div> . LIST "" "user/bbb/sub01"<br>
          </div>
          <div> . OK Completed (0.000 secs)<br>
          </div>
          <div> <br>
          </div>
          <div> In this case cyrus searches with domainpat:
            user.bbb/sub01/subsub01<br>
          </div>
          <div> <br>
          </div>
          <div> The prefix is previously generated from a variable
            called commonpat, which is used only for this specific
            search.<br>
          </div>
          <div> <br>
          </div>
          <div> So I fixed it there with this patch:<br>
          </div>
          <div> <br>
          </div>
          <div> --- cyrus-imapd-3.0.5/imap/mboxlist.c.orig    2018-04-12
            13:12:47.633956338 +0200<br>
          </div>
          <div> +++ cyrus-imapd-3.0.5/imap/mboxlist.c    2018-05-30
            10:56:44.255724710 +0200<br>
          </div>
          <div> @@ -2774,6 +2774,10 @@<br>
          </div>
          <div>              const char *pat = strarray_nth(patterns,
            i);<br>
          </div>
          <div>              if (pat[prefixlen] != c) break;<br>
          </div>
          <div>          }<br>
          </div>
          <div> +        if (rock->namespace->hier_sep == '/') {<br>
          </div>
          <div> +            if (c == '/') c = '.';<br>
          </div>
          <div> +            else if (c == '.') c = DOTCHAR;<br>
          </div>
          <div> +        }<br>
          </div>
          <div>          if (i < patterns->count) break;<br>
          </div>
          <div>          if (c == '*' || c == '%' || c == '?') break;<br>
          </div>
          <div>          commonpat[prefixlen] = c;<br>
          </div>
          <div> <br>
          </div>
          <div> <br>
          </div>
          <div> Now for the example above the search pattern is
            user.bbb.sub01 and the submailbox is returned correctly.<br>
          </div>
          <div> <br>
          </div>
          <div> . LIST "" "user/%"<br>
          </div>
          <div> * LIST (\HasChildren) "/" user/bbb<br>
          </div>
          <div> . OK Completed (0.000 secs 4 calls)<br>
          </div>
          <div> . LIST "" "user/bbb/sub01"<br>
          </div>
          <div> * LIST (\HasChildren) "/" user/bbb/sub01<br>
          </div>
          <div> . OK Completed (0.000 secs 2 calls)<br>
          </div>
          <div> . LIST "" "user/bbb/%"<br>
          </div>
          <div> * LIST (\HasChildren) "/" user/bbb/sub01<br>
          </div>
          <div> * LIST (\HasNoChildren) "/" user/bbb/sub.dot01<br>
          </div>
          <div> . OK Completed (0.000 secs 3 calls)<br>
          </div>
          <div> . SUBSCRIBE "user/bbb/sub01"<br>
          </div>
          <div> . OK Completed<br>
          </div>
          <div> . LSUB "" "user/*"<br>
          </div>
          <div> * LSUB () "/" user/bbb/sub01<br>
          </div>
          <div> . OK Completed (0.000 secs 1 calls)<br>
          </div>
          <div> <br>
          </div>
          <div> The patch works fine in my test environment and I see no
            caveats yet. I would be very nice if someone could check it
            :-)<br>
          </div>
          <div> <br>
          </div>
          <div> Best regards,<br>
          </div>
          <div> Edda<br>
          </div>
          <div> <br>
          </div>
          <div> <br>
          </div>
          <div> <br>
          </div>
          <div> <br>
          </div>
          <div> Am 15.05.18 um 10:37 schrieb <a
              href="mailto:marco@nucleus.it" moz-do-not-send="true">marco@nucleus.it</a>:<br>
          </div>
        </div>
        <blockquote type="cite"
          cite="mid:20180515103703.3ad4051d@lobo.lobo.dom">
          <pre>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


</pre>
          <div><br>
          </div>
          <div><br>
          </div>
          <pre>----
Cyrus Home Page: <a href="http://www.cyrusimap.org/" moz-do-not-send="true">http://www.cyrusimap.org/</a>
List Archives/Info: <a href="http://lists.andrew.cmu.edu/pipermail/info-cyrus/" moz-do-not-send="true">http://lists.andrew.cmu.edu/pipermail/info-cyrus/</a>
To Unsubscribe:
<a href="https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus" moz-do-not-send="true">https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus</a>
</pre>
        </blockquote>
        <p><br>
        </p>
        <div>----<br>
        </div>
        <div>Cyrus Home Page: <a href="http://www.cyrusimap.org/"
            moz-do-not-send="true">http://www.cyrusimap.org/</a><br>
        </div>
        <div>List Archives/Info: <a
            href="http://lists.andrew.cmu.edu/pipermail/info-cyrus/"
            moz-do-not-send="true">http://lists.andrew.cmu.edu/pipermail/info-cyrus/</a><br>
        </div>
        <div>To Unsubscribe:<br>
        </div>
        <div><a
            href="https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus"
            moz-do-not-send="true">https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus</a><br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <!--'"--><br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">----
Cyrus Home Page: <a class="moz-txt-link-freetext" href="http://www.cyrusimap.org/">http://www.cyrusimap.org/</a>
List Archives/Info: <a class="moz-txt-link-freetext" href="http://lists.andrew.cmu.edu/pipermail/info-cyrus/">http://lists.andrew.cmu.edu/pipermail/info-cyrus/</a>
To Unsubscribe:
<a class="moz-txt-link-freetext" href="https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus">https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus</a></pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>