So I decided to go with Dovecot instead of Cyrus imapd for my new mail server. I followed the instructions in the Dovecot Wiki, but keep getting errors if I file a test message using mail -s test pief@mail.bs3.hollants.com (I highlighted the relevant parts):
Nov 7 11:59:21 zeus postfix/pickup[15411]: 728E05DD3: uid=0 from=Nov 7 11:59:21 zeus postfix/cleanup[15447]: 728E05DD3: message-id=<20121107105921.728E05DD3@mail.bs3.hollants.com> Nov 7 11:59:21 zeus postfix/qmgr[15412]: 728E05DD3: from= , size=443, nrcpt=1 (queue active) Nov 7 11:59:21 zeus dovecot: lmtp(14969): Debug: none: root=, index=, control=, inbox=, alt= Nov 7 11:59:21 zeus dovecot: lmtp(14969): Connect from local Nov 7 11:59:21 zeus dovecot: auth: Debug: Loading modules from directory: /usr/lib64/dovecot/modules/auth Nov 7 11:59:21 zeus dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/modules/auth/libauthdb_ldap.so Nov 7 11:59:21 zeus dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/modules/auth/libdriver_mysql.so Nov 7 11:59:21 zeus dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/modules/auth/libdriver_pgsql.so Nov 7 11:59:21 zeus dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/modules/auth/libdriver_sqlite.so Nov 7 11:59:21 zeus dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/modules/auth/libmech_gssapi.so Nov 7 11:59:21 zeus dovecot: auth: Debug: master in: USER#0111#011pief@mail.bs3.hollants.com#011service=lmtp Nov 7 11:59:21 zeus dovecot: auth: Debug: passwd(pief@mail.bs3.hollants.com): lookup Nov 7 11:59:21 zeus dovecot: auth: passwd(pief@mail.bs3.hollants.com): unknown user Nov 7 11:59:21 zeus dovecot: auth: Debug: master out: NOTFOUND#0111 Nov 7 11:59:21 zeus dovecot: lmtp(14969): Debug: auth input: Nov 7 11:59:21 zeus postfix/lmtp[15451]: 728E05DD3: to= , relay=mail.bs3.hollants.com[private/dovecot-lmtp-in], delay=0.16, delays=0.1/0/0.01/0.05, dsn=5.1.1, status=bounced (host mail.bs3.hollants.com[private/dovecot-lmtp-in] said: 550 5.1.1 User doesn't exist: pief@mail.bs3.hollants.com (in reply to RCPT TO command))
So the error here seems to be that Dovecot does not seem to seperate the username (= the destination mailbox) from the email address it gets supplied by Postfix via LMTP. The same setup works just fine with my old Cyrus-imapd setup. As I verified with socat, Postfix feeds Cyrus email addresses, too, and it works there, so it can’t be Postfix that’s misconfigured.
Here’s my Dovecot configuration (taken from doveconf -n):
# 2.0.16: /etc/dovecot/dovecot.conf
# OS: Linux 3.1.10-1.16-desktop x86_64 openSUSE 12.1 (x86_64) ext4
auth_debug = yes
auth_verbose = yes
hostname = mail.bs3.hollants.com
mail_debug = yes
mail_location = mdbox:/var/spool/mail/%u
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 ihave
passdb {
driver = pam
}
plugin {
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
}
protocols = imap lmtp
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0660
user = postfix
}
}
service imap-login {
inet_listener imap {
port = 0
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0660
user = postfix
}
}
ssl_cert = </etc/ssl/certs/zeus.bs3.hollants.com-crt.pem
ssl_key = </etc/ssl/private/zeus.bs3.hollants.com-key.pem
userdb {
driver = passwd
}
verbose_proctitle = yes
UPDATE: It turns out that you must explicitly specify
auth_username_format = %Ln
so Dovecot strips aways the domain part of the email address before passing it on to the PAM password database. This is most probably due to the fact that other password databases may allow for authentication by complete email addresses.
Thanks, this is just what I was looking for!
auth_username_format = %Ln
…in 10-auth.conf did the trick for me!
Sam