On Mon, 2010-08-09 at 18:26 +0200, Samuel Kvasnica wrote:
if (*str == ns->list->hierarchy_sep || ( mlist && // SK mlist was zero check added !
*str == mlist->escape_char) || *str == '/'){ str_printfa(esc, "%c%02x", mlist->escape_char, *str);
else
}
else{ str_append_c(esc, *str);
}
Was there a reason for this change? yes, I've got segfaults, mlist was zero ! But thats just an "intuitive" patch without understanding what going on...}
http://hg.dovecot.org/dovecot-2.0/rev/ed61aee681b8 should fix that.
i'm just terribly under pressure to get the setup working
Have you considered on getting rid of listescape plugin and simply using :LAYOUT=fs? :) That should be more reliable..
actually, the LSUB command is totaly broken with listescape for subfolders when using wildcards, and I cannot find the reason why. Not only in shared area, also in INBOX root. Really got lost in the pointer jungle, not sure how to debug further.
no listescape example:
. lsub "" "Public/public/%"
- LSUB () "/" "Public/public/ccc" . OK Lsub completed.
This looks like a public namespace, not private namespace? Anyway I see that the problem with shared/public mailboxes has to do with ACL plugin and listescape plugin interaction.
Problem 1) Rebuilding dovecot-acl-list:
ACL plugin sees "foo.bar" mailbox name and then tries to look for its dovecot-acl file without going through listescape plugin, because it never calls mailbox_alloc().
In acllist_append() you could try replacing mail_namespace_get_storage_name() call with mailbox_alloc() and then using mailbox_get_name(). Then it should write the escaped name to dovecot-acl-list file.
Problem 2) Reading dovecot-acl-list file:
In acl_mailbox_try_list_fast() it reads the dovecot-acl-list with escaped names, but acl_mailbox_list_iter_next_info() compares them with unescaped names.
Maybe in 1) case it should just keep the mailbox names in escaped form in dovecot-acl-list file so 2) wouldn't need to be changed.. In 1) case then you'd still need mailbox_alloc() and pass the escaped name to acl_object_init_from_name() so that it can read the right dovecot-acl file.
I don't really want to try to fix this for v2.0. Seems like a pretty ugly mess that would be fixed much more easily by some API changes.