IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP/LDAP] Impossibilité d'interroger l'Active Directory


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [PHP/LDAP] Impossibilité d'interroger l'Active Directory
    Bonjour à tous,

    Je rencontre quelques problemes concernant php/ldap, je vous explique en gros ma situtation...

    Voila, je suis actuellement en stage de BTS Informatique de Gestion 2eme année.

    Je dois completer un intranet... Je dois donc faire un service de demandes d'intervention de pannes du reseau de mon bahut.
    L'application disposera de deux parties :
    -Partie utilisateurs, pour la demande d'intervention
    -Partie administrateurs, afin de consulter les demandes, les traiter etc...

    Et c'est sur cette deuxieme partie que cela se complique..

    En effet, j'aimerai que l'accés dépende du type de personne. Un éléve n'y aurait donc pas accés.
    Comme la majorité des établissements, les ordinateurs disposent de sessions windows.
    A l'aide du code ci-dessous, je récupere le nom de l'utilisateur de la session windows en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $username=shell_exec("echo %username%" );
    echo ("username : $username" );
    Avec ce nom, je souhaite vérifier que la personne est présente dans le groupe d'administrateurs de l'active directory...

    Etant un débutant dans le LDAP, je séche enormement quant a son utilistation, même aprés plusieurs consultations sur le net...
    Voila ce que donne mon code en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
     
    <?php
    	$server = "-- Serveur --";
    	$port = "389";
    	$rootdn = "-- ? --";
    	$rootpw = "";
     
    	echo "Connexion...<br>";
     
    	$ds=ldap_connect($server,$port) or die( "Impossible de se connecter au serveur LDAP $server" );
     
    	$username=shell_exec("echo %username%" );
    	echo ("username : $username" );
     
    if ($ds<>0)
    	{
    		ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    		ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
     
    		$r=ldap_bind($ds,"-- ? --","-- ? --");
     
    		$sr = ldap_search($ds,$rootdn,"sn=*");
    		echo "Le résultat de la recherche est ".$sr."<br />";
    		$nb = ldap_get_entries($ds, $sr);		
    		echo "Nombre de personnes trouvées : ".$nb["count"]. "<p>";
    		for ($i=0;$i<$nb["count"];$i++)
    			{
    				echo "Name : ". $nb[$i]["dn"] ."<br>";// afichier DN des user
    			}
    		echo "Déconnexion...<br>";
    		ldap_close($ds);
     
    	}
    	 else
    		{
    			echo  "Impossible de se connecter au serveur LDAP";
    		}		
    ?>
    -- ? -- signifiant les variables dont je ne suis pas sûr de leur définition

    Voici l'affichage correspodant au code ci-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Connexion...
    username : nom
    Warning: ldap_search() [function.ldap-search]: Search: No such object in C:\Program Files\EasyPHP 3.0\www\intranet\administration\administration.php on line 35
    Le résultat de la recherche est
     
    Warning: ldap_get_entries(): supplied argument is not a valid ldap result resource in C:\Program Files\EasyPHP 3.0\www\intranet\administration\administration.php on line 37
    Nombre de personnes trouvées :
     
    Déconnexion...
    Ensuite, j'ai installé OpenLDAP, mais je ne pense pas que j'en ai l'utilité, vu que je souhaite consulter directement sur le serveur du bahut...

    Je ne sais même pas, si la connexion est véritablement établie.

    Si vous avez besoin d'informations complémentaires, dites le moi, que je ne sais pas trop ce qui est nécessaire etc...

    Je vous remercie par avance.

  2. #2
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    on trouve pas mal de doc sur ldap et php qui te donne la syntaxe et qqes explications sur les principales fonctions.
    J'ai parcouru vite fait ton code, ca me semble cohérent j'ai juste pas vérifier les variables et leurs utilisations.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par yorukaze Voir le message
    on trouve pas mal de doc sur ldap et php qui te donne la syntaxe et qqes explications sur les principales fonctions.
    J'ai parcouru vite fait ton code, ca me semble cohérent j'ai juste pas vérifier les variables et leurs utilisations.
    Salut Yoru,
    Tout dabord, merci a toi de m'avoir répondu.
    J'ai essayé avec un autre code qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
     
    <?php
    $ldap_server="srvlyc1";
    $log="nomtest";
    $mylog = "log";//Pour binder le serveur...
    $mypass = "";//Pour binder le serveur...
     
    // Donner le DN de base pour la recherche.
    $base_dn = "ici_le_dn";
     
    // Montrer seulement les personnes.
    $filter = "(&(objectClass=user)(samaccountname=".$log.")(cn=*))";
     
    // Se connecter au serveur
    if (!($connect=@ldap_connect($ldap_server))) {
         die("Impossible de se connecter au serveur!");
    }
     
    // Binder le serveur
    if (!($bind=@ldap_bind($connect,$mylog,$mypass))) {
         die("Impossible de binder le serveur!");
    }
     
    // Cherche dans l'active directory
    if (!($search=@ldap_search($connect, $base_dn, $filter))) {
         die("Impossible de chercher sur le serveur!");
    }
     
    //Compter les entrées retournées par la recherche
    $number_returned = ldap_count_entries($connect,$search);
    //Récupérer les entrées
    $info = ldap_get_entries($connect, $search);
     
    //Affichage du résultat
    for ($i=0; $i<$info["count"]; $i++) {
       @$nom = @$info[$i]["name"][0];
    }
    echo "Le login '".@$log."' désigne ".@$nom;
    ?>
    il m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Impossible de chercher sur le serveur!
    Donc apparement, il se connecte au serveur, il bind bien, mais tojours un probleme de recherche...

    J'ignore d'où pourrait venir le probleme...
    Le serveur a l'air d'être bien marqué, peut etre que ca vient du DN ou alors des identifiants.
    C'est relou ^^

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Re ^^

    Bon alors, j'ai résolu mon petit souci,

    je vais essayer d'etre clair quant a l'explication, pour ceux qui pourraient rencontrer ce souci...

    Je tiens d'abord a signaler, que je ne travaillais pas en local (en d'autres termes, sur OpenLDAP) donc je ne résoudrai pas grand chose pour ce coté la, mais bon peut etre que ... Bref ^^

    Je ne pouvais pas me connecter au serveur, car j'avais un rootdn insuffisant..
    En effet, je ne disposais pas de OrganizationUnit (OU) a l'interieur de mon DN, donc cela était impossible que la recherche soit éffectuée...

    Ensuite, j'ai utilisé un compte présent dans l'Active Directory, donc login et mdp m'ont été nécessaires !

    Next, dans la fonction recherche il faut absolument un filtre et un "restriction" (qui s'appelle justthese ici) comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    // Montrer seulement les personnes.
    $filter = "(&(objectClass=user)(cn=*))";
    
    // Cherche dans l'active directory
    $justthese = array("*");
    
    if (!($search=@ldap_search($connect, $base_dn, $filter,$justthese))) {
         die("Impossible de chercher sur le serveur!");
    }
    Le filtre est utile pour l'affichage, comme le nom l'indique c'est un filtre ... donc par exemple on veut les noms commencant par f

    Le justthese, il est impératif qu'il y figure... En effet, c'est lui qui fera les restrictions d'affichage. Donc par exemple, nous voulons le nom, prenom, mail d'un utilisateur , la syntaxe de cette restriction est la suivante array("cn", "givenname", "mail"); , laisser "*" si vous souhaitez afficher toutes informations.

    Attention de bien respecter l'emplacement de chaque propriété pour la fonction de recherche !!


    Voila en gros où je bloquais

    Merci a Yorukaze d'avoir essayé de m'éclairer ^^,

    affaire classée

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Avez vous trouvé comment faire? je susi dans la meme galére

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/08/2009, 13h12
  2. Différence LDAP et WINT pour manipuler Active Directory
    Par undercrash dans le forum VBScript
    Réponses: 0
    Dernier message: 03/04/2008, 15h56
  3. [LDAP] Interroger un Active Directory 2003
    Par aelythe dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/08/2006, 08h14
  4. [LDAP] problème connexion anonyme avec php à Active Directory
    Par anto48_4 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 02/03/2006, 16h50
  5. Package permettant d'interroger l'active directory
    Par gracouille dans le forum Modules
    Réponses: 5
    Dernier message: 18/08/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo