Suivre un referral LDAP ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Suivre un referral LDAP ?

par klerk » 11 janv. 2008, 11:38

tout a fait mais ca ne suffit pas à ce que PHP suive un referral ... D'ailleurs PHP ne sait pas suivre un referral !!! (c'est maintenant sur et certain)

Par contre, PHP sait trouver les referrals et nous les redonner dans un tableau :

Code : Tout sélectionner

<?php // Eléments d'authentification LDAP $ldaprdn = "xxx"; // DN ou RDN LDAP $ldappass = "xxx"; // Mot de passe associé // Connexion au serveur LDAP $ldapconn = ldap_connect("xxx"); if ($ldapconn) { // $ds doit être une ressource de connexion valide if (ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3)) { echo "Version LDAPv3"; } else { echo "Impossible de modifier la version du protocole à 3"; } ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); // Connexion au serveur LDAP $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); // Vérification de l'authentification if ($ldapbind) echo utf8_encode("<br />Connexion LDAP réussie...<br />"); else echo utf8_encode("<br />Connexion LDAP échouée...<br />"); $dn = "ou=Utilisateurs,dc=sihc,dc=local"; $filter="(cn=toto)"; $sr=ldap_search($ldapconn, $dn, $filter); /**************************************************************************** *****************************************************************************/ //Find referrals $ref = ldap_first_reference($ldapconn, $sr); ldap_parse_reference($ldapconn,$ref,$referrals); //récupération des données $tmp = substr($referrals[0],0,strlen($referrals[0])-5); $tmp = explode('/',$tmp); $ip = $tmp[2]; $ou = $tmp[3]; /*while ($ref) { if (ldap_parse_reference($ldapconn, $ref, $referrals)) { while ($referral = array_shift($referrals)) { echo $referral . "<br>\n"; } } } $ref = ldap_next_reference($ldapconn, $ref);*/ /**************************************************************************** *****************************************************************************/ $info = ldap_get_entries($ldapconn, $sr); echo '<br />'.$info["count"]." entries returned\n".'<br />'; print_r($info); //connexion au referral $ldapconn = ldap_connect($ip); $ldaprdn = "xxx"; // DN ou RDN LDAP $ldappass = "xxx"; $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); $sr = ldap_search($ldapconn, $ou, $filter); $info = ldap_get_entries($ldapconn, $sr); echo '<br />'.$info["count"]." entries returned\n".'<br />'; print_r($info); } ?>
Bon c'est juste du test car il faudra faire une fonction récursive pour le cas ou il y a plusieurs referrals mais ce code permet de faire la recherche sur l'OpenLDAP puis de trouver le referral et de "finir" la recherche sur ce dernier ...

Merci pour votre aide :)

PS: la partie en commentaire avec les ldap_parse_reference et ldap_next_reference n'a encore pas été testée mais ca va venir !

par mojorisin » 11 janv. 2008, 10:40

Je ne connais pas trop LDAP mais il semble qu'il y ait des options disponible pour les referral justement .
Trouvé sur la page du manuel :

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($conn, LDAP_OPT_REFERRALS,0);

ldap

Essais de voir de ce coté là.

par Nagol » 09 janv. 2008, 21:21

Mouais .... Je suis dans la panade alors ! Je vais essayer de voirs'il n'y a pas une solution totalement différente niveau LDAP compatible PHP alors ... (ou essayer de trouver quelqu'un qui a réussi a faire marcher ldap_set_rebind_proc)
Je dirais meme que tu prend le probleme a l'envers la... en fait pour avoir jouer avec le ldap il y a quelques temps, j'avais aussi le pb pour attaquer une AD...
Php gère pas trop mal les connexions ldap mais si et seulment si elles sont standard...
et la c'est un vilain mot quand on veut jouera avec microsoft...
En gros comme l'AD n'est pas au format ldap standard, les gestionnaires ldap (php ou autres) sont perdus...

de souvenir j'etais passée par un webservice sur le serveur pour recuperer les infos clients...

mais j'espere pour toi me tromper et que ca a changer...
voila ma goutte a l'edifice et ma pierre au moulin :twisted:
Hmm pas d'accord, je prend pas d'habitude la défense des applications microsoft mais pour une fois je vais le faire. Interfacer AD de A à Z c'est faisable, c'est lourd mais c'est faisable suffit de se documenter sur les schemas utilisé et de coder sans s'aider de framework bidon genre pear :)

