While experimenting a bit, I found that for some reason, locking indexes with flock is problematic, but only if user is taken from passwd-file. The host system is openbsd 3.9, dovecot's configuration is added at the bottom.
Authentication is from two places - first from mentioned passwd-file, then from passwd file using bsdauth (in this case, there're no problems with flock). So, if a user is i.e.:
test@domain.tld:{plain}test:20000:10::/home/regular/test::userdb_mail=maildir:~/Maildir
Then the mail client will timeout (thunderbird in this case), and dovecot will leave following info in the logs:
Mar 15 11:13:38 rasengan dovecot: IMAP(test@domain.tld): Effective uid=20000, gid=10, home=/home/regular/test Mar 15 11:13:38 rasengan dovecot: IMAP(test@domain.tld): maildir: data=~/Maildir Mar 15 11:13:38 rasengan dovecot: IMAP(test@domain.tld): maildir: root=~/Maildir, index=~/Maildir, control=, inbox= Mar 15 11:15:38 rasengan dovecot: IMAP(test@domain.tld): Timeout while waiting for lock for transaction log file /home/regular/test/Maildir/dovecot.index.log
Happens both if in maildir and mbox (userdb_mail=mbox:~/mail:INBOX=/home/regular/test/mbx) cases.
Locking through dotlocks or fcntl works well in all situations (passwd-file or not).
Dovecot 1.0 rc27 OpenBSD 3.9 (stable), i386
Dovecot config (dovecot -n):
# /etc/dovecot.conf 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 verbose_proctitle: yes first_valid_uid: 1999 first_valid_gid: 10 mail_location: mbox:~/Mail:INBOX=/var/mail/%u mail_debug: yes lock_method: flock maildir_copy_with_hardlinks: yes mbox_read_locks: flock mbox_write_locks: flock 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: verbose: yes debug: yes passdb: driver: passwd-file args: /etc/dovecot.passwd passdb: driver: bsdauth userdb: driver: passwd-file args: /etc/dovecot.passwd userdb: driver: passwd
/etc/dovecot.passwd is just a single line:
test@domain.tld:{plain}test:20000:10::/home/regular/test::userdb_mail=maildir:~/Maildir