Comment effectuer une requête complexe avec Perl's Net :: LDAP?
Question
Je ne parviens pas à exécuter une requête complexe sur le serveur LDAP de notre société. J'utilise le script Perl suivant:
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";
}
Alors que les deux premiers filtres fonctionnent (comme pour renvoyer les valeurs attendues), le dernier et complexe ne fonctionne pas. Il retourne un tableau vide. Ce qui me rend vraiment perplexe, c’est que la même chaîne de requête fonctionne exactement lorsque je l’utilise avec un outil tel que le navigateur LDAP Softerra.
J'ai également essayé la même requête en utilisant le ldap_search
de PHP & amp; co, en vain.
Quelqu'un peut-il nous éclairer?
Merci d'avoir lu
holli
Modifier: Voici la structure du serveur:
Server
ou=FOO
ou=...
ou=Personal
uid=something
J'ai besoin d'une liste des uids.
La solution
Je pense que vous voulez que ce soit plus comme (& amp = (ou = Personnel) (ou = FOO) (o = FOO) (dc = toto) (dc = com))
.
Mais vous ne savez pas exactement ce que vous voulez, je ne peux donc pas vous faire de filtre.
Modifié pour ajouter: j'imagine que c'est ce que vous voulez faire: (| (ou = Personnel) (ou = FOO))
Autres conseils
La raison en est que vous ne fournissez pas de chaînes de filtre syntaxiquement correctes, mais des parties d'un DN. Je ne peux pas imaginer que cela fonctionne dans Ldap Browser - je viens de m'essayer moi-même sans succès.
Les deux premiers sont des chaînes de filtres correctes. Ils filtrent sur un seul attribut d'objet dans une " ({attribut} = {valeur}) " mode. Le premier ("ou = Personnel") renverrait toute unité d'organisation nommée "Personnel". dans votre base de recherche.
Si vous expliquez plus en détail ce que vous essayez de trouver, je peux probablement vous dire quelle expression de filtre vous avez besoin.
Écrivez un filtre conforme à la RFC 2254 . et ensuite voir ce qui se passe. Vous n'avez pas besoin d'une requête complexe, vous voulez un attribut pour chaque entrée d'une branche. Regardez l'argument attrs pour la méthode de recherche.