205 lines
5.5 KiB
PHP
Executable File
205 lines
5.5 KiB
PHP
Executable File
<?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://10.11.35.1";
|
|
// Konto für den Zugriff:
|
|
$auth_user = "condecco@dms01.local";
|
|
$auth_pass = "Kx32?t21qay";
|
|
|
|
// 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.");
|
|
}
|
|
|
|
|
|
$person="Christ";
|
|
//$dn = utf8_encode( "OU=Technik,OU=Münster,OU=Mitarbeiter,DC=DMS01,DC=local");
|
|
$dn = utf8_encode( "DC=DMS01,DC=local");
|
|
$filter="(CN=calbers)";
|
|
$justthese = array( "ou", "sn", "cn", "givenName", "mail", "vorname", "memberOf", "badPasswordTime");
|
|
|
|
$sr=ldap_search($connect, $dn, $filter, $justthese);
|
|
ldap_get_option($connect,LDAP_OPT_ERROR_STRING,$error);
|
|
|
|
echo $error;
|
|
$info = ldap_get_entries($connect, $sr);
|
|
|
|
print $info["count"]." gefundene Einträge<p>";
|
|
|
|
echo "name: ".$info[ 0 ][ "sn" ][ 0 ]."<br />";
|
|
echo "benutzer_anmeldename: ".$info[ 0 ][ "cn" ][ 0 ]."<br />";
|
|
echo "vorname: ".$info[ 0 ][ "givenname" ][ 0 ]."<br />";
|
|
echo "Email: ".$info[ 0 ][ "mail" ][ 0 ]."<br />";
|
|
|
|
foreach( $info[ 0 ][ "memberof" ] as $key=>$element )
|
|
{
|
|
if ( is_int( $key) )
|
|
{ echo "schluessel: ".$key." gruppe: ".$element."<br />";
|
|
}
|
|
}
|
|
echo "<hr />";
|
|
var_dump( $info );
|
|
|
|
//var_dump( $info );
|
|
/*
|
|
foreach( $info as $key=>$element )
|
|
{
|
|
if ( is_array( $element ) )
|
|
{
|
|
foreach( $element as $key_2=>$element_2 )
|
|
{
|
|
if ( is_array( $element_2 ) )
|
|
{
|
|
foreach( $element_2 as $key_3=>$element_3 )
|
|
{
|
|
echo "===>".$key_3."|".$element_3."<===<br />";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo "==>".$key_2."|".$element_2."<==<br />";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo "=>".$key."|".$element."<=<br />";
|
|
}
|
|
}
|
|
|
|
*/
|
|
$username = "calbers";
|
|
$passwort = "Lichterc!";
|
|
echo "Versuch";
|
|
//echo checkNTUser ($username,$passwort);
|
|
echo "fertig";
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
// BaseDN festlegen:
|
|
$base_dn = "OU=Vertrieb,DC=dms01,DC=local";
|
|
//$base_dn = "";
|
|
// LDAP filter setzen: Nur Kontakt- und Benutzer-Objekte sollen zurückgegeben werden
|
|
//$filter = "(|(objectClass=contact)(objectClass=user))";
|
|
$filter = "uid=*";
|
|
// Suche starten:
|
|
if (!($search=@ldap_search($connect,$base_dn,$filter))) {
|
|
ldap_get_option($connect,LDAP_OPT_ERROR_STRING,$error);
|
|
|
|
echo $error;
|
|
|
|
die("Durchsuchen des LDAP-Servers fehlgeschlagen.");
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$sr=ldap_search($connect, $dn, $filter, $justthese);
|
|
|
|
$anzahl = ldap_count_entries($connect,$sr);
|
|
// Ergebnis der Suche in der Variablen $info ablegen:
|
|
$info = ldap_get_entries($connect, $sr);
|
|
|
|
// 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]["memberOf"][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"] = utf8_decode( 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=1>";
|
|
for ($i=0; $i<$anzahl; $i++) {
|
|
echo "<tr>";
|
|
echo "<td width=200>displayname" . $ergebnis[$i]["displayname"] . "</td>";
|
|
echo "<td width=200>abteilung " . $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>telefon" . $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;
|
|
}
|
|
|
|
?>
|