Multiple Passdb's - Order

Jean-Louis Dupond jean-louis at dupond.be
Fri Aug 1 20:00:03 UTC 2014


Hi,

Today I upgraded my dovecot to a newer version (2.2.9 debian
wheezy-backports)
At that moment I also reconfigured the whole thing a bit nicer.

Now I stumbled on the following issue.

In my configuration I use 2 backends (LDAP & passwd-file).
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
userdb {
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n
  driver = static
}

Now this worked fine before. But if I tested it, LDAP logins worked, and
passwd-file logins failed.

Failed log (user is only in the passwd-file):
Aug 01 21:31:55 auth: Debug: Loading modules from directory:
/usr/lib/dovecot/modules/auth
Aug 01 21:31:55 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_mysql.so
Aug 01 21:31:55 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_pgsql.so
Aug 01 21:31:55 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_sqlite.so
Aug 01 21:31:55 auth: Debug: Loading modules from directory:
/usr/lib/dovecot/modules/auth
Aug 01 21:31:55 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libauthdb_ldap.so
Aug 01 21:31:55 auth: Debug: Read auth token secret from
/var/run/dovecot/auth-token-secret.dat
Aug 01 21:31:55 auth: Debug: passwd-file /etc/dovecot/users: Read 10
users in 0 secs
Aug 01 21:31:55 auth: Debug: auth client connected (pid=5516)
Aug 01 21:31:55 auth: Debug: client in: AUTH    1    PLAIN   
service=imap    secured    session=c34kcZb/uwBbtKLu    lip=xxx   
rip=xxxx    lport=993    rport=52411
Aug 01 21:31:55 auth: Debug: client passdb out: CONT    1   
Aug 01 21:31:55 auth: Debug: client in: CONT    1    xxxxx (previous
base64 data may contain sensitive data)
Aug 01 21:31:55 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
miss
Aug 01 21:31:55 auth: Debug: ldap(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
pass search: base=uid=info at xxx.com,ou=mail,dc=dupie,dc=be scope=subtree
filter=(&(objectClass=posixAccount)(uid=info at xxx.com))
fields=uid,userPassword
Aug 01 21:31:55 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
miss
Aug 01 21:31:55 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
miss
Aug 01 21:31:55 auth: Debug:
passwd-file(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>): lookup:
user=info at xxx.com file=/etc/dovecot/users
Aug 01 21:31:57 auth: Debug: client passdb out: FAIL    1   
user=info at xxx.com    temp
Aug 01 21:31:57 auth: Debug: client in: AUTH    2    PLAIN   
service=imap    secured    session=c34kcZb/uwBbtKLu    lip=xxx   
rip=xxx    lport=993    rport=52411    resp=xxx (previous base64 data
may contain sensitive data)
Aug 01 21:32:01 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
miss
Aug 01 21:32:01 auth: Debug: ldap(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
pass search: base=uid=info at xxx.com,ou=mail,dc=dupie,dc=be scope=subtree
filter=(&(objectClass=posixAccount)(uid=info at xxx.com))
fields=uid,userPassword
Aug 01 21:32:01 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
miss
Aug 01 21:32:01 auth: Debug: cache(info at xxx.com,xxx,<c34kcZb/uwBbtKLu>):
hit: {CRAM-MD5}19192922.....
Aug 01 21:32:03 auth: Debug: client passdb out: FAIL    2   
user=info at xxx.com    temp

As you see it returned a FAIL, but the password was retrieved from the
users file (see the cache hit).

Now I changed the order of the passdb's in my config, to make
passwd-file come first, and then LDAP.
And what happend now, it started working ...

Logs:
Aug 01 21:30:23 auth: Debug: Loading modules from directory:
/usr/lib/dovecot/modules/auth
Aug 01 21:30:23 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_mysql.so
Aug 01 21:30:23 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_pgsql.so
Aug 01 21:30:23 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libdriver_sqlite.so
Aug 01 21:30:23 auth: Debug: Loading modules from directory:
/usr/lib/dovecot/modules/auth
Aug 01 21:30:23 auth: Debug: Module loaded:
/usr/lib/dovecot/modules/auth/libauthdb_ldap.so
Aug 01 21:30:23 auth: Debug: Read auth token secret from
/var/run/dovecot/auth-token-secret.dat
Aug 01 21:30:23 auth: Debug: passwd-file /etc/dovecot/users: Read 10
users in 0 secs
Aug 01 21:30:23 auth: Debug: auth client connected (pid=5459)
Aug 01 21:30:24 auth: Debug: client in: AUTH    1    PLAIN   
service=imap    secured    session=TTm6a5b/swBbtKLu    lip=xxx   
rip=xxx    lport=993    rport=52403
Aug 01 21:30:24 auth: Debug: client passdb out: CONT    1   
Aug 01 21:30:24 auth: Debug: client in: CONT    1    xxxx (previous
base64 data may contain sensitive data)
Aug 01 21:30:24 auth: Debug: cache(info at xxx.com,xxx,<TTm6a5b/swBbtKLu>):
miss
Aug 01 21:30:24 auth: Debug:
passwd-file(info at xxx.com,xxx,<TTm6a5b/swBbtKLu>): lookup:
user=info at xxx.com file=/etc/dovecot/users
Aug 01 21:30:24 auth: Debug: client passdb out: OK    1    user=info at xxx.com
Aug 01 21:30:24 auth: Debug: master in: REQUEST    1973682177    5459   
1    9976303da4c6eb55a008b0cae6ab12a1    session_pid=5462   
request_auth_token
Aug 01 21:30:24 auth: Debug: master userdb out: USER    1973682177   
info at xxx.com    uid=1001    gid=1001    home=/var/vmail/xxx.com/info   
auth_token=31afcf6ff0c5ed5150beb96ad3718cff452badae


The only thing I changed here was the order the passdb backends.

It works fine now, but it not clear to me why the order is so important.
Could somebody explain this? Or is this some bug?

Thanks
Jean-Louis


More information about the dovecot mailing list