Prefetch User Database¶
Prefetch userdb can be used to combine passdb and userdb lookups into a single lookup. It’s usually used with SQL, LDAP Authentication, and CheckPassword passdbs.
Prefetch basically works by requiring that the passdb returns the userdb
information in Password database extra fields
with userdb_
prefixes. For example if a userdb typically returns uid
, gid
and home
fields, the passdb would have to return userdb_uid
, userdb_gid
and
userdb_home
fields.
If you’re using Dovecot LDA or LMTP Server you still need a valid userdb which can be used to locate the users. You can do this by adding a normal SQL/LDAP userdb after the userdb prefetch. The order of definitions is significant. See below for examples.
LDAP: auth_bind=yes
with auth_bind_userdn-template
is incompatible with
prefetch, because no passdb lookup is done then. If you want zero LDAP lookups,
you might want to use Static User Database instead of
prefetch.
SQL example¶
dovecot.conf
:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = prefetch
}
# The userdb below is used only by lda.
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
dovecot-sql.conf.ext
:
password_query = SELECT userid AS user, password, \
home AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \
FROM users \
WHERE userid = '%u'
# For LDA:
user_query = SELECT home, uid, gid FROM users WHERE userid = '%u'
LDAP example¶
dovecot.conf
:
passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}
userdb {
driver = prefetch
}
# The userdb below is used only by LDA.
userdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}
dovecot-ldap.conf.ext
:
pass_attrs = uid=user, userPassword=password, \
homeDirectory=userdb_home, uidNumber=userdb_uid, gidNumber=userdb_gid
# For LDA:
user_attrs = homeDirectory=home, uidNumber=uid, gidNumber=gid