Partage
  • Partager sur Facebook
  • Partager sur Twitter

Active directory - PHP

récupérer tous les utilisateurs

Sujet résolu
    18 avril 2013 à 12:15:05

    Bonjour tout le monde,

    J'aimerais récupérer tous mes utilisateurs de l'active directory pour afficher un tableau annuaire, c'est à dire que j'aimerais afficher sur notre intranet un tableau reprenant nom, email, numéro de téléphone de chaque utilisateur.

    Je m'y connais en php mais j'arrive pas à lier mon php et active directory via des fonctions LDAP.

    Merci pour votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      18 avril 2013 à 14:45:08

      Bonjour Kyuubi66,

      deux facons : 

      - fonctions native de php

      $ad = ldap_connect($host, $port) or die('Could not connect to LDAP server.');
      ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
      ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
      if (!@ldap_bind($ad, $user, $password)) { 
      
       	 echo "<p>Error:" . ldap_error($ad) . "</p>"; 
      	 echo "<p>Error number:" . ldap_errno($ad) . "</p>"; 
      	 echo "<p>Error:" . ldap_err2str(ldap_errno($ad)) . "</p>"; 
      } 
      else { 
        	echo("Login correct");
              //si FILTRE
        	$filter = "(&(objectCategory=person)(objectClass=user)(name=*)(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
        	$justthese = array("*"); 
        	$sr=ldap_read($ad, $basedn, $filter, $justthese);
        	$info = ldap_get_entries($ad, $sr);
      
        	echo "<pre>";
        	print_r($info);
        	echo "</pre>";
        	ldap_unbind($ad);
      } 
      /*
      @ldap_bind($ad, "{$user}@{$domain}", $password) or die('Could not bind to AD.');

      - En utilisant la libraire adLDAP http://adldap.sourceforge.net/

      include ("adLdap/adLDAP.php");
      try {
          $adldap = new adLDAP();
          
          $username = "username";
          $password = "password";
      
          if ($adldap->authenticate($username, $password)) {
              // modification d'un numero de téléphone pour exemple
          	$adldap->user()->modify($username, array("telephone"=>'0000000000'));
          	
          }
          else {
          	echo "pas connect";
          }
      
      }
      catch (adLDAPException $e) {
          echo $e; 
          exit();   
      }




      -
      Edité par lorenzo8500 18 avril 2013 à 14:48:30

      • Partager sur Facebook
      • Partager sur Twitter
      Le sport c'est la santé !
        19 avril 2013 à 12:58:30

        Bonjour et merci de ta réponse,

        En fait j'ai utiliser un tuto trouvé sur le net qui fait quasi ce que je veux (et utilise la fonction native)

        Voici le code :

        <?php
        function get_members($group=FALSE,$inclusive=FALSE) {
            // Active Directory server
            $ldap_host = "lml.grp";
         
            // Active Directory DN
            $ldap_dn = "OU=LML,DC=lml,DC=grp";
            //$ldap_dn = "CN=Users,DC=lml,DC=grp";
         
            // Domain, for purposes of constructing $user
            $ldap_usr_dom = "@".$ldap_host;
         
            // Active Directory user
            $user = "monuser";
            $password = "monmdp";
         
            // User attributes we want to keep
            // List of User Object properties:
            // http://www.dotnetactivedirectory.com/Understanding_LDAP_Active_Directory_User_Object_Properties.html
            $keep = array(
                "samaccountname",
                "distinguishedname"
            );
         
            // Connect to AD
            $ldap = ldap_connect($ldap_host) or die("Could not connect to LDAP");
            ldap_bind($ldap,$user.$ldap_usr_dom,$password) or die("Could not bind to LDAP");
         
             // Begin building query
             if($group) $query = "(&"; else $query = "";
         
             $query .= "(&(objectClass=user)(objectCategory=person))";
         
            // Filter by memberOf, if group is set
            if(is_array($group)) {
                // Looking for a members amongst multiple groups
                    if($inclusive) {
                        // Inclusive - get users that are in any of the groups
                        // Add OR operator
                        $query .= "(|";
                    } else {
                        // Exclusive - only get users that are in all of the groups
                        // Add AND operator
                        $query .= "(&";
                    }
         
                    // Append each group
                    foreach($group as $g) $query .= "(memberOf=CN=$g,$ldap_dn)";
         
                    $query .= ")";
            } elseif($group) {
                // Just looking for membership of one group
                $query .= "(memberOf=CN=$group,$ldap_dn)";
            }
         
            // Close query
            if($group) $query .= ")"; else $query .= "";
         
            // Uncomment to output queries onto page for debugging
            // print_r($query);
         
            // Search AD
            $results = ldap_search($ldap,$ldap_dn,$query);
            $entries = ldap_get_entries($ldap, $results);
         
            // Remove first entry (it's always blank)
            array_shift($entries);
         
            $output = array(); // Declare the output array
         
            $i = 0; // Counter
            // Build output array
            foreach($entries as $u) {
                foreach($keep as $x) {
                    // Check for attribute
                    if(isset($u[$x][0])) $attrval = $u[$x][0]; else $attrval = NULL;
         
                    // Append attribute to output array
                    $output[$i][$x] = $attrval;
                }
                $i++;
            }
         
            return $output;
        }
         
        // Example Output
         print_r(get_members());
        
        
        //print_r(get_members()); // Gets all users in 'Users'
         
        //print_r(get_members("Test Group")); // Gets all members of 'Test Group'
         
        //print_r(get_members(
                 //   array("Test Group","Test Group 2")
                //)); // EXCLUSIVE: Gets only members that belong to BOTH 'Test Group' AND 'Test Group 2'
         
        //print_r(get_members(
                  //  array("Test Group","Test Group 2"),TRUE
               // )); // INCLUSIVE: Gets members that belong to EITHER 'Test Group' OR 'Test Group 2'
        	  
        
        ?>

        Et là je me sens très con et honteux car normalement avec cette fonction (qui m'affiche tous mes utilisateurs mais sous forme array[0]=>...) je dois pouvoir afficher ma liste d'utilisateur mais je ne sais plus le faire (je suis vraiment rouillé)

        Peux-tu m'aider?

        merci

        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2013 à 15:06:14

          bon ben j'ai honte mais j'ai trouvé :)

          merci

          • Partager sur Facebook
          • Partager sur Twitter
            7 janvier 2014 à 12:24:52

            Bonjour !!

            Hotez moi d'un doute, le $ldap_host correspond au serveur AD ? (par exemple sont IP) 

            Ou au domaine ?

             // Active Directory server
                $ldap_host = "lml.grp";

            Merci ! :)

            • Partager sur Facebook
            • Partager sur Twitter

            Active directory - PHP

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown