- <?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();
- }
- ?>
<?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();
}
?>