Hallo,
ich möchte gerne unsere AD mittels PHP auslesen... Ich habe auch schon eine Abfrage hinbekommen:
PHP-Code:
<?php
echo "<html><head>";
echo "<title>LDAP-Zugriff auf ein Active Directory</title>";
echo "</head><body>";
// *** Parameter für den LDAP-Zugriff ***
// Adresse des Domänencontrollers:
$ldap_server = "ldap://192.168.10.5";
// Konto für den Zugriff:
$auth_user = "LDAP@XXXXX.net";
$auth_pass = "XXXXXXX";
// Mit Server verbinden:
if (!($connect=@ldap_connect($ldap_server))) {
die("Keine Verbindung zum Verzeichnis-Server möglich.");
}
// Diese Parameter sind nötig für den Zugriff auf ein Active Directory:
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
// An Server binden:
if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
die("Bind fehlgeschlagen.");
}
// BaseDN festlegen:
$base_dn = "OU=Angestellte,OU=TEST,DC=cf,DC=net";
// LDAP filter setzen: Nur Kontakt- und Benutzer-Objekte sollen zurückgegeben werden
$filter = "(|(objectClass=contact)(objectClass=user))";
// Suche starten:
if (!($search=@ldap_search($connect,$base_dn,$filter))) {
die("Durchsuchen des LDAP-Servers fehlgeschlagen.");
}
$anzahl = ldap_count_entries($connect,$search);
print_r($anzahl);
// Ergebnis der Suche in der Variablen $info ablegen:
$info = ldap_get_entries($connect, $search);
//print_r($info);
// Nur die relevanten Teile des $info-Arrays in ein $ergebnis-Array übernehmen:
// (Verbessert die Übersichtlichkeit)
// Hinweis: utf8_decode dekodiert Umlaute richtig.
for ($i=0; $i<$anzahl; $i++) {
$ergebnis[$i]["objectclass"] = $info[$i]["objectclass"][3];
$ergebnis[$i]["displayname"] = utf8_decode($info[$i]["displayname"][0]);
$ergebnis[$i]["givenname"] = utf8_decode($info[$i]["givenname"][0]);
$ergebnis[$i]["sn"] = utf8_decode($info[$i]["sn"][0]);
$ergebnis[$i]["mail"] = $info[$i]["mail"][0];
$ergebnis[$i]["telephonenumber"]= $info[$i]["telephonenumber"][0];
// Der distinguishedName, also z.B. CN=blub,OU=...,DC=test,DC=local
// soll dazu verwendet werden, aus den OU-Angaben die Abteilung
// zu erzeugen:
//$ergebnis[$i]["abteilung"] = erzeuge_abteilung($info[$i][dn]);
$ergebnis[$i]["abteilung"] = $info[$i]["physicaldeliveryofficename"][0];
}
// Array alphabetisch sortieren, usort erwartet dazu eine Vergleichsfunktion:
usort($ergebnis, 'vergleich');
// Array $ergebnis in einer Tabelle ausgeben:
echo "<table border=0>";
for ($i=0; $i<$anzahl; $i++) {
echo "<tr>";
echo "<td width=200>" . $ergebnis[$i]["displayname"] . "</td>";
echo "<td width=200>" . $ergebnis[$i]["abteilung"] . "</td>";
/*
if (empty($ergebnis[$i]["mail"]))
echo "<td width=200> - </td>";
else
echo "<td width=200> " . $ergebnis[$i]["mail"] . "</td>";
*/
if (empty($ergebnis[$i]["telephonenumber"]))
echo "<td width=100> - </td>";
else
echo "<td width=100>" . $ergebnis[$i]["telephonenumber"] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "</body></html>";
function erzeuge_abteilung ($dn) {
// $dn ist z.B.: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer,DC=test,DC=local
$pos = strpos($dn, ',DC=');
$dn = substr($dn, 0, $pos);
// -> $dn: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer
$pos = strpos($dn, ',OU=');
$dn = substr($dn, $pos);
// -> $dn: ,OU=Nord,OU=Verkauf,OU=Benutzer
$abteilung = "";
$abteilungen = explode(',OU=', $dn);
// -> $abteilungen: Nord, Verkauf, Benutzer
for ($j = count($abteilungen)-1; $j > 0; $j--) {
$abteilung = $abteilung . "-" . $abteilungen[$j];
}
// -> $abteilung: - Benutzer - Verkauf - Nord
$abteilung = substr($abteilung, 1);
// -> $abteilung: Benutzer - Verkauf - Nord
return $abteilung;
}
function vergleich($wert_a, $wert_b)
{
// Sortierung nach dem displayname
$a = $wert_a["displayname"];
$b = $wert_b["displayname"];
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : +1;
}
?>
Nun meine Frage, wie kann ich weitere OU´s mit einbinden?
Wie kann ich bestimmte Benutzer ausblenden?
Vielen Dank scon mal für eure Hilfe.
Grüße