<?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;
}

?>