par steph29 » 09 janv. 2008, 14:59

Mouais .... Je suis dans la panade alors ! Je vais essayer de voirs'il n'y a pas une solution totalement différente niveau LDAP compatible PHP alors ... (ou essayer de trouver quelqu'un qui a réussi a faire marcher ldap_set_rebind_proc)
Je dirais meme que tu prend le probleme a l'envers la... en fait pour avoir jouer avec le ldap il y a quelques temps, j'avais aussi le pb pour attaquer une AD...
Php gère pas trop mal les connexions ldap mais si et seulment si elles sont standard...
et la c'est un vilain mot quand on veut jouera avec microsoft...
En gros comme l'AD n'est pas au format ldap standard, les gestionnaires ldap (php ou autres) sont perdus...

de souvenir j'etais passée par un webservice sur le serveur pour recuperer les infos clients...

mais j'espere pour toi me tromper et que ca a changer...
voila ma goutte a l'edifice et ma pierre au moulin :twisted:

par klerk » 09 janv. 2008, 11:02

Intéressant, le referal si je comprend bien est une sorte de symlink vers un autre serveur LDAP? malgré mes excursions dans le monde du ldap je ne connaissais pas cette fonctionalité ce qui m'amène à penser qu'il y'a de fortes chances que la fonctionnalité ne soi pas couverte par php_ldap.
tout a fait, le referral est une définition dans OpenLDAP qui permet de dire au CLIENT d'aller voir ailleurs s'il ne trouve pas la réponse dans l'OpenLDAP directement. Il est donc obligatoire que le client ldap (en l'occurence PHP) soit compatible avec les referrals ...
J'imagine que le lien "referal" contient l'adresse vers le second serveur ainsi que l'emplacement de la donnée donc il suffirait de tester tes OUs afin de savoir si l'entrée est un référal ou non et dans le cs ou c'en est une opérer une connexion temporaire afin de récupérer ta valeur. Au final c'est ce que ferait de toute manière php_ldap.
j'aimerais bien, sauf que PHP ignore complètement l'OU qui sert de referral, elle n'apparait pas du tout dans les résultats alors que mon filtre demande de tout afficher :(
D'autres part la fonction rebind est bien ce que tu cherches mais est aussi annotée comme étant expérimentale, bien que bcp de fonctions "expérimentales" fasse leur boulot dis toi que certaines sont trés loin de le faire :)
Mouais .... Je suis dans la panade alors ! :? Je vais essayer de voirs'il n'y a pas une solution totalement différente niveau LDAP compatible PHP alors ... (ou essayer de trouver quelqu'un qui a réussi a faire marcher ldap_set_rebind_proc)

Merci malgré tout pour vos réponses :)

par Nagol » 08 janv. 2008, 21:49

Intéressant, le referal si je comprend bien est une sorte de symlink vers un autre serveur LDAP? malgré mes excursions dans le monde du ldap je ne connaissais pas cette fonctionalité ce qui m'amène à penser qu'il y'a de fortes chances que la fonctionnalité ne soi pas couverte par php_ldap.

J'imagine que le lien "referal" contient l'adresse vers le second serveur ainsi que l'emplacement de la donnée donc il suffirait de tester tes OUs afin de savoir si l'entrée est un référal ou non et dans le cs ou c'en est une opérer une connexion temporaire afin de récupérer ta valeur. Au final c'est ce que ferait de toute manière php_ldap.

D'autres part la fonction rebind est bien ce que tu cherches mais est aussi annotée comme étant expérimentale, bien que bcp de fonctions "expérimentales" fasse leur boulot dis toi que certaines sont trés loin de le faire :)

par klerk » 08 janv. 2008, 13:15

J'avais déjà essayer cette fonction sans vraiment de résultat mais peut-être que je l'utilise de façon incorrecte => Voici le nouveau code :

