Como posso fazer uma consulta complexa com Net :: LDAP de Perl?
Pergunta
Estou tendo problemas para executar uma consulta complexa contra o nosso servidor LDAP da empresa. Eu estou usando o seguinte script Perl:
use Data::Dumper;
use Net::LDAP;
die "Can't connect to LDAP-Server: $@\n"
unless $ldap = Net::LDAP->new( 'xLDAPx' );
foreach my $filter ( 'ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com' )
{
$mesg = $ldap->search( base => "o=FOO,dc=foo,dc=com", filter => $filter );
print Dumper($mesg), "\n\n";
}
Enquanto o primeiro dois filtros de trabalho (como em devolver os valores esperados) o último e complexa não. Devolve uma matriz vazia. O que realmente me intriga é que exatamente a mesma string de consulta funciona quando eu usá-lo com uma ferramenta como o navegador de Softerra LDAP.
Eu também tentei a mesma consulta usando PHP ldap_search
& co, sem sucesso.
Alguém pode lançar alguma luz sobre isso?
Obrigado por ler
Holli
Edit: Esta é a estrutura do servidor:
Server
ou=FOO
ou=...
ou=Personal
uid=something
Eu preciso de uma lista de uids.
Solução
Eu acho que você quer que ele seja mais como (&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com))
.
Mas você não é de todo claro sobre o que você quer exatamente, então eu não posso fazer um filtro para você.
Editado para adicionar: Eu estou supondo que isto é o que você quer fazer: (|(ou=Personal)(ou=FOO))
Outras dicas
A razão é que você não está fornecendo cordas filtro sintaticamente corretas, mas partes de um DN. Eu não posso imaginar isso funciona em Ldap Browser -. Eu só me tentou, sem sucesso
Os dois primeiros são seqüências de filtro corretas. Eles filtro em um único atributo de objeto em um "({atributo} = {value})" moda. O primeiro ( "OU = Pessoais") retornaria qualquer OU chamado "Personal" dentro de sua base de pesquisa.
Se você explicar mais detalhadamente o que você está tentando encontrar Eu provavelmente pode dizer o que expressão de filtro que você precisa.
Escrever um filtro que está em conformidade com RFC 2254 e depois ver o que acontece. Você não precisa de uma consulta complexa, você quer um atributo para cada entrada em um ramo. Olhe para o argumento attrs para o método de pesquisa.