diff options
Diffstat (limited to 'ldap-site-mngmt/webinterface/lib/ldap.inc.php')
-rw-r--r-- | ldap-site-mngmt/webinterface/lib/ldap.inc.php | 180 |
1 files changed, 119 insertions, 61 deletions
diff --git a/ldap-site-mngmt/webinterface/lib/ldap.inc.php b/ldap-site-mngmt/webinterface/lib/ldap.inc.php index f7f6be07..79d50e61 100644 --- a/ldap-site-mngmt/webinterface/lib/ldap.inc.php +++ b/ldap-site-mngmt/webinterface/lib/ldap.inc.php @@ -1,13 +1,13 @@ <?php /** * ldap.inc.php - LDAP-Bibliothek -* Diese Bibliothek enthält alle Funktionen für den Zugriff auf den LDAP-Server. +* Diese Bibliothek enth�lt alle Funktionen f�r den Zugriff auf den LDAP-Server. * * @param string ldapError * @param resource ds * -* @author Timothy Burk, Mahir Yildirim, Johannes Sprenger, Daniel Höfler -* @copyright Timothy Burk, Mahir Yildirim, Johannes Sprenger, Daniel Höfler +* @author Timothy Burk, Mahir Yildirim, Johannes Sprenger, Daniel H�fler +* @copyright Timothy Burk, Mahir Yildirim, Johannes Sprenger, Daniel H�fler */ //Konfiguration laden require_once("config.inc.php"); @@ -15,9 +15,9 @@ require_once("config.inc.php"); $ldapError = null; /** -* uniLdapConnect($userRdn, $userPwd) - Führt den Bind am Gruppe1-LDAP-Server durch +* uniLdapConnect($userRdn, $userPwd) - F�hrt den Bind am Gruppe1-LDAP-Server durch * -* @param string userRdn UID für den Login +* @param string userRdn UID f�r den Login * @param string userPwd Loginpasswort * * @return boolean Erfolg bzw. Misserfolg @@ -38,7 +38,7 @@ function uniLdapConnect($userRdn = "", $userPwd = "") { if($userRdn != "" && $userPwd != "") { # Anmeldung als User. if($result = @ldap_bind($ds, "uid=".$userRdn.",ou=people,".$suffix, $userPwd)) { - # Bind erfolgreich ausgeführt + # Bind erfolgreich ausgef�hrt return $ds; } else { # Bind nicht erfolreich. @@ -53,7 +53,7 @@ function uniLdapConnect($userRdn = "", $userPwd = "") { } else { # Anonymer Bind. if($result = ldap_bind($ds)) { - # Anonymer Bind erfolgreich ausgeführt + # Anonymer Bind erfolgreich ausgef�hrt return $ds; } else { # Anonymer Bind nicht erfolreich. @@ -77,9 +77,9 @@ function uniLdapConnect($userRdn = "", $userPwd = "") { /** -* rzLdapConnect($userRdn, $userPwd) - Führt den Bind am RZ-LDAP-Server durch +* rzLdapConnect($userRdn, $userPwd) - F�hrt den Bind am RZ-LDAP-Server durch * -* @param string userRdn UID für den Login +* @param string userRdn UID f�r den Login * @param string userPwd Loginpasswort * * @return boolean Erfolg bzw. Misserfolg @@ -99,7 +99,7 @@ function rzLdapConnect($userRdn = "", $userPwd = "") { if($userRdn != "" && $userPwd != "") { # Anmeldung als User. if($result = @ldap_bind($ds, "uid=".$userRdn.",ou=people,".$suffix_rz, $userPwd)) { - # Bind erfolgreich ausgeführt + # Bind erfolgreich ausgef�hrt return $ds; } else { # Bind nicht erfolreich. @@ -113,7 +113,7 @@ function rzLdapConnect($userRdn = "", $userPwd = "") { } else { # Anonymer Bind. if($result = ldap_bind($ds)) { - # Anonymer Bind erfolgreich ausgeführt + # Anonymer Bind erfolgreich ausgef�hrt return $ds; } else { # Anonymer Bind nicht erfolreich. @@ -133,14 +133,14 @@ function rzLdapConnect($userRdn = "", $userPwd = "") { /** * uniLdapSearch($ds, $base, $filter, $attributes, $sort, $mode, $resultLimit, $timeout) - * Sucht Einträge im LDAP-Server. + * Sucht Eintr�ge im LDAP-Server. * - * Durchsucht den LDAP-Server vom Punkt $base ab nach Einträgen, die $filter entsprechen. Falls in $sort ein Feldname angegeben - * wurde, so wird danach sortiert. (ACHTUNG: die Funktion ldap_sort() ist nicht dokumentiert! Ich weiß nicht ob sie Sortierung - * nach mehreren Feldern zulässt und wie sie sich verhält, wenn zu einem Attribut mehrere Werte existieren.) $mode definiert die - * Art der Suche, wohingegen $resultLimit und $timeout die Anzahl der Ergebnis-Einträge bzw. die maximalen Suchdauer einschränken. - * Zurückgegeben werden die Attribute, die im Array $attributes aufgeführt sind. Im Erfolgsfalle wird ein multidimensionales Array - * zurückgeliefert, im Fehlerfalle FALSE. Dann steht die Fehlermeldung in der Variablen $ldapError. + * Durchsucht den LDAP-Server vom Punkt $base ab nach Eintr�gen, die $filter entsprechen. Falls in $sort ein Feldname angegeben + * wurde, so wird danach sortiert. (ACHTUNG: die Funktion ldap_sort() ist nicht dokumentiert! Ich wei� nicht ob sie Sortierung + * nach mehreren Feldern zul�sst und wie sie sich verh�lt, wenn zu einem Attribut mehrere Werte existieren.) $mode definiert die + * Art der Suche, wohingegen $resultLimit und $timeout die Anzahl der Ergebnis-Eintr�ge bzw. die maximalen Suchdauer einschr�nken. + * Zur�ckgegeben werden die Attribute, die im Array $attributes aufgef�hrt sind. Im Erfolgsfalle wird ein multidimensionales Array + * zur�ckgeliefert, im Fehlerfalle FALSE. Dann steht die Fehlermeldung in der Variablen $ldapError. * * @param string $base die DN, das Verzeichnis, in dem die Suche startet * @@ -148,16 +148,16 @@ function rzLdapConnect($userRdn = "", $userPwd = "") { * * @param array attributes die Attributnamen, deren Werte im Ergebnis enthalten sein sollen. * - * @param string $sort Sortiert die Ergebnis-Einträge nach dem angegebenen Feldnamen (undokumentiert! s.o.) + * @param string $sort Sortiert die Ergebnis-Eintr�ge nach dem angegebenen Feldnamen (undokumentiert! s.o.) * - * @param string $mode Der Modus: "one" liefert einen Eintrag, "list" alle Einträge des Verzeichnisses und "sub" - * schließt alle Untervezeichnisse mit ein. + * @param string $mode Der Modus: "one" liefert einen Eintrag, "list" alle Eintr�ge des Verzeichnisses und "sub" + * schlie�t alle Untervezeichnisse mit ein. * - * @param int $resultLimit die maximale Anzahl zurückgegebener Einträge + * @param int $resultLimit die maximale Anzahl zur�ckgegebener Eintr�ge * * @param int $timeout die maximale Suchzeit, bevor der LDAP-Server abbrechen soll * - * @return mixed multidimensionales array mit den Einträgen im Erfolgsfall, FALSE wenn ein Fehler auftrat + * @return mixed multidimensionales array mit den Eintr�gen im Erfolgsfall, FALSE wenn ein Fehler auftrat * * @see ldap_read() * @see ldap_list() @@ -201,8 +201,8 @@ function uniLdapSearch($ds, $base, $filter, $attributes, $sort, $mode, $resultLi return false; } } else { - # Kein gültiger Modus angegeben. - $ldapError .= "Es wurde kein gültiger Modus angegeben."; + # Kein g�ltiger Modus angegeben. + $ldapError .= "Es wurde kein g�ltiger Modus angegeben."; return false; } if($abfrage && ($entries = ldap_get_entries($ds, $resource))) { @@ -218,11 +218,11 @@ function uniLdapSearch($ds, $base, $filter, $attributes, $sort, $mode, $resultLi /** * uniLdapAdd($ds, $dn, $daten, [$objectclass]) * -* Fügt ein neues Objekt in die LDAP-Datenbank ein. +* F�gt ein neues Objekt in die LDAP-Datenbank ein. * * @param resource $ds Datenbankhandler * @param string $dn Distinguished Name des neuen Eintrages -* @param array $daten Assoziatives Array mit den gewünschten Attributen +* @param array $daten Assoziatives Array mit den gew�nschten Attributen * @param string $objectclass Objektklasse des neuen Eintrages (Standard = "") * * @return boolean TRUE wenn Eintrag erfolgreich, FALSE wenn ein Fehler aufgetreten ist. @@ -245,22 +245,22 @@ function uniLdapAdd($ds, $dn, $daten, $objectclass = "") { /** * uniLdapModify($ds, $dn, $daten_alt, $daten_neu, [$i]) * -* Universalfunktion zum Ändern von Attributen und Werten. -* Bei Änderungsskripten muss zuerst ein Formular mit den alten Daten gefüllt werden. Die hierfür -* durchgeführte Suche wird in einem unbehandelten Array in der SESSION gespeichert und wieder -* ausgelesen, sobald die Änderungen gespeichert werden sollen. Es wird anschließend an diese Funktion -* (als $daten_alt)gegeben, die das Array mit ldapArraySauber von allen unnötigen Einträgen befreit. -* $daten_alt entspricht dann strukturell dem POST-Array des Änderungsformulars ($daten_neu). -* Letzteres wird nun durch laufen, alle Einträge werden mit ihrer Entsprechnung aus $daten_alt verglichen -* und ggf. werden dann Attribute geändert, gelöscht oder hinzugefügt. +* Universalfunktion zum �ndern von Attributen und Werten. +* Bei �nderungsskripten muss zuerst ein Formular mit den alten Daten gef�llt werden. Die hierf�r +* durchgef�hrte Suche wird in einem unbehandelten Array in der SESSION gespeichert und wieder +* ausgelesen, sobald die �nderungen gespeichert werden sollen. Es wird anschlie�end an diese Funktion +* (als $daten_alt)gegeben, die das Array mit ldapArraySauber von allen unn�tigen Eintr�gen befreit. +* $daten_alt entspricht dann strukturell dem POST-Array des �nderungsformulars ($daten_neu). +* Letzteres wird nun durch laufen, alle Eintr�ge werden mit ihrer Entsprechnung aus $daten_alt verglichen +* und ggf. werden dann Attribute ge�ndert, gel�scht oder hinzugef�gt. * * @param resource $ds Datenbankhandler * @param string $dn Distinguished Name des Eintrages -* @param array $daten_alt Dreidimensionales mixed Array der Form $array[int][string][int], so wie es von uniLdapSearch zurückgeliefert wird. +* @param array $daten_alt Dreidimensionales mixed Array der Form $array[int][string][int], so wie es von uniLdapSearch zur�ckgeliefert wird. * @param array $daten_neu Zweidimensionales mixed Array der Form $array[string][int], so wie ein Formular in $_POST gespeichert ist. * @param int $i Gibt an, welcher Eintrag der ersten Dimension von $daten_alt verwendet werden soll. (Standard: $i=0) * -* @return boolean TRUE wenn Änderung erfolgreich, FALSE wenn ein Fehler aufgetreten ist. +* @return boolean TRUE wenn �nderung erfolgreich, FALSE wenn ein Fehler aufgetreten ist. * * @see ldap_mod_replace() * @see ldap_mod_add() @@ -279,16 +279,16 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { if(!(is_array($value_neu))) { # Wenn $value_neu ein Skalar ist... # (d.h., das Attribut $key darf nur einen Wert annehmen) - $value_neu = htmlentities(str_replace(chr(160),"",trim($value_neu))); // ungewollte Leerzeichen und löschen + $value_neu = htmlentities(str_replace(chr(160),"",trim($value_neu))); // ungewollte Leerzeichen und l�schen if (isset($daten_alt[$key])) { - $daten_alt[$key] = str_replace(chr(160),"",trim($daten_alt[$key])); // ungewollte Leerzeichen und löschen + $daten_alt[$key] = str_replace(chr(160),"",trim($daten_alt[$key])); // ungewollte Leerzeichen und l�schen } else { $daten_alt[$key] = ""; } if($daten_alt[$key] == "" && $value_neu != "") { # FALL 1: # Alter Wert ist leer, neuer Wert ist nicht leer. - # Füge neues Attribut hinzu. + # F�ge neues Attribut hinzu. if(ldap_mod_add($ds, $dn, array($key => $value_neu))) { $meldung .= "Add successfull: ".$key." -> ".$value_neu."<br>"; } else { @@ -298,7 +298,7 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { } else if($daten_alt[$key] != "" && $value_neu == "") { # FALL 2: # Alter Wert ist nicht leer, neuer Wert ist leer. - # Lösche Attribut. + # L�sche Attribut. if(ldap_mod_del($ds, $dn, array($key => $daten_alt[$key]))) { $meldung .= "Delete successfull: ".$key." -> ".$daten_alt[$key]."<br>"; } else { @@ -308,7 +308,7 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { } else if($daten_alt[$key] != "" && $value_neu != "" && $daten_alt[$key] != $value_neu) { # FALL 3: # Alter und neuer Wert sind nicht leer und beide sind ungleich. - # Ändere das Attribut. Der bisherige Wert wird überschrieben. + # �ndere das Attribut. Der bisherige Wert wird �berschrieben. if(ldap_mod_replace($ds, $dn, array($key => $value_neu))) { $meldung .= "Replace successfull: ".$key." -> ".$value_neu."<br>"; } else { @@ -316,7 +316,7 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { } } else { - # In allen anderen Fällen ist keine Änderung nötig + # In allen anderen F�llen ist keine �nderung n�tig } } else { # Wenn $value_neu ein Array ist... @@ -326,7 +326,7 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { $value_alt = numArraySauber($daten_alt[$key]); foreach($value_alt as $item) { #$item = htmlentities($item); - # Lösche alle alten Werte des Attributes $key. + # L�sche alle alten Werte des Attributes $key. if(ldap_mod_del($ds, $dn, array($key => $item))) { $meldung .= "Delete successfull: ".$key." -> ".$item."<br>"; } else { @@ -336,7 +336,7 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { } foreach($value_neu as $item) { $item = htmlentities($item); - # Füge alle neuen Werte des Attributes $key ein. + # F�ge alle neuen Werte des Attributes $key ein. if(ldap_mod_add($ds, $dn, array($key => $item))) { $meldung .= "Add successfull: ".$key." -> ".$item."<br>"; } else { @@ -355,36 +355,36 @@ function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) { } /** -* uniLdapDelete löscht beliebige Einträge mit dessen Subtree aus der Datenbank. -* Dabei wird der wird der Baum ab dem Eintrag $dn zu allen Blättern durchlaufen (Es -* können nur Blätter gelöscht werden!!) und die Einträge von hinten her bis einschließlich -* $dn gelöscht +* uniLdapDelete l�scht beliebige Eintr�ge mit dessen Subtree aus der Datenbank. +* Dabei wird der wird der Baum ab dem Eintrag $dn zu allen Bl�ttern durchlaufen (Es +* k�nnen nur Bl�tter gel�scht werden!!) und die Eintr�ge von hinten her bis einschlie�lich +* $dn gel�scht * * @param resource ds LDAP Directory Handle * @param string dn Distiguished Name * * @return boolean * -* @author Daniel Höfler +* @author Daniel H�fler */ function uniLdapDelete($ds, $dn) { - # Überprüfung, ob zu löschender Eintrag vorhanden ist + # �berpr�fung, ob zu l�schender Eintrag vorhanden ist if(!uniLdapSearch($ds, $dn, "objectclass=*", array("*"), "", "one", 0, 0)) { - $ldapError .= "Löschen fehlgeschlagen: Eintrag nicht gefunden".ldap_error($ds)."<br>\n"; + $ldapError .= "L�schen fehlgeschlagen: Eintrag nicht gefunden".ldap_error($ds)."<br>\n"; return false; } # Auslesen der Daten unterhalb von $dn $daten = uniLdapSearch($ds, $dn, "objectclass=*", array("*"), "", "list", 0, 0); - # for-Schleife wird nur ausgeführt, falls sich unterhalb von $dn Einträge befinden + # for-Schleife wird nur ausgef�hrt, falls sich unterhalb von $dn Eintr�ge befinden for($i = 0; $i < $daten['count']; $i++){ uniLdapDelete($ds, $daten[$i]['dn']); } - # löschen der Blätter + # l�schen der Bl�tter if(ldap_delete($ds, $dn)) { return true; } else { - $ldapError .= "Löschen fehlgeschlagen".ldap_error($ds)."<br>\n"; + $ldapError .= "L�schen fehlgeschlagen".ldap_error($ds)."<br>\n"; return false; } } @@ -398,17 +398,17 @@ function uniLdapDelete($ds, $dn) { # Weitere LDAP Funktionen # -# LDAP Funktionen um alle Objekte der AU eines bestimmten Typs mit gewählten Attributen zu holen +# LDAP Funktionen um alle Objekte der AU eines bestimmten Typs mit gew�hlten Attributen zu holen # -function get_hosts($auDN,$attributes) +function get_hosts($auDN,$attributes,$sortattr) { global $ds, $suffix, $ldapError; - #if ( $sortattr == ""){ - # $sortattr = "hostname"; - #} + if ( $sortattr == ""){ + $sortattr = "hostname"; + } - if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(objectclass=Host)", $attributes, "hostname", "sub", 0, 0))) { + if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(objectclass=Host)", $attributes, $sortattr, "sub", 0, 0))) { # redirect(5, "", $ldapError, FALSE); echo "no search"; die; @@ -533,6 +533,39 @@ function get_pxeconfigs($baseDN,$attributes) } } +function get_pxeconfigs2($clientDN,$attributes) +{ + global $auDN, $ds, $suffix, $ldapError; + + if ($clientDN == ""){ + $filter = "(objectclass=PxeConfig)"; + }else{ + $filter = "(&(objectclass=PxeConfig)(pxeclientdn=$clientDN))"; + } + + if(!($result = uniLdapSearch($ds, "cn=pxe,".$auDN, $filter, $attributes, "", "list", 0, 0))) { + # redirect(5, "", $ldapError, FALSE); + echo "no search"; + die; + } + elseif(count($result) == 0){return $result;} + else{ + $result = ldapArraySauber($result); + # print_r($result);printf("<br><br>"); + $pxe_array = array(); + foreach ($result as $item){ + foreach ($attributes as $att){ + $atts[$att] = $item[$att]; + } + $atts['baseDN'] = $baseDN; + $atts['auDN'] = $auDN; + $pxe_array[] = $atts; + } + if($attributes != false ){return $pxe_array;} + else{return $result;} + } +} + function get_menuentries($baseDN,$attributes) { global $ds, $suffix, $ldapError; @@ -712,6 +745,31 @@ function get_childau($auDN,$attributes) } } +function get_all_aus($attributes) +{ + global $ds, $auDN, $suffix, $ldapError; + + if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(objectclass=AdministrativeUnit)", $attributes, "ou", "sub", 0, 0))) { + # redirect(5, "", $ldapError, FALSE); + echo "no search"; + die; + } + else { + $result = ldapArraySauber($result); + + $childau_array = array(); + foreach ($result as $item){ + foreach ($attributes as $att){ + $atts[$att] = $item[$att]; + } + $atts['auDN'] = $auDN; + $childau_array[] = $atts; + } + if($attributes != false ){return $childau_array;} + else{return $result;} + } +} + function get_au_data($auDN,$attributes) { global $ds, $suffix, $ldapError; |