Ankündigung

Einklappen
Keine Ankündigung bisher.

LDAP User Gruppen insert into Mysql

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • LDAP User Gruppen insert into Mysql

    Hallo,

    ich wühle das alte Thema ja nur ungern wieder auf aber ich bastel grad an etwas ähnlichem.
    Ich würde gern wie oben im Script beschrieben die ldap Daten auslesen UND dann in MySQL abspeichern.
    Soweit so gut... so lange wie nur eine Information hinterlegt ist geht das auch perfekt.
    Aber kann mir jemand anhand eine Beispiels zeigen wie ich die Gruppen von memberof in die MySQL Datenbank bekomme?
    Ich schaffe es nur das die letzte Gruppe des Users abspeichert wird.
    Am besten wäre es natürlich wenn man die Gruppen dann getrennt abspeichern könnte für jeden User.
    also ungefähr so
    id / displayname / group1 / group2 / group3 / und so weiter...


    Hier der Code der von mir angepasst wurde.
    PHP-Code:
    <?php 

    /** 
     * @author Phiron 
     * @copyright 2010 
     */ 


    $phpAD_ldap "ldap://192.168.100.2"
    $phpAD_user "*******"
    $phpAD_pass "*******"
    $phpAD_dn "OU=bad,DC=boy,DC=com,DC=ad"
    $error ""

    $attributes = array("displayname""samaccountname""memberof"); 
    $filter "(!(cn=''))"



    $ad ldap_connect($phpAD_ldap389)  
              or die(
    "Couldn't connect to AD!"); 

    ldap_set_option($adLDAP_OPT_PROTOCOL_VERSION3); 
    ldap_set_option($adLDAP_OPT_REFERRALS0);  
    ldap_get_option($ad,LDAP_OPT_ERROR_STRING,$error); 

    $bd ldap_bind($ad,$phpAD_user,$phpAD_pass
              or die(
    "Couldn't bind to AD!"); 

    $result ldap_search($ad$phpAD_dn$filter$attributes); 
    $entries ldap_get_entries($ad$result); 



    echo 
    $error

    ldap_unbind($ad); 

    ?> 
    <html> 
    <head> 

    </head> 
    <body> 
        <table border="1" align=center> 
            <tr> 
                <td align=center> 
                    <big> displayname 
                </td> 
                <td align=center> 
                    <big> samaccountname 
                </td> 
                <td align=center> 
                    <big> memberof 
                </td> 
            </tr> 



    <? 

    $con = mysql_connect("localhost","DBAdmin","0123501848"); 
        if (!$con) 
        { 
        die('Could not connect: ' . mysql_error()); 
        } 

    $sel = mysql_select_db("amaz", $con); 
        if (!$sel) 
        { 
        die('Could not select DB: ' . mysql_error()); 
        } 





        for ($i=0; $i<$entries["count"]; $i++) 
        { 

        $dis = $entries[$i]["displayname"][0]; 
        $sam = $entries[$i]["samaccountname"][0]; 
        $mem = $entries[$i]["memberof"][0]; 
             
                mysql_query("INSERT INTO ldap (displayname, samaccountname, memberof) 
                VALUES ('$dis', '$sam','$mem')");         

        } 
         
    mysql_close($con); 
    ?>  



    <?php 
         
        
    for ($i=0$i<$entries["count"]; $i++) 
        { 
            echo 
    '<tr>'
            echo 
    '<td>'
            echo 
    $entries[$i]["displayname"][0]; 
            echo 
    '</td>'
            echo 
    '<td>'
            echo 
    $entries[$i]["samaccountname"][0]; 
            echo 
    '</td>'
            echo 
    '<td>'
            echo 
    $entries[$i]["memberof"][0]; 
            echo 
    '</td>'
            echo 
    '</tr>'
        } 
         
    ?> 

    </table> 


    </body> 
    </html>
    wäre echt schön wenn mir jemand helfen kann.
    ich beiße mir daran schon die Zähne aus...


  • #2
    Nachdem zumindest ich keinen LDAP-Server habe mit dem ich testen kann: Was klappt denn nicht? Das Auslesen der LDAP-Sachen oder das Eintragen in die DB?

    Kommentar


    • #3
      Also mit folgendem code könnte ich mir die einzelnen Gruppen noch zusätzlich auslesen.

      PHP-Code:
      <?php
      function get_groups($user) {
          
      // Active Directory server
          
      $ldap_host "ad.domain";
       
          
      // Active Directory DN, base path for our querying user
          
      $ldap_dn "CN=Users,DC=ad,DC=domain";
       
          
      // Active Directory user for querying
          
      $query_user "jane@".$ldap_host;
          
      $password "password1234!";
       
          
      // Connect to AD
          
      $ldap ldap_connect($ldap_host) or die("Could not connect to LDAP");
          
      ldap_bind($ldap,$query_user,$password) or die("Could not bind to LDAP");
       
          
      // Search AD
          
      $results ldap_search($ldap,$ldap_dn,"(samaccountname=$user)",array("memberof","primarygroupid"));
          
      $entries ldap_get_entries($ldap$results);
          
          
      // No information found, bad user
          
      if($entries['count'] == 0) return false;
          
          
      // Get groups and primary group token
          
      $output $entries[0]['memberof'];
          
      $token $entries[0]['primarygroupid'][0];
          
          
      // Remove extraneous first entry
          
      array_shift($output);
          
          
      // We need to look up the primary group, get list of all groups
          
      $results2 ldap_search($ldap,$ldap_dn,"(objectcategory=group)",array("distinguishedname","primarygrouptoken"));
          
      $entries2 ldap_get_entries($ldap$results2);
          
          
      // Remove extraneous first entry
          
      array_shift($entries2);
          
          
      // Loop through and find group with a matching primary group token
          
      foreach($entries2 as $e) {
              if(
      $e['primarygrouptoken'][0] == $token) {
                  
      // Primary group found, add it to output array
                  
      $output[] = $e['distinguishedname'][0];
                  
      // Break loop
                  
      break;
              }
          }
       
          return 
      $output;
      }
       
      // Example Usage
      print_r(get_groups("name1"));
      print_r(get_groups("name2"));
      ?>
      nur die gruppen sind dann in der
      PHP-Code:
      print_r(get_groups("name1")); 
      wie bekomme ich das in die Mysql Datenbank ?

      Kommentar


      • #4
        Habs nun umständlich mit

        PHP-Code:
        $mem1 $entries[$i]["memberof"][0];  
        $mem2 $entries[$i]["memberof"][1]; 
        $mem3 $entries[$i]["memberof"][2]; 
        $mem4 $entries[$i]["memberof"][3]; 
                  
                    
        mysql_query("INSERT INTO ldap (displayname, samaccountname, gruppe1, gruppe2, gruppe3, gruppe4)  
                    VALUES ('
        $dis', '$sam','$mem1','$mem2','$mem3','$mem4')");          

            } 
        hinbekommen =)

        Kommentar


        • #5
          Besser wäre es eine zusätzliche Tabelle ldap_users_groups haben die so aussieht:
          - userid
          - groupname

          und die ganzen gruppe*-Spalten in der jetzigen Tabelle wegzulassen. Eintragen könntest du das dann Beispiel so:
          PHP-Code:
          mysql_query("INSERT INTO ldap (displayname, samaccountname)  VALUES ('$dis', '$sam')");  
          $userid mysql_insert_id();

          foreach (
          $entries[$i]["memberof"] as $groupname) {
               
          mysql_query("INSERT INTO ldap_users_groups (userid,groupname) VALUES (".$userid.",'".$groupname."')");

          Hinweise:
          1. SQL-Statements in Schleifen sind ungünstig von der Performance. Im Produktiveinsatz solltest du das vermeiden und stattdessen nur einen Query absetzen, dafür mehrere VALUES übergeben. Siehe SQL Doku zu Inserts.
          2. mysql_*-Funktionen sind veraltet. In der Doku steht aber ohnehin welche die entsprechenden Befehle für PDO oder mysqli sind.

          Kommentar


          • #6
            Danke für den tipp @ Tropi,
            das werde ich mir mal zu Herzen nehmen =)

            Kommentar

            Lädt...
            X