Hugh Bragg
2016-Feb-19 08:51 UTC
Bug Report: %% variables not expanded properly with shared namespace using . as separator
I think this is a bug. I'd expect that location %% variables are translated the same way % variables are interpreted, but apparently this isn't the case. virtual folders work fine, but my shared folders fail because of the . in the domain name. What I get is the following: # doveadm acl debug -u user1 at domain1.com.au shared.user2 at domain2.com.au doveadm(user1 at domain1.com.au): Error: Mailbox 'com.au' in namespace 'shared.user2 at domain2.' doesn't exist in /var/mail/vhosts/domain2/user2/mail/.com.au I know there is a similar report for usernames, but these should be interpreted at the top level and not inside the maildir. I hope this is enough info. Let me know if I can supply any further information. Hugh Here is my config: # dovecot -n # 2.2.21 (5345f22): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.11 (6ddf62b87f60+) # OS: Linux 4.3.5-300.fc23.x86_64 x86_64 Fedora release 23 (Twenty Three) auth_mechanisms = plain login auth_socket_path = /var/run/dovecot/auth-userdb imap_client_workarounds = tb-extra-mailbox-sep listen = * log_path = /var/log/dovecot.log mail_access_groups = mail, vmail mail_home = /var/mail/vmail/%d/%n mail_location = maildir:~/mail mail_plugins = virtual, acl managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart mbox_write_locks = fcntl namespace inbox { inbox = yes location mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix } namespace others { list = children location maildir:/var/mail/vhosts/%%d/%%n/mail:INDEX=/var/mail/vhosts/%d/%n/shared/%%u prefix = shared.%%u. separator = . subscriptions = yes type = shared } namespace virtual { location = virtual:/var/mail/vhosts/%d/%n/virtual prefix = virtual. separator = . } passdb { args = scheme=PLAIN username_format=%u /etc/dovecot/dovecot-users driver = passwd-file } plugin { acl = vfile acl_shared_dict = file:/var/mail/vhosts/shared-mailboxes.db sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_global_dir = /var/mail/vhosts/sieve-global } protocols = imap lmtp sieve service auth-worker { user = vmail } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } unix_listener auth-userdb { group = vmail mode = 0660 user = vmail } } service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 0 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service managesieve-login { inet_listener sieve { port = 4190 } } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 0 } } ssl = required ssl_cert = </etc/pki/dovecot/certs/hjbmx.ddns.net.cert.pem ssl_cipher_list = PROFILE=SYSTEM ssl_key = </etc/pki/dovecot/private/hjbmx.ddns.net.key.pem userdb { args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n driver = static } protocol lmtp { mail_plugins = virtual, acl , sieve } protocol lda { mail_plugins = virtual, acl , sieve } protocol imap { mail_plugins = virtual, acl , imap_acl }
Steffen Kaiser
2016-Feb-19 10:09 UTC
Bug Report: %% variables not expanded properly with shared namespace using . as separator
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Fri, 19 Feb 2016, Hugh Bragg wrote:> Subject: Bug Report: %% variables not expanded properly with shared namespace > using . as separator > > I think this is a bug. > I'd expect that location %% variables are translated the same way % > variables are interpreted, but apparently this isn't the case. > virtual folders work fine, but my shared folders fail because of the . > in the domain name. > What I get is the following: > > # doveadm acl debug -u user1 at domain1.com.au shared.user2 at domain2.com.au > doveadm(user1 at domain1.com.au): Error: Mailbox 'com.au' in namespace > 'shared.user2 at domain2.' doesn't exist in > /var/mail/vhosts/domain2/user2/mail/.com.au> namespace others { > list = children > location > maildir:/var/mail/vhosts/%%d/%%n/mail:INDEX=/var/mail/vhosts/%d/%n/shared/%%u > prefix = shared.%%u.The mailbox Trash of user user1 at domain1.com.au would spell as IMAP token: shared.user1 at domain1.com.au.Trash Because . is the hierarchie separator, Dovecot must break the string at the 2nd ., because it cannot determine which dot comes from a domain name and which is a separator. You need another hierarchie separator for all your namespaces. http://wiki2.dovecot.org/Namespaces?highlight=%28separator%29 "IMAP clients, Sieve scripts and many parts of Dovecot configuration use the configured separator when referring to mailboxes. This means that if you change the separator, you may break things." Meaning e.g. the fileinto in Sieve scripts need to use the other separator, too.> separator = . > subscriptions = yes > type = shared > } > namespace virtual { > location = virtual:/var/mail/vhosts/%d/%n/virtual > prefix = virtual. > separator = . > } > passdb { > args = scheme=PLAIN username_format=%u /etc/dovecot/dovecot-users > driver = passwd-file > } > plugin { > acl = vfile > acl_shared_dict = file:/var/mail/vhosts/shared-mailboxes.db > sieve = ~/.dovecot.sieve > sieve_dir = ~/sieve > sieve_global_dir = /var/mail/vhosts/sieve-global > } > protocols = imap lmtp sieve > service auth-worker { > user = vmail > } > service auth { > unix_listener /var/spool/postfix/private/auth { > group = postfix > mode = 0660 > user = postfix > } > unix_listener auth-userdb { > group = vmail > mode = 0660 > user = vmail > } > } > service imap-login { > inet_listener imap { > port = 143 > } > inet_listener imaps { > port = 0 > ssl = yes > } > } > service lmtp { > unix_listener /var/spool/postfix/private/dovecot-lmtp { > group = postfix > mode = 0600 > user = postfix > } > } > service managesieve-login { > inet_listener sieve { > port = 4190 > } > } > service pop3-login { > inet_listener pop3 { > port = 0 > } > inet_listener pop3s { > port = 0 > } > } > ssl = required > ssl_cert = </etc/pki/dovecot/certs/hjbmx.ddns.net.cert.pem > ssl_cipher_list = PROFILE=SYSTEM > ssl_key = </etc/pki/dovecot/private/hjbmx.ddns.net.key.pem > userdb { > args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n > driver = static > } > protocol lmtp { > mail_plugins = virtual, acl , sieve > } > protocol lda { > mail_plugins = virtual, acl , sieve > } > protocol imap { > mail_plugins = virtual, acl , imap_acl > } >- -- Steffen Kaiser -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEVAwUBVsbp6Xz1H7kL/d9rAQJumAf/YtIXGM1t4WalzhrjP5azXEDXa1twsRdY hHTycmmUpsmXlMS4Ol3kT3u/YpEBk/VMMqPay8gMuKD9rQ69wAqH9xIt47mWfwFG NsBGbDeoCePFmdtZ+nix2RkWApNL3JDONIF0UtpUHvFj7QJrW+jqVExdBeXdijGv rkbUr8fZl+4AM8m6CG07opTgxcgF6mFlakNe022uYSJdvH7UUY/fjJE/n+pj6lQ4 FUJ2RKSJWflJif8Klfs91iHJ9X4RVloY/WNJj52HWkthSgz3Xc9O1GTM8D1U24ZG rZHkdDtkryC709NKqWJqnQt3ejQ1KP7mGy7zY2we+wkv8SdajbagQA==dNkH -----END PGP SIGNATURE-----
Hugh Bragg
2016-Feb-19 13:38 UTC
Bug Report: %% variables not expanded properly with shared namespace using . as separator
On 19/02/2016 8:09 PM, Steffen Kaiser wrote:> On Fri, 19 Feb 2016, Hugh Bragg wrote: > > > Subject: Bug Report: %% variables not expanded properly with shared > namespace > > using . as separator > > > I think this is a bug. > > I'd expect that location %% variables are translated the same way % > > variables are interpreted, but apparently this isn't the case. > > virtual folders work fine, but my shared folders fail because of the . > > in the domain name. > > What I get is the following: > > > # doveadm acl debug -u user1 at domain1.com.au shared.user2 at domain2.com.au > > doveadm(user1 at domain1.com.au): Error: Mailbox 'com.au' in namespace > > 'shared.user2 at domain2.' doesn't exist in > > /var/mail/vhosts/domain2/user2/mail/.com.au > > > namespace others { > > list = children > > location > > > maildir:/var/mail/vhosts/%%d/%%n/mail:INDEX=/var/mail/vhosts/%d/%n/shared/%%u > > prefix = shared.%%u. > > The mailbox Trash of user user1 at domain1.com.au would spell as IMAP token: > > shared.user1 at domain1.com.au.Trash > > Because . is the hierarchie separator, Dovecot must break the string > at the 2nd ., because it cannot determine which dot comes from a > domain name and which is a separator. >That's much is clear and that's the issue. The Virtual can achieve this, so why don't these plugins use the mail_home, mail_location, %% variable which are used to create the string? It looks like when the string representing the mailbox if constructed, all the information is available, but that the plugin doesn't use this and parses the string again. I suppose the virtual plugin handles this differently. I can't tell if it's a sequencing issue or and configuration access problem.> -- Steffen Kaiser- Hugh