Resolvido - a versão do LDAP estava ausente. mailbox_maps.cf precisa de uma entrada adicional
version = 3
porque o servidor LDAP não permite LDAPv2.
Eu configurei o acesso LDAP com o postfix.
ldapsearch -D "cn=postfix,ou=users,ou=system,[domain]" -w postfix -b "ou=users,ou=people,[domain]" -s sub "(&(objectclass=inetOrgPerson)(mail=[mailaddr]))"
entrega a entrada correta. O arquivo de configuração do LDAP se parece com
root@server2:/etc/postfix/ldap# cat mailbox_maps.cf
server_host = localhost
search_base = ou=users,ou=people,[domain]
scope = sub
bind = yes
bind_dn = cn=postfix,ou=users,ou=system,[domain]
bind_pw = postfix
query_filter = (&(objectclass=inetOrgPerson)(mail=%s))
result_attribute = uid
debug_level = 2
O bind_dn e o bind_pw devem ser os mesmos que usei acima com o ldapsearch. No entanto, chamar postmap não funciona:
root@server2:/etc/postfix/ldap# postmap -q [mailaddr] ldap:/etc/postfix/ldap/mailbox_maps.cf
postmap: warning: dict_ldap_lookup: /etc/postfix/ldap/mailbox_maps.cf: Search base 'ou=users,ou=people,[domain]' not found: 32: No such object
Se eu alterar a configuração do LDAP, para que os usuários anônimos tenham acesso completo ao LDAP
olcAccess: {-1}to * by * read
então funciona:
root@server2:/etc/postfix/ldap# postmap -q [mailaddr] ldap:/etc/postfix/ldap/mailbox_maps.cf
[user-id]
Mas quando eu restringir esse acesso ao usuário postfix:
olcAccess: {-1}to * by dn="cn=postfix,ou=users,ou=system,[domain]" read by * break
ele não funciona, mas produz o erro impresso acima (embora o ldapsearch funcione, somente o postmap não funciona).
Por que não funciona ao vincular com um DN de postfix? Eu acho que configurar a ACL LDAP para o usuário postfix corretamente, como o comando ldapsearch deve provar. Qual pode ser a razão para esse comportamento?