Você usa o nscd, o daemon de armazenamento em cache? Ele pode ter um cache negativo do usuário, e nesse caso, executar /usr/sbin/nscd -i passwd
invalidaria o cache e causaria uma nova busca.
getent passwd
funciona porque ignora o nscd.
Eu instalei o nss_ldap, editei o nsswitch.conf para usar o ldap; aqui está meu conteúdo /etc/ldap.conf
:
host ldap.<mycompany>.com
base o=<mycompany>,c=<cc>
bind_policy soft
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2
Quando faço
getent passwd
Tenho uma visão correta de todos os nomes de usuários da empresa. Mas se eu fizer
getent passwd <some user>
com um nome de usuário válido conhecido, nada é retornado, como se o usuário não existisse. (funciona para usuários locais não-ldap)
Se eu compilar o nss_ldap com a depuração ativada, o primeiro imprimirá muitas mensagens de depuração como: nss_ldap: == > do_result nss_ldap: < == do_result nss_ldap: == > _nss_ldap_assign_userpassword nss_ldap: < == _nss_ldap_assign_userpassword
mas o último não mostra nada. Não há nada no syslog também.
Isso me intriga bastante. Onde devo começar a procurar o problema? alguma idéia de onde poderia ser?
O cliente está executando o Gentoo linux, nss_ldap-264. O servidor LDAP está fora do meu controle.
Tags ldap