Vous êtes ici Codes PHP et MySQL > Inclassable > Recherche ldap

 

Recherche ldap

Permet de rechercher un membre d'un Active directory dans les groupes présents de l'AD OU dans tout l'AD si on ne connaît pas le groupe.

C'est encore en phase de test mais ça fonctionne sans problèmes. Mais je débute donc il est fort probable que vous ayez quelques critiques à formulées. Si elles sont constructives c'est avec plaisir que je les prendrais.
 
docbrown
Code vu 5787 fois
Enregistré le 22 Aout 2011
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Recherche ldap
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Recherche ldap                                            */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts648-PHP.htm              */
/* Auteur         : docbrown                                                  */
/* Date édition   : 22 Aout 2011                                              */
/*                                                                            */
/******************************************************************************/

session_start();
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Recherche d'un utilisateur</title>
    </head>
    <body>
        <?php
        include("menu.php");
        $serveur "monserveur";
        $racine "DC=mondomaine, DC=fr";
        //on récupère le login et le mot de passe de la page précédente
        $login $_SESSION['login'];
        $motdepasse $_SESSION['motdepasse'];

        $ds ldap_connect($serveur); //on tente la connexion puis on vérifie
        if ($ds) {
            ldap_set_option($dsLDAP_OPT_PROTOCOL_VERSION3);
            ldap_set_option($dsLDAP_OPT_REFERRALS0);
            echo 'connexion avec le serveur établie<br />';
            $bind ldap_bind($ds$login '@mondomaine'$motdepasse);

            //on se logge et on vérifie qu'il s'agit bien d'un compte admin
            $recherchelogin ldap_search($ds$racine"sAMAccountName=$login")
;
            $resultatlogin ldap_get_entries($ds$recherchelogin);
            if (isset($resultatlogin[0]['admincount'])) {
                echo 'vous êtes admin c\'est bon!<br />';
                ?>
                <div>
                    <form action="recherche.php" method="post">
                        <input type="text" name="person"><label
 for="person">utilisateur recherché</label><br />
                        <select name="groupe">

                            <?php
                            
//on commence par récupérer tous les groupes présent dans l'AD
                            $recherchegroupe ldap_search($ds$racine"objectclass=group");
                            $resultatgroupe ldap_get_entries($ds$recherchegroupe);
                            echo 'nombre de groupes dans l\'AD :' $resultatgroupe['count'] . '<br />';
                            $tabGroupeAd = array();
                            for ($i 0$i $resultatgroupe['count']; $i++) {
                                $tabGroupeAd[strtr($resultatgroupe[$i]['name'][0
], " ""-")] = $resultatgroupe[$i]['name'][0];
                            }
                            asort($tabGroupeAd);

                            foreach ($tabGroupeAd as $cle => $element) {
                                //on met en place les options du select
                                // en se référant au tableau tabGroupeAD
                                echo '<option value=' $cle '>' $element '</option>';
                            }
                            ?>
                            <option value="*">tous les groupes</option>
                        </select>

                        <input type="submit" value="valider"><br />
                    </form>
                </div>
                <?php
                // il faut que l'utilisateur ait rentré un nom à chercher
                if (isset($_POST['person']) && ($_POST['person']) != "") {
                    $person $_POST['person'];
                    echo 'Recherche de : ' $_POST['person'] . '<br />';
                    $recherchepersonne ldap_search($ds$racine"(&(objectcategory=person)(|(sAMAccountName=*$person*)(name=*$person*)))");
                    $resultatpersonne ldap_get_entries($ds$recherchepersonne
);
                    $tabpersonne = array();
                    $tabconcorde = array();
                    for ($i 0$i $resultatpersonne["count"]; $i++) {
                        
//on créé un tableau de personne qu'on rempli avec les noms trouvés dans tous
// l'AD
                        
                        $tabpersonne[$i] = $resultatpersonne[$i]['name'][0];
                    }
                    //simple vérification de la valeur $_POST['groupe']
                    echo 'Nombre de personnes trouvées dans tout l\'AD: ' count($tabpersonne) . '<br />';
                    for ($i 0$i count($tabpersonne); $i++) {
                        echo $tabpersonne[$i] . '<br />';
                    }

                    $test $_POST['groupe'];
                    $test lcfirst($test);
                    $test strtr($test"-"" ");

                    $recherchegroupeS ldap_search($ds$racine"(&(objectclass=group)(name=$test))");
                    $resultatgroupeS ldap_get_entries($ds$recherchegroupeS);
                    $trouver FALSE;
                    for ($j 0$j $resultatgroupeS["count"]; $j++) {
                        //si le groupe trouvé possède des membres on
                        
// vérifie si parmi les noms trouvés il y a concordance avec les membres du
// groupe

                        if (isset($resultatgroupeS[$j]['member'])) {

                            for ($i 0$i $resultatgroupeS[$j]['member'][
"count"]; $i++) {

                                foreach ($tabpersonne as $element) {
                                    if (isset($resultatgroupeS[$j]['member'][$i]
)) {
                                        $pos stripos($resultatgroupeS[$j][
'member'][$i], $element);

                                        if ($pos !== false) {
                                            echo '<strong>' $resultatgroupeS[
$j]['name'][0] . '</strong><br />';
                                            echo $element '<br />';
                                            echo $resultatgroupeS[$j]['member'][
$i] . '<br />';
                                            unset($resultatgroupeS[$j]['member']
[array_search($resultatgroupeS[0]['member'][$i], $resultatgroupeS[0]['member'])]
);
                                            $trouver TRUE;
                                        }
                                    }
                                }
                            }
                        } else {
                            if (!$trouver) {
                                echo 
'Ce groupe ne contient aucun utilisateur<br />';
                            }
                        }
                    }
                } else {
                    echo 'veuillez saisir une personne à rechercher';
                }
            } else {
                echo 
'vous n\'avez pas l\'autorisation d\'accéder à cette page<br />';
                echo 
'redirigez-vous vers <a href="index.php">la page d\'acceuil</a>';
            }

            ldap_close($ds);
        } else {
            echo 'echec';
        }
        ?>
    </body>
</html>

 

Fonctions du code

: Initialise une session - (PHP 4, PHP 5)
: Connexion à un serveur LDAP - (PHP 4, PHP 5)
: Modifie la valeur d'une option LDAP - (PHP 4 >= 4.0.4, PHP 5)
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Authentification au serveur LDAP - (PHP 4, PHP 5)
: Recherche sur le serveur LDAP - (PHP 4, PHP 5)
: Lit toutes les entrées du résultat - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: Crée un tableau - (PHP 4, PHP 5)
: Remplace des caractères dans une chaîne - (PHP 4, PHP 5)
: Trie un tableau et conserve l'association des index - (PHP 4, PHP 5)
: Compte le nombre d'éléments d'un tableau ou le nombre de propriétés...
: Recherche la première occurrence dans une chaîne, sans tenir compte de la casse -...
: Détruit une variable - (PHP 4, PHP 5)
: Recherche dans un tableau la clé associée à une valeur - (PHP 4 >= 4.0.5, PHP 5)
: Alias de ldap_unbind() - (PHP 4, PHP 5)
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 

Connexion

 
 

Inclassable

 
 

PHP

 
 
        Publicité