使用username @ domain格式时,Dovecot用户查找失败

我在FreeBSD服务器上安装了Dovecot v2.0.11,用户查找传入的电子邮件地址失败,但系统用户查询成功。

Dovecot被设置为使用系统用户,所以我的dovecot.conf

userdb { driver = passwd } 

 passdb { driver = passwd } 

我有authdebugging启用。

例如,我有一个叫做站长的用户,使用“站长”的doveadm用户的工作如下:

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

但是,使用doveadm用户来查找[email protected]失败,如下所示:

 # doveadm user [email protected] userdb lookup: user [email protected] doesn't exist 

这会导致[email protected]的传入邮件以“未知用户”错误反弹。

以下是/ var / log / maillog中logging的故障:

 Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): unknown user 

以下是/var/log/debug.log中logging的故障:

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

用户及其主目录是从另一台服务器导入的,用户使用vipw工具进行安装。 我敢肯定,有一些我错过了导入不是“链接”系统用户与鸽舍查找。

任何想法可能是什么?

编辑:使用BillThor的build议,我更新了dovecot.conf如下:

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

但是,现在,doveadm用户以不同的方式失败:

 #doveadm user [email protected] doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly doveadm(root): Fatal: userdb lookup failed for [email protected] 

而且,它不再适用于没有域名的用户:

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

当我得到上面的消息时,以下是在/ 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 

dovecot中使用passdb的userid不包含域。 用户应该使用的用户标识是本地部分,而不是完整的电子邮件地址。

正在通过和失败的支票正在按预期工作。 设置auth_username_format=%n在密码db定义不起作用。 虽然域没有被validation。

我正在使用Ubuntu服务器12.04,我尝试了上述解决scheme。 但是,我发现最简单和最简单的方法是在10-auth.conf中设置

 auth_username_format = %n 

我使用PAM进行身份validation,这是Ubuntu 12.04中的默认设置。

我怀疑Dovecot 2.1要么破坏了这个解决scheme,要么改变了预期的行为。

我跟踪到相同的授权错误的userdb:

 userdb { driver = passwd } 

当本地用户(非虚拟)通过exim-> lmtp收到一封电子邮件时,它包含该域。 定义auth_username_format =%Ln会修复本地交付,但会中断虚拟交付。 所提供的添加args = username_format的修复似乎被忽略:

 userdb { driver = passwd args = username_format=%n } 

并且日志包含警告

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

有趣的是,使用passwd文件确实有效 ,但auth很疯狂,passwd文件是由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' 

passwd-file: Unknown setting: username_format对我来说,原因是额外的空间:

 passdb { driver = passwd-file args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users } 

即我在CRYPT和uesrname之间有两个空格。