Come posso effettuare una query complessa con Perl's Net :: LDAP?
Domanda
Sto riscontrando problemi nell'esecuzione di una query complessa sul nostro server LDAP aziendale. Sto usando il seguente 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";
}
Mentre i primi due filtri funzionano (come nel restituire i valori previsti), l'ultimo e il complesso no. Restituisce un array vuoto. Ciò che mi ha davvero sconcertato è che la stessa stringa di query funziona esattamente quando la utilizzo con uno strumento come il browser LDAP Softerra.
Ho anche provato la stessa query usando ldap_search
& amp; co, inutilmente.
Qualcuno può far luce su questo?
Grazie per aver letto
Holli
Modifica: Questa è la struttura del server:
Server
ou=FOO
ou=...
ou=Personal
uid=something
Ho bisogno di un elenco di uid.
Soluzione
Penso che tu voglia che sia più simile a (& amp; (ou = Personal) (ou = FOO) (o = FOO) (dc = foo) (dc = com))
.
Ma non sei affatto chiaro su cosa desideri esattamente, quindi non posso creare un filtro per te.
Modificato per aggiungere: suppongo che questo sia quello che vuoi fare: (|(ou=Personal)(ou=FOO))
Altri suggerimenti
Il motivo è che non vengono fornite stringhe di filtro sintatticamente corrette, ma parti di un DN. Non riesco a immaginare che funzioni in Ldap Browser: mi sono appena provato senza successo.
I primi due sono stringhe di filtro corrette. Filtrano su un singolo attributo oggetto in un " ({attributo} = {valore}) " moda. Il primo (" ou = Personal ") restituirebbe qualsiasi unità organizzativa denominata " Personal " all'interno della tua base di ricerca.
Se spieghi più in dettaglio cosa stai cercando di trovare, posso probabilmente dirti quale espressione di filtro hai bisogno.
Scrivi un filtro conforme a RFC 2254 e poi vedi cosa succede. Non hai bisogno di una query complessa, vuoi un attributo per ogni voce in un ramo. Guarda l'argomento attrs per il metodo di ricerca.