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-Key: 130043

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: dog
dog Nov 23, 2009 at 19:46:57 (UTC)
Goto Top
öhm....
(&(objectCategory=person)(objectClass=user)(sAMAccountName=$username))

Jeder LDAP Entry, der mit PHP abgefragt wird enthält auch automatisch die DN.
Member: andste72
andste72 Nov 24, 2009 at 11:36:13 (UTC)
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?
Member: dog
dog Nov 24, 2009 at 13:57:09 (UTC)
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
Member: andste72
andste72 Nov 25, 2009 at 11:50:41 (UTC)
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
Member: dog
dog Nov 25, 2009 at 11:59:56 (UTC)
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.
Member: andste72
andste72 Nov 25, 2009 at 16:13:58 (UTC)
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.