Im Rahmen eines kleinen Projekts habe ich mich mit dem Active Directory Zugriff via PHP beschäftigt. Es gibt zwar eine Menge Anleitungen doch man muss sich trotzdem noch ziemlich viel zusammensuchen. Um dies jetzt etwas zu vereinfachen habe ich eine simple PHP Klasse geschrieben die den Lesezugriff auf ein Windows 2003 Active Directory ermöglich.
Ich weiß nicht in wie weit das ganze auf einem Windows System läuft. Ich habe es auf einem Debian System mit Apache2 und PHP5-ldap im Einsatz.
class LDAP {
public $basedn = "dc=example,dc=local";
/* Verbindungsaufbau */
public function connect($server) {
$this->connectid = @ldap_connect($server);
$this->error($this->connectid);
ldap_set_option($this->connectid, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($this->connectid, LDAP_OPT_REFERRALS,0);
}
/* LDAP Binding */
public function bind($user,$password) {
$binding = @ldap_bind($this->connectid,$user,$password);
$this->error($binding);
}
/* Debug */
public function debug($enabled = false) {
if($enabled) {
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
}
}
/* Error Handling */
protected function error($result) {
if(!$result) {
print(“Error: “.ldap_error($this->connectid).” (“.ldap_errno($this->connectid).”)\r\n”);
}
}
/* Suchfunktion uebergeben wird der Filter String */
public function search($filter) {
$sr = @ldap_search($this->connectid,$this->basedn,$filter);
//$this->error($sr);
return $this->result($sr);
}
/* Result */
public function result($result) {
$ads_result = @ldap_get_entries($this->connectid,$result);
return $ads_result;
}
/* Beenden */
public function close() {
ldap_close($this->connectid);
}
}
?>
Um den Einsatz der Klasse zu erläutern hier ein kleines Anwendungsbeispiel. Man übergibt der Klasse einen LDAP Filter String und sie antwortet darauf mit einem Ergebnis in Form eines Arrays.
error_reporting( E_ALL | E_STRICT );
require("ldap.class.php");
$ldap_user = "exampleuser@example.local";
$ldap_pass = "password";
$ldap = new LDAP(); // LDAP Objekt erstellen
$ldap->debug(true); // Debug Modus aktivieren
$ldap->connect($server); // LDAP Verbindung aufbauen
$ldap->bind($ldap_user,$ldap_pass); // LDAP Binding
$filter = “(&(objectCategory=user)(cn=*))”; // LDAP Filterstring
$result = $ldap->search($filter); // LDAP Suche ausfuehren
print “
";
print_r($result);
print "
“;
$ldap->close(); // Verbindung trennen
?>
Ich wünsche viel Spaß damit, über Verbesserungsvorschläge und/oder Kritik würde ich mich sehr freuen.
Recent Comments