This documentation is for Dovecot v1.x, see wiki2 for v2.x documentation.

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 and checkpassword passdbs.

Prefetch basically works by requiring that the passdb returns the userdb information in 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 deliver, 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 userdb instead of prefetch.

SQL example

dovecot.conf:

passdb sql {
  args = /etc/dovecot-sql.conf
}
userdb prefetch {
}
# The userdb below is used only by deliver.
userdb sql {
  args = /etc/dovecot-sql.conf
}

dovecot-sql.conf:

# NOTE: '\' line splitting works only with v1.1+
password_query = SELECT password, \
  home AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \
  FROM users \
  WHERE userid = '%u'

# For deliver:
user_query = SELECT home, uid, gid FROM users WHERE userid = '%u'

LDAP example

dovecot.conf:

passdb ldap {
  args = /etc/dovecot-ldap.conf
}
userdb prefetch {
}
# The userdb below is used only by deliver.
userdb ldap {
  args = /etc/dovecot-ldap.conf
}

dovecot-ldap.conf:

# NOTE: '\' line splitting works only with v1.1+
pass_attrs = uid=user,userPassword=password, \
  homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid

# For deliver:
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid

None: UserDatabase/Prefetch (last edited 2012-04-25 21:49:11 by TimoSirainen)