Originally I've thought that this is related to INBOX field, but it turned out it happens only when you specify mbox.
Consider following passwd-file:
testms::10000:10000:imap,,,:/home/vmail/ppgk.com.pl/testms/./::userdb_mail=mbox:~/Mail:INBOX=/home/vmail/ppgk.com.pl/%u/inbox
or following line from userdb static:
args = uid=10000 gid=10000 home=/home/vmail/ppgk.com.pl/%u/./ mail=mbox:~/Mail:INBOX=/home/vmail/ppgk.com.pl/%u/inbox
In both cases, in user's directory, there will be an empty ~/Mail directory created, in addition to Mail and inbox. No idea about how sql or ldap would behave here, but global mail_location from dovecot.conf doesn't suffer from this issue (~ was expanded properly in ktrace dump).
Chroot specification (/./) doesn't matter here.
If I change mbox:~/Mail:INBOX=..... to
mbox:/home/vmail/ppgk.com.pl/%u/Mail:INBOX=~/inbox
then everything will be fine - no extra '~' dir. Thus my assumption it's not INBOX field related.
Looking at ktrace, it seems that imap process is checking for the existence of ~/Mail, without expanding tilde. Then quite a bit later, it creates Mail as a "side effect" of creating Trash subdirectory.
Relevant fragments:
1853 imap CALL mkdir(0x8a79b100,0x1f8) 1853 imap NAMI "~/Mail" 1853 imap RET mkdir -1 errno 2 No such file or directory 1853 imap CALL sigprocmask(0x1,0xffffffff) 1853 imap RET sigprocmask 0 1853 imap CALL mprotect(0x3c0ec000,0x1000,0x3) 1853 imap RET mprotect 0 1853 imap CALL mprotect(0x3c0ec000,0x1000,0x1) 1853 imap RET mprotect 0 1853 imap CALL sigprocmask(0x3,0) 1853 imap RET sigprocmask -65793/0xfffefeff 1853 imap CALL mkdir(0x8a79b108,0x1f8) 1853 imap NAMI "~" 1853 imap RET mkdir 0 1853 imap CALL mkdir(0x8a79b100,0x1f8) 1853 imap NAMI "~/Mail" 1853 imap RET mkdir 0
and
1853 imap CALL stat(0x8a79b180,0xcfbeb5c0) 1853 imap NAMI "/home/vmail/ppgk.com.pl/testms/Mail/Trash" 1853 imap RET stat -1 errno 2 No such file or directory 1853 imap CALL stat(0x8a79b1b0,0xcfbeb600) 1853 imap NAMI "/home/vmail/ppgk.com.pl/testms/Mail/Trash" 1853 imap RET stat -1 errno 2 No such file or directory 1853 imap CALL mkdir(0x8a79b1e0,0x1f8) 1853 imap NAMI "/home/vmail/ppgk.com.pl/testms/Mail" 1853 imap RET mkdir 0 1853 imap CALL open(0x8a79b1b0,0xa02,0x1b0) 1853 imap NAMI "/home/vmail/ppgk.com.pl/testms/Mail/Trash" 1853 imap RET open 7
My configuration is prtty much the same as previously:
openbsd 3.9, i386, dovecot 1.0-rc27 (latest nightly, but the same happened in stock 1.0rc27)
dovecot.userdb: testms::10000:10000:imap,,,:/home/vmail/ppgk.com.pl/testms/./::userdb_mail=mbox:~/Mail:INBOX=/home/vmail/ppgk.com.pl/%u/inbox
dovecot.passdb: testms:{PLAIN}test:
base_dir: /var/dovecot/ protocols: imap imaps pop3 pop3s ssl_listen: * ssl_ca_file: /etc/ssl/cert_bundle.pem ssl_cert_file: /etc/ssl/ca_ppgk/certs/fetch_crt.pem ssl_key_file: /etc/ssl/ca_ppgk/private/fetch_key.pem verbose_ssl: yes login_dir: /var/dovecot/login login_executable(default): /usr/local/libexec/dovecot/imap-login login_executable(imap): /usr/local/libexec/dovecot/imap-login login_executable(pop3): /usr/local/libexec/dovecot/pop3-login login_greeting: Dovecot IMAP server ready. login_greeting_capability(default): yes login_greeting_capability(imap): yes login_greeting_capability(pop3): no valid_chroot_dirs: /var/mail:/home/regular:/home/vmail verbose_proctitle: yes first_valid_uid: 1999 first_valid_gid: 10 mail_location: mbox:~/Mail:INBOX=/var/mail/%u mail_debug: yes fsync_disable: yes lock_method: fcntl maildir_copy_with_hardlinks: yes mbox_read_locks: fcntl mbox_write_locks: fcntl mail_executable(default): /usr/local/libexec/dovecot/imap mail_executable(imap): /usr/local/libexec/dovecot/imap mail_executable(pop3): /usr/local/libexec/dovecot/pop3 mail_plugin_dir(default): /usr/local/lib/dovecot/imap mail_plugin_dir(imap): /usr/local/lib/dovecot/imap mail_plugin_dir(pop3): /usr/local/lib/dovecot/pop3 imap_client_workarounds(default): outlook-idle delay-newmail imap_client_workarounds(imap): outlook-idle delay-newmail imap_client_workarounds(pop3): outlook-idle pop3_uidl_format(default): pop3_uidl_format(imap): pop3_uidl_format(pop3): %08Xu%08Xv pop3_client_workarounds(default): pop3_client_workarounds(imap): pop3_client_workarounds(pop3): outlook-no-nuls oe-ns-eoh auth default: mechanisms: plain login verbose: yes debug: yes passdb: driver: passwd-file args: /etc/dovecot.passdb passdb: driver: bsdauth userdb: driver: passwd-file args: /etc/dovecot.userdb userdb: driver: passwd socket: type: listen client: path: /var/spool/postfix/private/auth mode: 432 user: postfix group: postfix master: