Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have Dovecot v2.0.11 installed on a FreeBSD server and the user lookups for incoming email addresses are failing, but lookups for system users is successful.

Dovecot is setup to use system users, so my dovecot.conf has

 userdb {
  driver = passwd


passdb {
  driver = passwd

I have auth debug enabled.

For example, I have a user called webmaster, and using doveadm user for "webmaster" works as follows:

#doveadm user webmaster
userdb: webmaster
  system_groups_user: webmaster
  uid       : 1020
  gid       : 1020
  home      : /home/webmaster

However using doveadm user to lookup fails as follows:

# doveadm user
userdb lookup: user doesn't exist

This is resulting in incoming mail for to bounce with an "unknown user" error.

Here's the failure logged in /var/log/maillog:

Apr 16 20:13:35 www dovecot: auth: passwd( unknown user

Here's the failure logged in /var/log/debug.log:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd( lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND  1

The users and their home directories were imported from another server and the users were setup using the vipw tool. I'm sure there's someting I missed on the import that's not "linking" the system user with the dovecot lookup.

Any ideas about what that something may be?

EDIT: Using BillThor's advice, I updated dovecot.conf as follows:

#doveconf -n passdb userdb
passdb {
  args = username_format=%n
  driver = passwd
userdb {
  args = username_format=%n
  driver = passwd

However, now, doveadm user fails in a different fashion:

#doveadm user
doveadm(root): Error: userdb lookup( Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for

And, it no longer works for users without a domain:

#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster

When I get the above messages, the following is in /var/log/maillog:

Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling
share|improve this question

migrated from Apr 16 '11 at 20:49

This question came from our site for computer enthusiasts and power users.

up vote 11 down vote accepted

Userids in dovecot using passdb don't include the domain. The userid the user should use is the local part, not the full email address.

The checks that are passing and failing are working as expected. Setting auth_username_format=%n before the password db definition does work. The domain is not validated though.

share|improve this answer
Thank you for the reply, but that doesn't work, either. I've edited my question with the updated results. – Coleman Apr 17 '11 at 17:05
@Coleman: Found a working solution for Dovecot 1.2. Should work for Dovecot 2 as well. See edit to my response. Found the solution in default configuration file for ubuntu. – BillThor Apr 17 '11 at 17:44
Thank you! That solved it!!! – Coleman Apr 17 '11 at 18:24

I am using Ubuntu Server 12.04 and I tried the above solutions. However, I found that simplest and easiest way was in 10-auth.conf to set

auth_username_format = %n

I use PAM for the authentication which is the default in Ubuntu 12.04.

share|improve this answer

I suspect that Dovecot 2.1 either broke this solution or has changed the expected behavior.

I've traced the same authorization error to the userdb:

userdb {
  driver = passwd

When a local user (non-virtual) receives an email via exim->lmtp it includes the domain. Defining auth_username_format=%Ln does fix local delivery, but it breaks virtual deliveries. The offered fix of adding args = username_format seems to be ignored:

userdb {
  driver = passwd
  args = username_format=%n

and the logs include a warning

Apr  4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting

Interestingly, using passwd-file does work, but auth is mad that the passwd file is owned by root.

userdb {
  driver = passwd-file
  args = username_format=%n /etc/passwd

Apr  4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr  4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.