Moderators: jason102178, Florian, Thorsten, JochenS
<?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.200.100";
// Konto für den Zugriff:
$auth_user = "Administrator@test.local";
$auth_pass = "admin";
// 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=Benutzer,DC=test,DC=local";
// 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);
// Ergebnis der Suche in der Variablen $info ablegen:
$info = ldap_get_entries($connect, $search);
// 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]);
}
// 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;
}
?>$PMF_LDAP['ldap_port'] = 389;andi1000 wrote:
Update:
Ich habe jetzt von http://www.serverhowto.de ein Beispielscript in den faq Ordner kopiert und mit denselben Infos gefüttert wie die faq. Das Beispielscript hat fehlerfrei funktioniert. Also muss es wohl doch irgendwo innerhalb der faq oder dem Setup der faq bei mir ein Problem geben.
Angehängt mal das Beispielscript, ich sehe da auch keinen Unterschied zu den Einträgen/Funktionen in der faq, außer dass dort kein Port übergeben wird und das "ldap://" habe ich mal weggelassen - klappte auch.
In dem ldap.php der faq habe ich gesehen, dass dorch irgendwo ein Fehlerlog angelegt wird/werden kann - aber ich finde es nicht.
- Code: Select all
<?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.200.100";
// Konto für den Zugriff:
$auth_user = "Administrator@test.local";
$auth_pass = "admin";
// 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=Benutzer,DC=test,DC=local";
// 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);
// Ergebnis der Suche in der Variablen $info ablegen:
$info = ldap_get_entries($connect, $search);
// 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]);
}
// 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;
}
?>
Return to Webserver and configuration
Users browsing this forum: No registered users and 4 guests