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 !
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]<?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);
}
?>[/code]
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 !