Code : Tout sélectionner

<?php // Eléments d'authentification LDAP $ldaprdn = "cn=admin,dc=xxx,dc=xxx"; // DN ou RDN LDAP $ldappass = "xxx"; // Mot de passe associé // Connexion au serveur LDAP $ldapconn = ldap_connect("xx.xx.xx.xx"); if ($ldapconn) { // $ds doit être une ressource de connexion valide if (ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3)) { echo "Version LDAPv3"; } else { echo "Impossible de modifier la version du protocole à 3"; } ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); ldap_set_rebind_proc($ldapconn, 'test'); // Connexion au serveur LDAP $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); // Vérification de l'authentification if ($ldapbind) echo utf8_encode("Connexion LDAP réussie..."); else echo utf8_encode("Connexion LDAP échouée..."); $dn = "ou=xxx,dc=xxx,dc=xxx"; $filter="(objectClass=*)"; $sr=ldap_search($ldapconn, $dn, $filter); $info = ldap_get_entries($ldapconn, $sr); echo '<br />'.$info["count"]." entries returned\n".'<br />'; print_r($info); } ?>
avec la fonction test :

Code : Tout sélectionner

function test() { $ldaprdn = "accesad@xxx"; // DN ou RDN LDAP $ldappass = "xxx"; // Mot de passe associé $ldapconn = ldap_connect("xx.xx.xx.xx"); $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); }
Ce qui m'embête, c'est que ce n'est pas la connexion en elle-même qui pose problème mais l'authentification (ldap_bind)... Le problème est que cette fonction n'est utilisable uniquement pour le ldap_connect.

Bref, je ne vois pas trop comment utiliser cette fonction ...

par Xenon_54 » 08 janv. 2008, 12:11

Je n'ai que très peu de notions sur LDAP. J'ai pu m'initier au LDAP il y a 2-3 semaines sans vraiment approfondir et sans explorer les fonctions PHP qui y étaient associées.

Cependant je crois que cette fonction (très peu documentée) pourrait t'aider:
http://www.php.net/manual/fr/function.l ... d-proc.php

Peux-tu essayer?

Suivre un referral LDAP ?

par klerk » 08 janv. 2008, 10:56

Bonjour,

Je viens demander de l'aide sur un problème assez spécifique :

J'ai un serveur openLDAP dont une OU est un referral vers un serveur Active Directory.
Je me connecte en PHP sans problème à l'openLDAP mais lorsque que je fait un ldap_search, PHP me renvoit bien tous les résultats voulus exepté l'OU qui sert de referral : cette dernière n'est pas du tout affichée dans les résultat!

Le referral de l'openLDAP fonctionne très bien avec LDAPBrowser sauf que ce dernier me demande de me réauthentifier avec le login de l'AD => je voudrais savoir s'il y a possibilité en PHP d'automatiser cette demande en entrant au préalable le login de l'AD pour que PHP puisse le réutiliser lors du referral ...

Merci d'avance !

Version PHP : 5.2.0-8+etch7
Code :

Code : Tout sélectionner

<?php // Eléments d'authentification LDAP $ldaprdn = "cn=admin,dc=xxx,dc=xxx"; // DN ou RDN LDAP $ldappass = "xxx"; // Mot de passe associé // Connexion au serveur LDAP $ldapconn = ldap_connect("xx.xx.xx.xx"); if ($ldapconn) { // $ds doit être une ressource de connexion valide if (ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3)) { echo "Version LDAPv3"; } else { echo "Impossible de modifier la version du protocole à 3"; } ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); // Connexion au serveur LDAP $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); // Vérification de l'authentification if ($ldapbind) echo utf8_encode("Connexion LDAP réussie..."); else echo utf8_encode("Connexion LDAP échouée..."); $dn = "ou=xxx,dc=xxx,dc=xxx"; $filter="(objectClass=*)"; $sr=ldap_search($ldapconn, $dn, $filter); $info = ldap_get_entries($ldapconn, $sr); echo '<br />'.$info["count"]." entries returned\n".'<br />'; print_r($info); } ?>