Ce code sert à simplifier l'utilisation de LDAP par la methode objet
Malheureusement je travaille en php 4.0. donc pas de super class comme en php5 mais ca viendra
L'exemple nous montre une utilisation de cette class pour l'identification dans un cas assez complexe vu que je dispose de deux serveursun principal et un de secours
Source / Exemple :
<?php
/* Fichier : LDAP.class.php */
// Création de la classe
class LDAP
{
// Attribut du login du LDAP
var $LDAP_login;
// Attribut du password du LDAP
var $LDAP_password;
// Attribut de l'hôte du LDAP
var $LDAP_host;
// Attribut de connection
var $connect;
//Identification
var $identification;
// Définition du constructeur
function LDAP($login, $password, $host)
{
// Vérification des variables
if (empty ($login) || empty ($host) || empty ($password)){
// Affichage du message d'erreur
//echo "<b>Erreur :</b> Une ou plusieurs variable(s) n'ont pas été renseigné.<br>Procédure interrompu";
exit;
}
else {
// Initialisation des attributs
$this->LDAP_login = $login;
$this->LDAP_password = $password;
$this->LDAP_host = $host;
}
}
//fonction de connection
function connect()
{
// Connection à LDAP
$this->connect = @ldap_connect($this->LDAP_host);
// Vérification de la connection
if (!$this->connect){
// Affichage du message d'erreur
//echo "<b>Erreur :</b> Connection au serveur impossible impossible<br>";
return false;
}else{
return true;
}
// Initialisation de l'attribut de connection
}
// Méthode Identification()
function identification ()
{
// Exécution de l'identification
$ident = @ldap_bind($this->connect, $this->LDAP_login, $this->LDAP_password);
//Vérification de la connection
if ($ident) {
$this->identification = $ident;
return true;
} else {
//echo "Echec d'identification<br>";
return false;
}
}
//fonction recherche
// Attention le serveur est configurer pourne pas tolerer plus de 200 réponses a la requete
// temps de recherche maximale 2 secondes
function recherche($Nom)
{
echo 'Recherchons (sn='.$Nom.') ...';
// Recherche par nom
$search = ldap_search($this->connect, 'o="à compléter", c=fr', "sn=$Nom"); echo 'Le résultat de la recherche est ' . $search . '<br />';
echo 'Le nombre d\'entrées retournées est ' . ldap_count_entries($this->connect,$search) . '<br />';
echo 'Lecture des entrées ...<br />';
$info = ldap_get_entries($this->connect, $search);
echo 'Données pour ' . $info["count"] . ' entrées:<br />';
for ($i=0; $i<$info["count"]; $i++) {
echo 'dn est : ' . $info[$i]["dn"] . '<br />';
echo 'premiere entree cn : ' . $info[$i]["cn"][0] . '<br />';
echo 'premiere entree sn : ' . $info[$i]["sn"][0] . '<br />';
echo 'premier email : ' . $info[$i]["mail"][0] . '<br />';
echo 'premier givenName : ' . $info[$i]["givenName"][0] . '<br />';
echo 'premier uid : ' . $info[$i]["uid"][0] . '<br />';
}
}
// Méthode deconnect()
function deconnect (){
// Déconnection
$deconnect = ldap_unbind($this->connect);
if(!$deconnect)
ldap_close($this->connect);//c les bretelles et la ceinture :)
}//fin de déconnexion
}//fin de class
?>
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------EXEMPLE-------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
<?php
$annu1 = ""; //Annuaire Principal
$annu2 = ""; //Annuaire de secours
//inclusion de la classe LDAP
include "./Commun/LDAP/LDAP.class.php";
if(phpversion() < 4.2){
foreach($HTTP_SERVER_VARS as $NomVar => $Value) $$NomVar = $Value;
}else{
foreach($_SERVER as $NomVar => $Value) $$NomVar = $Value;
}
session_start();
$identification = "0";
if($PHP_AUTH_USER != '' && $PHP_AUTH_PW != ''){
//---------------------------------------LDAP-------------------------------------------
$serveur1 = new LDAP($PHP_AUTH_USER,$PHP_AUTH_PW,$annu1);
if($serveur1->connect()){
if($serveur1->identification()){
//------------------si identification ok
header("location: ./index.php");
//--------------------------------------
}else{
//l'utilisateur n'a pas ete reconnu dans sesame
$identification++;
}
$serveur1->deconnect();
}else{
//Connexion au serveur de secour
$serveur2 = new LDAP($PHP_AUTH_USER,$PHP_AUTH_PW,$annu2);
if($serveur2->connect()){
if($serveur2->identification()){
//------------------si identification ok
header("location: ./index.php");
//--------------------------------------
}else{
//l'utilisateur n'a pas ete reconnu dans sesame
$identification++;
}
$serveur2->deconnect();
}
}//---------------------------------------Fin LDAP---------------------------------------
}else{
//Tout les champ n'ont pas ete renseigner
$identification++;
}
if($identification != "0"){
header('WWW-Authenticate: Basic realm="LDAP"');
echo 'Vous devez entrer un login et un mot de passe valide pour accéder à ces ressources '.$identification;
//sleep(1); //on boucle sur un sleep pour faire chier les identification bruteforce.... ;)
//le mieux searit de pouvoir augmenter ^par puissance n le sleep mais bon.... verrait plus tard
exit();
}
?>
Conclusion :
Ce code reste très simple et donne les fonctions principale de LDAP que j'ai pu tester n'ayant pas acces a toutes les ressources de ce serveur
pour l'instant
- la connection
- l'identification
- la recherche
- la deconnection
Une fonction de gestion des erreurs devrait bientot suivre quand j'aurai un peu de temps
Tout les echo sont desactiver (en cas d'utilisation de header).
Le code d'exemple permet de se connecter au serveur d'identification et si jamais il est planter on va aller chercher le serveur de secours
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.