andste72
Goto Top

Mit PHP die OU eines Users im AD auslesen

Probleme mit LDAP und PHP.

Hallo, ich muss über PHP die OU eines Users per LDAP auslesen können.
Es funktioniert eigentlich alles, die Windows-Authentifiziereung und das auslesen der Benutzerdaten.

Mein Problem ist jetzt, dass ich die OU nicht auslesen kann, bzw. ich nicht weiss, wie ich es abfragen kann.

Kann mir da jemand Hilfestellung geben was ich abfragen muss?

Danke
Andreas

Content-ID: 130043

Url: https://administrator.de/contentid/130043

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

dog
dog 23.11.2009 um 20:46:57 Uhr
Goto Top
öhm....
(&(objectCategory=person)(objectClass=user)(sAMAccountName=$username))

Jeder LDAP Entry, der mit PHP abgefragt wird enthält auch automatisch die DN.
andste72
andste72 24.11.2009 um 12:36:13 Uhr
Goto Top
In meiner PHP-Datei sieht es in etwa so aus:
$benutzer = 'benutzename';  

if($bind = @ldap_bind($connect, "user@domäne.com", "passwort"))  
                 $search = @ldap_search($connect, $ldap_base, "(samaccountname=$benutzer)");  
                 $anzahl = @ldap_count_entries($connect,$search);
                 $info = @ldap_get_entries($connect,$search);
                 $datum  = strtotime("NOW");  
                 $nicht = 0;
                 for($i=0; $i<$anzahl; $i++){
                         $vorn = $info[$i]["givenname"];  
                         $nnam = $info[$i]["sn"];  
                         $logi = $info[$i]["samaccountname"];  
                         $mail = $info[$i]["mail"];  
                         $tele = $info[$i]["telephonenumber"];  
                         $stan = $info[$i]["physicaldeliveryofficename"];  
                         $deak = $info[$i]["useraccountcontrol"];  
                 ......
Wie muss ich den die OU abfragen?
dog
dog 24.11.2009 um 14:57:09 Uhr
Goto Top
Die OU ist kein eigenes Attribut!
Die OU eines Benutzers ist der DN minus den ersten Teil.

Benutzer Horst hat z.B. den DN:
cn=Horst,ou=buchhaltung,dc=domain,dc=local

Wenn du jetzt den CN und den DC-Teil rausstreichst erhälst du die OU (Buchhaltung)

Siehe: http://www.php.net/manual/en/function.ldap-explode-dn.php
andste72
andste72 25.11.2009 um 12:50:41 Uhr
Goto Top
Das ist mir soweit schon klar, ich beschreibe vielleciht mal kurz das problem:

unsere AD-Struktur sieht etwa so aus

Domäne (DC)
--- Standorte (OU)
StandortA (OU)
Benutzer (OU)
Sonstige(OU)
StandortB (OU)

Ich muss im Intranet die Möglichkeit geben, das Windows Passwort für einen User ändern zu können, ohne dass er sich selbst am Rechner anmelden muss.
Das funktioniert soweit ja auch. Den entsprechenden Standort kann ich aus den Attributen auslesen. Mein Problem ist, das der eine User unter

"CN=USER,OU=Benutzer,OU=StandortA,....

liegt und der nächste unter

"CN=USER,OU=Sonstige,OU=Benutzer,OU=StandortA,....

Da der DN aber komplett hinterlegt werden muss, würde ich den Pfad gerne in eine Variable schreiben, damit ich mit dieser weiterarbeiten kann.

Ich hoffe es wird jetzt ein bischen verständlicher face-smile
dog
dog 25.11.2009 um 12:59:56 Uhr
Goto Top
Du musst erst über den sAMAccountName den Benutzer suchen und dann die DN, die du so als Ergebnis bekommst als Base DN benutzen, dann kannst du ldap_read verwenden.
andste72
andste72 25.11.2009 um 17:13:58 Uhr
Goto Top
Ich Stand irgendwie auf dem Schlauch!

Habe in der for-Schleife noch folgendes eingetragen:

$base = $info[$i]["dn"];  

und schon hat es funktionert. Ich habe es vorher immer mit der versucht, das ging aber nicht.

Danke für die Hilfe.