[Dovecot] best choice of user database file to work with postfix?

Brian Candler B.Candler at pobox.com
Wed Apr 21 18:03:48 EEST 2010


On Wed, Apr 21, 2010 at 10:32:36AM -0400, Phil Howard wrote:
> Ideal would be a one-file solution, which can be managed by
> text editing or simple command line tools.  But what I want is ONE file that
> both Postfix (for valid recipients) and Dovecot (for user login
> authentication) can use together.  An alternative is some way to get Postfix
> to go through Dovecot to query for users (at the time of mail arriving on
> SMTP so it doesn't queue anything that would later be rejected).  This is a
> smallish setup on one server, with probably a max of 50 to 100 users and 50
> or so role account mailboxes over the next year or two.  Any
> recommendations?

If you can't get postfix to read dovecot's virtual users, try switching to
exim.  I found exim can be configured to read pretty much any format you
like.  For example, I got exim to read courier-imap's userdb.dat files:

# Lookup in userdb. If the address lookup succeeds, then we set
# address_data. If it's forced to fail, we'll drop through to the next
# router. If a temporary error occurs (e.g. file not readable), we'll defer.

reset_address_data:
  driver                = redirect
  address_data          =
  data                  =

userdb_lookup:
  driver                = redirect
  condition             = ${if ! def:address_data}
  address_data          = source=userdb ${sg \
        {${lookup {$local_part@$domain} dbmnz {/path/to/userdb.dat} {$value} \
                {${lookup {@$domain} dbmnz {/path/to/userdb.dat} \
                        {$value} fail }} }} \
        {([^=]+)=([^|]+)\\|?} {\$1=\${quote:\$2\} } }
  # note space between \$2\} and the next }
  data                  =

Then use ${extract {home} {$address_data} ...} to get field "home" from the
userdb entry.

Basically what it's doing is finding the the .dat entry with key user at domain
or @domain (wildcard), finding a value of the form foo=bar|baz=qux and
rewriting it to foo="bar" baz="qux", which the ${extract} function expects.

This sort of coding in exim's configure file is not pretty, but it works
well.

With only 50-100 users you'd be fine with a plain text file rather (lsearch)
than a .dat

HTH,

Brian.


More information about the dovecot mailing list