LDAP in IPS integrieren

Hi …

… ich brauch mal die PHP Spezialisten unter euch :smiley: … ich würde gerne Daten aus einem ActiveDirectory auslesen und in IPS integrieren. Im PHP-Manual habe ich gesehen, dass das grundsätzlich möglich ist. Nun bin ich zwar mittlerweile im Scripting relativ Fit, bräuchte aber mal einen kleinen Tipp von euch (vielleicht kurze Step-by-Step-Anleitung), wie ich LDAP in PHP / IPS integrieren kann …

Vielen Dank im voraus …

kurz:

  1. Die PHP-Ldap Extension php_ldap.dll (für IPS 2.3 in Version 5.3.1 !) downloaden
  2. ins $IPS/ext-Verzeichnis kopieren,
  3. IPS neu starten
  4. diese Befehle benutzen.
    Tommi

Sooo einfach?

Das hier hat mich total abgeschreckt:

Installation

LDAP Unterstützung ist in PHP im Standard nicht aktiviert. Sie müssen die Konfigurationsoption –with-ldap[=DIR] beim Übersetzen von PHP angeben. DIR bezeichnet LDAP Installationsverzeichnis. Um zusätzlich SASL Unterstützung zu aktivieren müssen Sie die –with-ldap-sasl[=DIR] Konfigurationsoption hinzufügen und sicherstellen das die Datei sasl.h auf Ihrem System vorhanden ist.

Hinweis: Hinweis für Win32 Benutzer
Diese Extension benötigt DLL-Dateien. die für Windows verfügbar seien müssen. Der FAQ-Eintrag " Wie füge ich unter Windows PATH mein PHP-Verzeichnis hinzu?" gibt hierzu weitere Informationen. Obwohl ein einfaches Kopieren der DLL-Dateien vom PHP-Verzeichnis in den Windows-Systemordner auch funktioniert (weil der Systemordner immer im PATH enthalten ist), ist dieses Vorgehen nicht empfehlenswert. Diese Extension benötigt die folgenden Dateien im PATH: libeay32.dll und ssleay32.dll
Vor PHP 4.3.0 wird zusätzlich libsasl.dll benötigt.
Wenn Sie die Oracle LDAP Bibliotheken nutzen wollen müssen Sie sicherstellen das eine gültige Oracle Umgebung aufgesetzt ist.

… danke Tommi für deine Hilfe …

… und dann gleich mal ein Script, um z.B. alle Benutzerobjekte aus einer Organisationseinheit auszulesen und in ein Array zu schreiben:

<?
 //Variablen
 $server = "172.16.1.20";  //DC
 $username = "user@domain.local";  //UPN
 $password = "password";  //Passwort
 $baseDN = "ou=Benutzer,dc=domain,dc=local";  //Distinguished-Name der obersten OU
 //LDAP-Verbindung mit Server herstellen
   $ldap = ldap_connect($server);
 
   ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
 ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
 //Bindung auf Verzeichnis
   if (ldap_bind($ldap, $username, $password))
   {
      //Suche starten
  $search = ldap_search($ldap,$baseDN,"(|(objectClass=user))");
  $anzahl = ldap_count_entries($ldap,$search);
  //Suchergebnis in $info schreiben
  $info = ldap_get_entries($ldap,$search);
  //Ergebnis in Array schreiben
  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];
     print($ergebnis[$i]["objectclass"]."
".$ergebnis[$i]["givenname"]."
".$ergebnis[$i]["sn"]."

");
  }
   }
?>

Sooo einfach?

In dem Fall und auch nur unter Windows schon. Die benötigten SSL-DLLs sind bei IPS schon enthalten, die Extension selbst gibt’s vorkompiliert. Wer sich das PHP-Ldap incl. aller Dependencies selber bauen muss, hat „deutlich mehr Spass“.

Tommi

Aaah … und ich dachte, PHP unter Windows ist GERADE ein Problem :wink: … schön, dann bin ich doch nicht so blöd :smiley:

danke noch mal, tommi …

Tach zusammen,

muss das noch mal herauskramen. Weil ich mir - als Ziel - alle IPs meiner Rechner herauskramen möchte (nutze den DHCP vom W2k8R2-Server), wollte ich mit squeeezer`s Script beginnen, mich an das AD zu koppel. Leider endet das Script (an meine Umgebung angepasst) mit der Meldung

Fatal error:  Call to undefined function ldap_connect() in C:\IP-Symcon\scripts\20896.ips.php on line 8

Die php_ldap.dll ist im ext-Ordner, IPS mehrfach neu gestartet. Auch soeben geupdatet, ohne Änderungen bzw. Ausnahmen zu machen.

Gibt es diese Funktion nicht in dem php von IPS?

EDIT: auch das Hinzufügen der php_ldap.dll in der php.ini und anschließender Diensteneustart bringt nichts. Die eingefügte Zeile ist danach sogar wieder raus. Hier meine php.ini:


```php

max_execution_time=30
register_globals=off
error_reporting=E_ALL
extension_dir="C:\IP-Symcon\ext"
memory_limit=32M
auto_prepend_file="C:\IP-Symcon\scripts\__autoinclude.inc.php"
extension = php_bz2.dll
extension = php_curl.dll
extension = php_exif.dll
extension = php_fileinfo.dll
extension = php_gd2.dll
extension = php_gettext.dll
extension = php_imap.dll
extension = php_mbstring.dll
extension = php_mysql.dll
extension = php_mysqli.dll
extension = php_pdo_mysql.dll
extension = php_pdo_odbc.dll
extension = php_pdo_pgsql.dll
extension = php_pdo_sqlite.dll
extension = php_pgsql.dll
extension = php_soap.dll
extension = php_sockets.dll
extension = php_sqlite3.dll
extension = php_tidy.dll
extension = php_xmlrpc.dll
extension = php_xsl.dll
[DATE]
date.timezone="Europe/Berlin"

Schau mal in die Logdatei… Dort steht bestimmt, dass noch weitere DLLs fehlen.

paresy

Ja, da stimmt. Weil sie nicht zur PHP-Version 5.4.8, sondern zu PHP 5.3.1 gehören. Aber das IPS-Update sollte das doch merken und aktualisieren? Im Momet scheine ich IPS 3.0 bekommen zu haben. Woher bekomme ich denn die passenden Extensions?

Weiter zu LDAP:

16.07.2013 22:11:30.753 |     0 | MESSAGE | ScriptEngine         | >Erweiterung php_ldap.dll nicht geladen. Fehlende Abhängigkeit: libsasl.dll

Die libsasl.dll hat lt. einer großen Suchmaschine wohl was mit SSL zu tun.


FERTIG!

Fehlende Extensions für die jeweilige php-Version habe ich hier gefunden (http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CFMQFjAE&url=http%3A%2F%2Fwindows.php.net%2Fdownloads%2Freleases%2Farchives%2F&ei=imboUfWqKMKvOeulgfAG&usg=AFQjCNG7jPOyNugyWQn5xYEt1QOcjvhY8g&bvm=bv.49478099,d.ZWU&cad=rja).

Dann die php_ldap.dll ins ext-Verzeichnis, die libsasl.dll in C:\IP-Symcon kopiert, Dienst neugestartet. Alles gut nach ein paar Stunden Suche und Verzweifelung. Diese DLLs werden leider nicht von IPS mitgeliefert. Schade eigentlich! Könnten doch beim Update zumindest mir angeboten (anhakbar) werden.