使Postfix本地(8)在LDAP中断tempfail

我有一个Unix系统,用户帐户只存在于LDAP中。 我用nscd使用libnss-ldapd来做到这一点,它工作得很好。 正常情况下,Postfix按预期发送邮件。

但是,如果LDAP服务器closures,并且用户映射没有完全caching在nscd中,用户似乎不存在(即, getent passwd username没有返回结果),因此Postfix的本地(8)硬盘将电子邮件与“未知用户“错误。 这非常糟糕

目前的configuration包括:

 smtpd_smtpd_reject_unlisted_recipient = yes local_recipient_maps = $alias_maps, ldap:/etc/postfix/ldap-passwd.cf mailbox_transport_maps = ldap:/etc/postfix/ldap-passwd.cf 

当LDAP服务不可用时,邮件通过SMTP正确进入tempfails。 但是,源自该主机的邮件(例如使用邮件(1))不会。

 Apr 25 15:25:33 testmail postfix/local[5972]: warning: dict_ldap_lookup: Search error -1: Can't contact LDAP server Apr 25 15:25:33 testmail postfix/local[5972]: 29B4847DB: to=<ENVELOPE_TO_ADDRESS>, orig_to=<ENVELOPE_FROM_ADDRESS>, relay=local, delay=0.12, delays=0.01/0/0/0.11, dsn=5.1.1, status=bounced (unknown user: "ENVELOPE_TO_ADDRESS_LOCALPART") 

我相当肯定地图configuration正确,因为如果LDAP服务可用,所有东西都能正常工作,包括NSS由于nslcd停止而无法看到LDAP地图的情况。 将mailbox_transport_maps设置为默认值(空)会产生相同的结果,除非没有LDAP连接错误。 如果使用代理映射(8),则没有改进。

如何让Postfix在LDAPclosures时推迟(而不是拒绝)传入邮件?


自从首次提出这个问题以来,这个问题被大量的编辑了 最初的问题是当LDAP不可用时,如何制作smtpd(8)tempfail; 事实certificate它已经这样做了。 真正的问题是在交付过程的后期。


可能相关:

  • http://archives.neohapsis.com/archives/postfix/2000-02/1121.html
  • http://www.irbs.net/internet/postfix/0602/1501.html
  • http://readlist.com/lists/postfix.org/postfix-users/14/72278.html
  • 如何指示Postfix等到LDAP服务器再次回来?

原来是在后缀中的一个错误 。 作者在2.8.4,2.7.5,2.6.11和2.5.14 版本上应用了这个修补程序。

修复了Postfix版本:

  • 本地(8)传递代理忽略mailbox_command_maps,mailbox_transport_maps,fallback_transport_maps中的表查找错误以及(将邮件反弹到别名时)别名所有者查找。