summaryrefslogtreecommitdiffstats
path: root/ldap-site-mngmt/webinterface/lib
diff options
context:
space:
mode:
Diffstat (limited to 'ldap-site-mngmt/webinterface/lib')
-rw-r--r--ldap-site-mngmt/webinterface/lib/au_management_functions.php1333
-rw-r--r--ldap-site-mngmt/webinterface/lib/commonlib.inc.php554
-rw-r--r--ldap-site-mngmt/webinterface/lib/config.inc.php36
-rw-r--r--ldap-site-mngmt/webinterface/lib/dhcp_management_functions.php727
-rw-r--r--ldap-site-mngmt/webinterface/lib/host_management_functions.php474
-rw-r--r--ldap-site-mngmt/webinterface/lib/ip_management_functions.php1553
-rw-r--r--ldap-site-mngmt/webinterface/lib/ldap.inc.php1117
-rw-r--r--ldap-site-mngmt/webinterface/lib/ldap2.inc.php350
-rw-r--r--ldap-site-mngmt/webinterface/lib/rbs_management_functions.php685
-rw-r--r--ldap-site-mngmt/webinterface/lib/syntax_check.php302
10 files changed, 0 insertions, 7131 deletions
diff --git a/ldap-site-mngmt/webinterface/lib/au_management_functions.php b/ldap-site-mngmt/webinterface/lib/au_management_functions.php
deleted file mode 100644
index d924aec0..00000000
--- a/ldap-site-mngmt/webinterface/lib/au_management_functions.php
+++ /dev/null
@@ -1,1333 +0,0 @@
-<?php
-
-/**
-* au_management_functions.php - Administrative Unit Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung von AUs, deren DNS Domains, sowie
-* zum Rollen-Management
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-########################################################################################################
-
-
-
-###############################################################################
-# Funktionen zur Verwaltung der AU (und Child-AUs)
-#
-
-
-# Ändern des DN der AU, d.h. beim Ändern des Attributes 'ou'
-function modify_au_dn($auDN, $newauDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($auDN,$newauDN)){
- adjust_dn_entries($auDN,$newauDN);}
-}
-
-
-
-# Anlegen neue untergeordnete AU
-function new_childau($childDN,$childou,$childcn,$childdesc,$mainadmin){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $entryAU ["objectclass"][0] = "administrativeunit";
- $entryAU ["objectclass"][1] = "organizationalunit";
- $entryAU ["objectclass"][2] = "top";
- $entryAU ["ou"] = $childou;
- $entryAU ["dhcpmtime"] = 0;
- if ($childcn != ""){$entryAU ["cn"] = $childcn;}
- if ($childdesc != ""){$entryAU ["description"] = $childdesc;}
-
- if ($resultAU = ldap_add($ds,$childDN,$entryAU)){
-
- # alle Au Container anlegen
- $containers = array("computers","dhcp","groups","pxe","rbs","roles");
- foreach ($containers as $cont){
- $entryCont = array();
- $entryCont ['objectclass'] = "AUContainer";
- $entryCont ['cn'] = $cont;
- #print_r($entryRolesCont); echo "<br><br>";
- $resultC = ldap_add($ds,"cn=".$cont.",".$childDN,$entryCont);
- if (!($resultC)) break;
- }
-
- # MainAdmin anlegen
- $entryMA ['objectclass'] = "groupOfNames";
- $entryMA ['cn'] = "MainAdmin";
- $entryMA ['member'] = $mainadmin;
- if ($resultMA = ldap_add($ds,"cn=MainAdmin,cn=roles,".$childDN,$entryMA)){
- #$admins = array("HostAdmin","DhcpAdmin","ZoneAdmin");
- #foreach ($admins as $admin){
- # $entryAdmin ['objectclass'] = "Admins";
- # $entryAdmin ['cn'] = $admin;
- # ldap_add($ds,"cn=".$admin.",cn=roles,".$childDN,$entryAdmin);
- #}
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-
-
-# Löschen untergeordnete AU (d.h. deren untergeordnete AUs werden als neue uAUs integriert)
-function delete_childau($childDN,$childou,$delmodus){
-
- global $ds, $suffix, $auDN, $domDN, $assocdom, $ldapError;
-
- if ( $delmodus == "integrate"){
-
- # Associated DNS Domain integrieren
- $childdc = get_domain_data($childDN,array("dn","associatedname"));
- print_r($childdc); echo "<br>";
- # wenn einzige AU dann einfach in Parentdomain aufnehmen und betroffene Einträge löschen
- if (count($childdc[0]['associatedname']) == 1 ){
- echo "einzige AU<br>";
- # dc Childs verschieben
- $dcchilds = get_dc_childs($childdc[0]['dn'],array("dn","dc"));
- # print_r($dcchilds); echo "<br>";
- if (count($dcchilds) != 0){
- foreach ($dcchilds as $dcc){
- # print_r($dcc['dn']); echo " >> "; print_r("dc=".$dcc['dc'].",".$domDN); echo "<br>";
- if(move_subtree($dcc['dn'],"dc=".$dcc['dc'].",".$domDN)){
- $newdom = $dcc['dc'].".".$assocdom;
- #print_r($newdom); echo "<br><br>";
- dive_into_dctree_adapt("dc=".$dcc['dc'].",".$domDN,$newdom);
- }
- }
- }
-
- # alten dc-Knoten löschen
- dive_into_tree_del($childdc[0]['dn'],"");
-
- }
- # wenn noch andere AUs in der Domain, dann nur betroffene Einträge entfernen
- if (count($childdc[0]['associatedname']) > 1 ){
- echo "mehrere AUs<br>";
- # ChildAU-Rollen unterhalb dc-Knoten löschen (nur diese)(oder übernehmen: MA zu HA, HA zu HA)
- $roles = get_roles($childDN);
- #print_r($roles); echo "<br>";
-
- # was ist wenn rollen nur noch ein member haben ... fehler
- if(count($roles['MainAdmin']) != 0){
- $mainadmins = $roles['MainAdmin'];
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultMA = ldap_mod_del($ds,"cn=MainAdmin,cn=roles,".$childdc[0]['dn'],$entryRoleMain);
- }
- if(count($roles['HostAdmin']) != 0){
- $hostadmins = $roles['HostAdmin'];
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultHA = ldap_mod_del($ds,"cn=HostAdmin,cn=roles,".$childdc[0]['dn'],$entryRoleHost);
- }
- if(count($roles['ZoneAdmin']) != 0){
- $zoneadmins = $roles['ZoneAdmin'];
- for ($i=0; $i<count($zoneadmins); $i++){
- $entryRoleZone ['member'][$i] = $zoneadmins[$i];
- }
- $resultZA = ldap_mod_del($ds,"cn=ZoneAdmin,cn=roles,".$childdc[0]['dn'],$entryRoleZone);
- }
-
- $entrydel ['associatedname'] = $childDN;
- # print_r($entrydel); echo "<br>";
- ldap_mod_del($ds, $childdc[0]['dn'], $entrydel);
- $zentries = get_zone_entries_assocname($childdc[0]['dn'],array("dn"),$childDN);
- # print_r($zentries); echo "<br>";
- foreach ($zentries as $ze){
- # print_r($ze['dn']); echo "<br>";
- ldap_delete($ds, $ze['dn']);
- }
- }
-
- # Rechner (mit IP) + dranhängende MCs, PXEs verschieben
- $hosts = get_hosts($childDN,array("dn","hostname"));
- if (count($hosts) != 0){
- foreach ($hosts as $host){
- # print_r($host['dn']); echo "<br>";
- # print_r($host['hostname']); echo "<br>";
- # print_r("hostname=".$host['hostname']."-int-".$childou.",cn=computers,".$auDN); echo "<br><br>";
- if (move_subtree($host['dn'], "hostname=".$host['hostname']."-ex-".$childou.",cn=computers,".$auDN)){
- $newhostDN = "hostname=".$host['hostname']."-ex-".$childou.",cn=computers,".$auDN;
- $dhcp = get_node_data($newhostDN, array("dhcphlpcont"));
- # print_r($dhcp); echo "<br>";
- if ($dhcp['dhcphlpcont'] != ""){
- $entrydel ['dhcphlpcont'] = array();
- $entrydel ['objectclass'] = "dhcpHost";
- # print_r($dhcphlpcont);
- ldap_mod_del($ds, $newhostDN, $entrydel);
- }
- }
- }
- }
- # DHCP Objekte IP Ranges löschen
- $subnets = get_subnets($childDN,array("dn"));
- # print_r($subnets); echo "<br>";
- if (count($subnets) != 0){
- foreach ($subnets as $subnet){
- # print_r($subnet['dn']); echo "<br>";
- delete_ip_dhcprange($subnet['dn'],$childDN);
- }
- } # DHCP Pools auch noch
-
- # Freie IP Bereiche zurücknehmen
- $fipb_array = get_freeipblocks_au($childDN);
- # print_r($fipb_array); echo "<br>";
- # print_r(count($fipb_array)); echo "<br>";
- if (count($fipb_array) == 1 && $fipb_array[0] != ""){
- $entry_ipblock ['freeipblock'] = $fipb_array[0];
- # print_r($entry_ipblock); echo "<br>";
- ldap_mod_add($ds,$auDN,$entry_ipblock);
- }
- if (count($fipb_array) > 1 ){
- foreach ($fipb_array as $fipb){
- $entry_ipblock ['FreeIPBlock'][] = $fipb;
- # print_r($entry_ipblock); echo "<br>";
- ldap_mod_add($ds,$auDN,$entry_ipblock);
- }
- }
- merge_ipranges($auDN);
-
-
- # Verschieben der Childs an neue Stelle
- $child_childs = get_childau($childDN,array("dn","ou"));
- # print_r($child_childs); echo "<br>";
- if (count($child_childs) != 0){
- foreach ($child_childs as $cc){
- $child_childDN = $cc['dn'];
- $newccDN = "ou=".$cc['ou'].",".$auDN;
- # print_r($child_childDN); echo " >> ";
- # print_r($newccDN); echo "<br>";
- if (move_subtree($child_childDN,$newccDN)){
- adjust_dn_entries($child_childDN,$newccDN);
- }
- }
- }
-
- # Löschen des AU Knotens
- dive_into_tree_del($childDN,"");
-
- $mesg = "<br>Erfolgreich gel&ouml;scht mit Integration<br>";
- return $mesg;
- }
-
- if ( $delmodus == "complete" ){
- # IP Bereiche zurück
- # DNS Teilbaum Objekte löschen
- # alles rekursive löschen
-
- /*if (dive_into_tree_del($dcDN,"")){
- $delentry ['objectclass'] = "domainrelatedobject";
- $delentry ['associateddomain'] = $domsuffix;
- #print_r($delentry); echo "<br>";
- $delresult = ldap_mod_del($ds,$childDN,$delentry);
- if ($delresult){
- $mesg = "Domain komplett gel&ouml;scht<br>";
- }else{$mesg = "Fehler! ldap_mod_del<br>";}
- }else{$mesg = "Fehler! dive_into_tree_del<br>";}
- */
- $mesg = "Komplettes l&ouml;schen mometan noch nicht unterst&uuml;tzt.<br>
- Nur eine Ebene mit Integration ...<br>";
- return $mesg;
- }
-}
-
-
-
-
-###############################################################################
-# Funktionen zur Verwaltung von Domains
-#
-
-
-# Anlegen Domain beim Anlegen einer Child-AU
-function new_child_domain($childdomain, $childDN, $assocdom, $domDN){
-
- global $ds, $suffix, $domprefix, $domsuffix, $ldapError;
- $domsuffix_actual = $domsuffix;
-
- # ChildAU in gleicher Domain wie AU
- if ( $childdomain == "" || $childdomain == $domprefix ){
-
- $entryDC ["associatedname"] = $childDN;
- $resultDC = ldap_mod_add($ds,$domDN,$entryDC);
- if ($resultDC){
- # HostAdmins übernehmen, welche Admins noch? MainAdmin?
- $roles = get_roles($childDN);
- if(count($roles['MainAdmin']) != 0){
- $mainadmins = $roles['MainAdmin'];
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultMA = ldap_mod_add($ds,"cn=MainAdmin,cn=roles,".$domDN,$entryRoleMain);
- }
- #if(count($roles['HostAdmin']) != 0){
- # $dnsroles = get_roles($domDN);
- # ...
- # $hostadmins = $roles['HostAdmin'];
- # for ($i=0; $i<count($hostadmins); $i++){
- # $entryRoleHost ['member'][$i] = $hostadmins[$i];
- # }
- # #print_r($entryRoleHost); echo "<br>";
- # $resultHA = ldap_mod_add($ds,"cn=HostAdmin,cn=roles,".$domDN,$entryRoleHost);
- #}
- # Domainname zu associatedDomain der ChildAU
- $entryAD['objectclass'] = "domainRelatedObject";
- $entryAD['associateddomain'] = $assocdom;
- $resultAD = ldap_mod_add($ds,$childDN,$entryAD);
- if($resultAD){return 1;}else{return 0;}
- }
- else{return 0;}
- }
-
- # ChildAU in eigner Domain (inklusive Subdomain von AU Domain)
- if ( $childdomain != "" && $childdomain != $domprefix ){
-
- # entsprechenden DC Knoten anlegen, sowie Roles (MainAdmin, HostAdmin)
- $dc_array = explode('.',$childdomain);
- $dc_array = array_reverse($dc_array);
- $dcDN = "ou=DNS,".$suffix;
- # $childdomainfull = $childdomain.".".$domsuffix;
- #print_r($dc_array);
- foreach ($dc_array as $dc){
- $resultsum = false;
- if (check_for_dc($dcDN,$dc)){
- echo "dc <b>".$dc."</b> schon vorhanden ... n&auml;chster dc<br>";
- $domsuffix_actual = $dc.".".$domsuffix_actual;
- $dcDN = "dc=".$dc.",".$dcDN;
- }
- else{
- $dcDN = "dc=".$dc.",".$dcDN;
-
- $entryDC ["objectclass"][0] = "dnsdomain";
- $entryDC ["objectclass"][1] = "domainrelatedobject";
- $entryDC ["objectclass"][2] = "top";
- $entryDC ["dc"] = $dc;
- $entryDC ["associatedname"] = $childDN;
- $entryDC ["associateddomain"] = $dc.".".$domsuffix_actual;
- #print_r($entryDC); echo "<br>";
- #print_r($dcDN); echo "<br><br>";
- $resultDC = ldap_add($ds,$dcDN,$entryDC);
- if ($resultDC){
- $domsuffix_actual = $dc.".".$domsuffix_actual;
-
- #print_r($dcDN); echo"<br><br>";
-
- $entryRolesCont ['objectclass'] = "AUContainer";
- $entryRolesCont ['cn'] = "roles";
- #print_r($entryRolesCont); echo "<br><br>";
- $resultRC = ldap_add($ds,"cn=roles,".$dcDN,$entryRolesCont);
- if ($resultRC){
- # Rollen eintragen
- $roles = get_roles($childDN);
- #print_r($roles); echo "<br><br>";
- $mainadmins = $roles['MainAdmin'];
- $entryRoleMain ['objectclass'] = "groupOfNames";
- $entryRoleMain ['cn'] = "MainAdmin";
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- #print_r($entryRoleMain); echo "<br>";
- $resultMA = ldap_add($ds,"cn=MainAdmin,cn=roles,".$dcDN,$entryRoleMain);
-
- if(count($roles['HostAdmin']) != 0){
- $entryRoleHost ['objectclass'] = "groupOfNames";
- $entryRoleHost ['cn'] = "HostAdmin";
- $hostadmins = $roles['HostAdmin'];
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultHA = ldap_add($ds,"cn=HostAdmin,cn=roles,".$dcDN,$entryRoleHost);
- }
-
- #$entryRoleZone ['objectclass'] = "Admins";
- #$entryRoleZone ['cn'] = "ZoneAdmin";
- #$resultZA = ldap_add($ds,"cn=ZoneAdmin,cn=roles,".$dcDN,$entryRoleZone);
-
- if ($resultMA){$resultsum = true;}
- }
- }
- break; # damit dc-Zuwachs immer nur um eine neue Ebene moeglich
- }
- }
- # Domainname zu associatedDomain der ChildAU
- if ($resultsum == true){
- $entryAD['objectclass'] = "domainRelatedObject";
- $entryAD['associateddomain'] = $domsuffix_actual;
- $resultAD = ldap_mod_add($ds,$childDN,$entryAD);
- }
- # fixme: fehlt noch anlegen der INCLUDE-Direktive in der parentdomain
- if($resultAD){return 1;}
- else{return 0;}
- }
-}
-
-
-# Domain einer Child-AU ändern
-function change_child_domain($childdomain, $oldchilddomain, $childDN, $assocdom, $domDN, $domprefix){
-
- global $ds, $suffix, $domsuffix, $ldapError;
- #print_r($oldchilddomain); echo "<br>";
- #print_r($domprefix); echo "<br>";
- # dcDNnew
- $dcDN = "ou=DNS,".$suffix;
- $dc_array = explode('.',$childdomain);
- $dc_array = array_reverse($dc_array);
- $dcDNnew = "";
- foreach ($dc_array as $dc){
- if (check_for_dc($dcDN,$dc)){
- $dcDN = "dc=".$dc.",".$dcDN;
- }
- else{
- $dcDN = "dc=".$dc.",".$dcDN;
- $dcDNnew .= $dcDN;
- break;
- }
- }
- # dcDNold
- $dcDNold = "ou=DNS,".$suffix;
- $dcold_array = explode('.',$oldchilddomain);
- $dcold_array = array_reverse($dcold_array);
- foreach ($dcold_array as $dc){
- $dcDNold = "dc=".$dc.",".$dcDNold;
- }
-
- #print_r($dcDNnew); echo "<br>";
- #print_r($dcDNold); echo "<br>";
- # Aus eigener AU Domain heraus in neue nicht AU Domain, d.h. dcDNold = domDN
- # Subdomain oder neue Domain anlegen
- if ($oldchilddomain == $domprefix){
-
- # associatedDomain aus ChildAU entfernen
- $entryAD['objectclass'] = "domainRelatedObject";
- $entryAD['associateddomain'] = $assocdom;
- #print_r($entryAD); echo "<br>";
- if ($resultAD = ldap_mod_del($ds,$childDN,$entryAD)){
-
- # neuen dc Knoten anlegen mit Rollen ...
- if(new_child_domain($childdomain, $childDN, $assocdom, $domDN)){
-
- # associatedName ChildDN aus altem dc-Knoten entfernen
- $entryAN ['associatedname'] = $childDN;
- #print_r($entryAN); echo "<br>";
- $result = ldap_mod_del($ds,$domDN,$entryAN);
-
- # Eigene Rollen aus dc-Knoten entfernen
- $roles = get_roles($childDN);
- if(count($roles['MainAdmin']) != 0){
- $mainadmins = $roles['MainAdmin'];
- if (count($mainadmins) > 1){
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- }else{
- $entryRoleMain ['member'] = $mainadmins[0];
- }
- #print_r($entryRoleMain); echo "<br>";
- $resultMA = ldap_mod_del($ds,"cn=MainAdmin,cn=roles,".$dcDNold,$entryRoleMain);
- }
- if(count($roles['HostAdmin']) != 0){
- $hostadmins = $roles['HostAdmin'];
- if (count($hostadmins) > 1){
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- }else{
- $entryRoleHost ['member'] = $hostadmins[0];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultHA = ldap_mod_del($ds,"cn=HostAdmin,cn=roles,".$dcDNold,$entryRoleHost);
- }
- if(count($roles['ZoneAdmin']) != 0){
- $zoneadmins = $roles['ZoneAdmin'];
- if (count($zoneadmins) > 1){
- for ($i=0; $i<count($zoneadmins); $i++){
- $entryRoleZone ['member'][$i] = $zoneadmins[$i];
- }
- }else{
- $entryRoleZone ['member'] = $zoneadmins[0];
- }
- #print_r($entryRoleZone); echo "<br>";
- $resultZA = ldap_mod_del($ds,"cn=ZoneAdmin,cn=roles,".$dcDNold,$entryRoleZone);
- }
-
-
- # DNS Einträge mit associatedName ChildDN verschieben
- $zone_entries = get_zone_entries_assocname($domDN,array("dn","relativedomainname"),$childDN);
- #echo "<br>"; print_r($zone_entries); echo "<br>";
- if (count($zone_entries) >= 1){
- foreach ($zone_entries as $ze){
- #print_r($ze['relativedomainname']); echo "<br>";
- #print_r($dcDNnew); echo "<br>";
- move_subtree($ze['dn'], "relativedomainname=".$ze['relativedomainname'].",".$dcDNnew);
- $domsuffix = "uni-freiburg.de"; # neu setzen da es beim new_child_domain schon mal hochgezählt wurde
- $newassocdom = $childdomain.".".$domsuffix;
- $entryZE ['zonename'] = $newassocdom;
- #print_r($entryZE); echo "<br>";
- $resultZE = ldap_mod_replace($ds,"relativedomainname=".$ze['relativedomainname'].",".$dcDNnew,$entryZE);
- }
- }
- # fixme: fehlt noch anpassen der INCLUDE-Direktive in der parentdomain
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
- }
- # Aus nicht AU Domain (aber eventuell Subdomain) in nicht AU Domain
- # Verschieben des dc-Teilbaumes
- if ($oldchilddomain != $domprefix){
- # Verschiebe dc-Baum von dcDNold nach dcDNnew
- # dcDNnew
- $dcDN = "ou=DNS,".$suffix;
- $dc_array = explode('.',$childdomain);
- $dc_array = array_reverse($dc_array);
- $dcDNnew = "";
- foreach ($dc_array as $dc){
- if (check_for_dc($dcDN,$dc)){
- $dcDN = "dc=".$dc.",".$dcDN;
- }
- else{
- $dcDN = "dc=".$dc.",".$dcDN;
- $dcDNnew .= $dcDN;
- break;
- }
- }
-
- # dcDNold
- $dcDNold = "ou=DNS,".$suffix;
- $dcold_array = explode('.',$oldchilddomain);
- $dcold_array = array_reverse($dcold_array);
- foreach ($dcold_array as $dc){
- $dcDNold = "dc=".$dc.",".$dcDNold;
- }
-
- # dc Baum verschieben
- if ($dcDNnew != ""){
- if (move_subtree($dcDNold, $dcDNnew)){
- # rekursives anpassen im neue dc-Baum:
- # associatedDomain, zoneName, includeFilename, includeOrigin
- $newassocdom = $childdomain.".".$domsuffix;
- if(dive_into_dctree_adapt($dcDNnew,$newassocdom)){
- return 1;
- # fixme: fehlt noch anpassen der INCLUDE-Direktive in der parentdomain
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
- }else{
- echo "Domain existiert schon, bitte anderen Domainnamen w&auml;hlen!";
- return 0;
- }
- }
-}
-
-function dive_into_dctree_adapt($dcDNnew,$newassocdom){
-
- global $ds, $suffix, $domprefix, $domsuffix, $ldapError;
- print_r($dcDNnew); echo "<br>";
- print_r($newassocdom); echo "<br><br>";
-
- # associatedDomain in dc-Knoten und in allen (mehrere) associatedName-ou-Knoten
- $entryAD['associateddomain'] = $newassocdom;
- print_r($entryAD); echo "<br>";
- $resultAD = ldap_mod_replace($ds,$dcDNnew,$entryAD);
- #$top_dcDN = str_replace("ou=DNS,","",$dcDNnew);
- #print_r($top_dcDN); echo "<br>";
- $assocnames = get_dc_data($dcDNnew,array("associatedname")); # funkt nicht bei uni-freiburg.de
- echo "<br>"; print_r($assocnames); echo "<br>";
- if (count($assocnames['associatedname']) > 1){
- foreach ($assocnames['associatedname'] as $aname){
- print_r($aname); echo "<br>";
- $resultAU = ldap_mod_replace($ds,$aname,$entryAD);
- }
- }else{
- $aname = $assocnames['associatedname'];
- print_r($aname); echo "<br>";
- $resultAU = ldap_mod_replace($ds,$aname,$entryAD);
- }
-
- # ZoneName in allen Knoten eine Ebene tiefer
- $zone_entries = get_zone_entries($dcDNnew,array("dn","zonename"));
- echo "<br>"; print_r($zone_entries); echo "<br>";
- foreach ($zone_entries as $ze){
- $entryZE ['zonename'] = $newassocdom;
- print_r($entryZE); echo "<br>";
- $resultZE = ldap_mod_replace($ds,$ze['dn'],$entryZE);
- }
-
- # Zonenamen in Reversezones ... Fehlt noch
-
- # Rekursion
- # child dc für Rekursion
- $dcchilds = get_dc_childs($dcDNnew,array("dn","dc"));
- echo "<br>"; print_r($dcchilds); echo "<br>";
- foreach ($dcchilds as $dcc){
- $newassocdom = $dcc['dc'].".".$newassocdom;
- print_r($dcc['dn']); echo " >> "; print_r($newassocdom); echo "<br>";
- dive_into_dctree_adapt($dcc['dn'],$newassocdom);
- }
-
-}
-
-
-function delete_child_domain($oldchilddomain,$assocdom,$childDN, $domDN, $delmodus){
-
- global $ds, $suffix, $domprefix, $domsuffix, $ldapError;
- #print_r($domDN); echo "<br>";
-
- # dcDNold
- $dcDNold = "ou=DNS,".$suffix;
- $dcold_array = explode('.',$oldchilddomain);
- $dcold_array = array_reverse($dcold_array);
- foreach ($dcold_array as $dc){
- $dcDNold = "dc=".$dc.",".$dcDNold;
- }
- #print_r($dcDNold); echo "<br>";
- # dcDNnew = domDN
-
- if ( $delmodus == "integrate" ){
-
- # associatedNames zu neuem dc-Knoten hinzufügen
- $assocnames = get_dc_data($dcDNold,array("associatedname")); # funkt nicht bei uni-freiburg.de
- # echo "<br>"; print_r($assocnames); echo "<br>";
- if (count($assocnames['associatedname']) > 1){
- foreach ($assocnames['associatedname'] as $aname){
- #print_r($aname); echo "<br>";
- $entryAN['associatedname'][] = $aname;
- }
- }else{
- $entryAN['associatedname'] = $assocnames['associatedname'];
- $assocname = $assocnames['associatedname'];
- $assocnames ['associatedname'] = array($assocname);
- }
- #print_r($entryAN); echo "<br>";
- $resultAN = ldap_mod_add($ds,$domDN,$entryAN);
- if($resultAN){
-
- # DNS Einträge verschieben und an neue Domain anpassen
- $zone_entries = get_zone_entries($dcDNold,array("dn","relativedomainname"));
- #echo "<br>"; print_r($zone_entries); echo "<br>";
- if (count($zone_entries) >= 1){
- foreach ($zone_entries as $ze){
- #print_r($ze['relativedomainname']); echo "<br>";
- #print_r($domDN); echo "<br>";
- move_subtree($ze['dn'], "relativedomainname=".$ze['relativedomainname'].",".$domDN);
- $entryZE ['zonename'] = $assocdom;
- print_r($entryZE); echo "<br>";
- $resultZE = ldap_mod_replace($ds,"relativedomainname=".$ze['relativedomainname'].",".$domDN,$entryZE);
- }
- }
-
- # Rollenmembers kopieren für jeden associatedName (ohne Duplikate zu generieren)
- $newdom_roles = get_roles_dns($domDN);
- #print_r($newdom_roles); echo "<br>";
- if (count($newdom_roles['MainAdmin']) != 0){$newmainadmins = $newdom_roles['MainAdmin'];}else{$newmainadmins = array();}
- if (count($newdom_roles['HostAdmin']) != 0){$newhostadmins = $newdom_roles['HostAdmin'];}else{$newhostadmins = array();}
- if (count($newdom_roles['ZoneAdmin']) != 0){$newzoneadmins = $newdom_roles['ZoneAdmin'];}else{$newzoneadmins = array();}
- #print_r($newmainadmins); echo "<br>";
- #print_r($newhostadmins); echo "<br>";
- #print_r($newzoneadmins); echo "<br><br>";
- foreach ($assocnames['associatedname'] as $aname){
- #echo "_________________________________________<br>";
- #print_r($aname); echo "<br>";
- $roles = get_roles($aname);
- #print_r($roles); echo "<br>";
- $mainadmins = $roles['MainAdmin'];
- #print_r($mainadmins); echo "<br>";
- #print_r($newmainadmins); echo "<br>";
- $mainadmins = array_diff($mainadmins, $newmainadmins);
- $mainadmins = array_merge($newmainadmins,$mainadmins);
- #print_r($mainadmins); echo "<br>";
- if (count($mainadmins) > 1){
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- }else{
- $entryRoleMain ['member'] = $mainadmins[0];
- }
- #print_r($entryRoleMain); echo "<br><br>";
- $resultMA = ldap_mod_replace($ds,"cn=MainAdmin,cn=roles,".$domDN,$entryRoleMain);
-
- if(count($roles['HostAdmin']) != 0){
- $hostadmins = $roles['HostAdmin'];
- #print_r($hostadmins); echo "<br>";
- #print_r($newhostadmins); echo "<br>";
- $hostadmins = array_diff($hostadmins, $newhostadmins);
- $hostadmins = array_merge($newhostadmins,$hostadmins);
- #print_r($hostadmins); echo "<br>";
- if (count($hostadmins) > 1){
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- }else{
- $entryRoleHost ['member'] = $hostadmins[0];
- }
-
- #print_r($entryRoleHost); echo "<br><br>";
- $resultHA = ldap_mod_replace($ds,"cn=HostAdmin,cn=roles,".$domDN,$entryRoleHost);
-
- }
- if(count($roles['ZoneAdmin']) != 0){
- $zoneadmins = $roles['ZoneAdmin'];
- #print_r($zoneadmins); echo "<br>";
- #print_r($newzoneadmins); echo "<br>";
- $zoneadmins = array_diff($zoneadmins, $newzoneadmins);
- $zoneadmins = array_merge($newzoneadmins,$zoneadmins);
- #print_r($zoneadmins); echo "<br>";
- if (count($zoneadmins) > 1){
- for ($i=0; $i<count($zoneadmins); $i++){
- $entryRoleZone ['member'][$i] = $zoneadmins[$i];
- }
- }else{
- $entryRoleZone ['member'] = $zoneadmins[0];
- }
- #print_r($entryRoleZone); echo "<br><br>";
- $resultZA = ldap_mod_replace($ds,"cn=ZoneAdmin,cn=roles,".$domDN,$entryRoleZone);
-
- }
-
- # associatedDomain anpassen in allen AUs von $assocnames (alt)
- $entryAD ['associateddomain'] = $assocdom;
- #print_r($entryAD); echo "<br>";
- $resultAD = ldap_mod_replace($ds,$aname,$entryAD);
-
- #echo "_________________________________________<br>";
- }
-
- # Falls alter dc-Knoten noch Subdomains, d.h. dc-Teilbäume hat, diese verschieben mit
- # rekursivem Anpassen aller Einträge
- $dcchilds = get_dc_childs($dcDNold,array("dn","dc"));
- #echo "<br><br>"; print_r($dcchilds); echo "<br>";
- if (count($dcchilds) != 0){
- foreach ($dcchilds as $dcc){
- print_r($dcc['dn']); echo " >> "; print_r("dc=".$dcc['dc'].",".$domDN); echo "<br>";
- if(move_subtree($dcc['dn'],"dc=".$dcc['dc'].",".$domDN)){
- $newdom = $dcc['dc'].".".$assocdom;
- #print_r($newdom); echo "<br><br>";
- dive_into_dctree_adapt("dc=".$dcc['dc'].",".$domDN,$newdom);
- }
- }
- }
-
- # alten dc-Knoten entfernen
- dive_into_tree_del($dcDNold,"");
-
- # fixme: fehlt noch löschen der INCLUDE-Direktive in der parentdomain
-
- }
- else{
- return 0;
- }
- }
-
-
- if ( $delmodus == "complete" ){
- # if (dive_into_tree_del($dcDNold,"")){
- $delentry ['objectclass'] = "domainrelatedobject";
- $delentry ['associateddomain'] = $oldchilddomain.".".$domsuffix;
- print_r($delentry); echo "<br>";
- # $delresult = ldap_mod_del($ds,$childDN,$delentry);
- # if ($delresult){
- # $mesg = "Domain komplett gel&ouml;scht<br>";
- # }else{$mesg = "Fehler! ldap_mod_del<br>";}
- # }else{$mesg = "Fehler! dive_into_tree_del<br>";}
- }
-
- # return $mesg;
-}
-
-
-/*
-function modify_childau_domain($childdomain, $oldchilddomain, $childDN){
-
- global $ds, $suffix, $domsuffix, $ldapError;
- $dcDN = "ou=DNS,".$suffix;
- $dcoldDN = "ou=DNS,".$suffix;
-
- $dc_array = explode('.',$childdomain);
- $dc_array = array_reverse($dc_array);
- $dcold_array = explode('.',$oldchilddomain);
- $dcold_array = array_reverse($dcold_array);
-
- foreach ($dcold_array as $dc){
- $dcoldDN = "dc=".$dc.",".$dcoldDN;
- $aname = get_dc_data($dcoldDN,array("associatedname"));
- if ($aname == $childDN){
- break;
- }
- }
- #print_r($dcoldDN); echo "<br>";
- #print_r($domsuffix); echo "<br>";
-
- $dcnewDN = "";
- foreach ($dc_array as $dc){
- if (check_for_dc($dc)){
- # echo "dc <b>".$dc."</b> schon vorhanden ... n&auml;chster dc<br>";
- $domsuffix = $dc.".".$domsuffix;
- $dcDN = "dc=".$dc.",".$dcDN;
- }
- else{
- $dcDN = "dc=".$dc.",".$dcDN;
- $domsuffix = $dc.".".$domsuffix;
- $dcnewDN .= $dcDN;
- break;
- }
- }
- #print_r($dcnewDN); echo "<br>";
- #print_r($domsuffix); echo "<br>";
-
- if ($dcnewDN != ""){
- if (move_subtree($dcoldDN,$dcnewDN)){
- $entryAD['associateddomain'] = $childdomain.".".$domsuffix;
- $resultAD = ldap_mod_replace($ds,$childDN,$entryAD);
- $resultAD2 = ldap_mod_replace($ds,$dcnewDN,$entryAD);
- if ($resultAD && $resultAD2){return 1;}else{return 0;}
- }
- }else{
- echo "Domain existiert schon, bitte anderen Domainnamen w&auml;hlen!";
- }
-
-}
-
-
-function same_domain($assocdom, $dcDN, $childDN){
-
- global $ds, $suffix, $domsuffix, $ldapError;
-
- $entryDC ["associatedname"] = $childDN;
- $resultDC = ldap_mod_add($ds,$dcDN,$entryDC);
- if ($resultDC){
- # HostAdmins übernehmen, welche Admins noch? MainAdmin?
- $roles = get_roles($childDN);
- if(count($roles['HostAdmin']) != 0){
- $hostadmins = $roles['HostAdmin'];
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultHA = ldap_mod_add($ds,"cn=HostAdmin,cn=roles,".$dcDN,$entryRoleHost);
- }
- # Domainname zu associatedDomain der ChildAU
- $entryAD['objectclass'] = "domainRelatedObject";
- $entryAD['associateddomain'] = $assocdom;
- $resultAD = ldap_mod_add($ds,$childDN,$entryAD);
- if($resultAD){return 1;}else{return 0;}
- }
- else{return 0;}
-}
-
-
-function new_childau_domain($childdomain, $childDN){
-
- global $ds, $suffix, $domsuffix, $ldapError;
-
- # entsprechenden DC Knoten anlegen, sowie Roles (MainAdmin, HostAdmin)
- $dc_array = explode('.',$childdomain);
- $dc_array = array_reverse($dc_array);
- $dcDN = "ou=DNS,".$suffix;
- # $childdomainfull = $childdomain.".".$domsuffix;
- #print_r($dc_array);
- foreach ($dc_array as $dc){
- $resultsum = false;
- if (check_for_dc($dc)){
- echo "dc <b>".$dc."</b> schon vorhanden ... n&auml;chster dc<br>";
- $domsuffix = $dc.".".$domsuffix;
- $dcDN = "dc=".$dc.",".$dcDN;
- }
- else{
- $dcDN = "dc=".$dc.",".$dcDN;
-
- $entryDC ["objectclass"][0] = "dnsdomain";
- $entryDC ["objectclass"][1] = "domainrelatedobject";
- $entryDC ["objectclass"][2] = "top";
- $entryDC ["dc"] = $dc;
- $entryDC ["associatedname"] = $childDN;
- $entryDC ["associateddomain"] = $dc.".".$domsuffix;
- #print_r($entryDC); echo "<br>";
- #print_r($dcDN); echo "<br><br>";
- $resultDC = ldap_add($ds,$dcDN,$entryDC);
- if ($resultDC){
- $domsuffix = $dc.".".$domsuffix;
-
- #print_r($dcDN); echo"<br><br>";
-
- $entryRolesCont ['objectclass'] = "AUContainer";
- $entryRolesCont ['cn'] = "roles";
- #print_r($entryRolesCont); echo "<br><br>";
- $resultRC = ldap_add($ds,"cn=roles,".$dcDN,$entryRolesCont);
- if ($resultRC){
- $roles = get_roles($childDN);
- print_r($roles); echo "<br><br>";
- $mainadmins = $roles['MainAdmin'];
- $entryRoleMain ['objectclass'] = "groupOfNames";
- $entryRoleMain ['cn'] = "MainAdmin";
- for ($i=0; $i<count($mainadmins); $i++){
- $entryRoleMain ['member'][$i] = $mainadmins[$i];
- }
- #print_r($entryRoleMain); echo "<br>";
- $resultMA = ldap_add($ds,"cn=MainAdmin,cn=roles,".$dcDN,$entryRoleMain);
-
- if(count($roles['HostAdmin']) != 0){
- $hostadmins = $roles['HostAdmin'];
- $entryRoleHost ['objectclass'] = "groupOfNames";
- $entryRoleHost ['cn'] = "HostAdmin";
- for ($i=0; $i<count($hostadmins); $i++){
- $entryRoleHost ['member'][$i] = $hostadmins[$i];
- }
- #print_r($entryRoleHost); echo "<br>";
- $resultHA = ldap_add($ds,"cn=HostAdmin,cn=roles,".$dcDN,$entryRoleHost);
- }
- if ($resultMA){$resultsum = true;}
- }
- }
- break; # damit dc-Zuwachs immer nur um eine neue Ebene moeglich
- }
- }
- # Domainname zu associatedDomain der ChildAU
- if ($resultsum == true){
- $entryAD['objectclass'] = "domainRelatedObject";
- $entryAD['associateddomain'] = $domsuffix;
- $resultAD = ldap_mod_add($ds,$childDN,$entryAD);
- }
- if($resultAD){return 1;}
- else{return 0;}
-
-}
-
-
-
-function delete_childau_domain($oldchilddomain,$childDN,$delmodus){
-
- global $ds, $suffix, $domsuffix, $ldapError;
-
- $dcold_array = explode('.',$oldchilddomain);
- $dcold_array = array_reverse($dcold_array);
- $dcDN = "ou=DNS,".$suffix;
-
- foreach ($dcold_array as $dc){
- $dcDN = "dc=".$dc.",".$dcDN;
- $aname = get_dc_data($dcDN,array("associatedname"));
- $domsuffix = $dc.".".$domsuffix;
-
- if ($aname == $childDN){
- break;
- }
- }
- #print_r($dcDN); echo "<br>";
- #print_r($domsuffix); echo "<br>";
-
- if ( $delmodus == "complete" ){
- if (dive_into_tree_del($dcDN,"")){
- $delentry ['objectclass'] = "domainrelatedobject";
- $delentry ['associateddomain'] = $domsuffix;
- #print_r($delentry); echo "<br>";
- $delresult = ldap_mod_del($ds,$childDN,$delentry);
- if ($delresult){
- $mesg = "Domain komplett gel&ouml;scht<br>";
- }else{$mesg = "Fehler! ldap_mod_del<br>";}
- }else{$mesg = "Fehler! dive_into_tree_del<br>";}
- }
-
- if ( $delmodus == "integrate"){
- $mesg = "DNS Integration, noch nicht fertiggestellt";
- }
-
- return $mesg;
-}
-*/
-
-
-
-
-###############################################################################
-# Funktionen für das Rollen Management
-#
-
-
-function new_role_member($userDN,$role,$auDN,$domDN){
-
- global $ds, $suffix, $ldapError;
-
- $actroles = get_roles($auDN);
-
- $entry['member'] = $userDN;
-
- if ($domDN != ""){
- $actdnsroles = get_roles_dns($domDN);
- switch ($role){
- case 'MainAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- $roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- $results1 = ldap_mod_add($ds,$roleDN1,$entry);
- $results2 = ldap_mod_add($ds,$roleDN2,$entry);
- if ($results1 && $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'HostAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- #$roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- if ( count($actroles['HostAdmin']) != 0 ){
- $results1 = ldap_mod_add($ds,$roleDN1,$entry);
- #$results2 = ldap_mod_add($ds,$roleDN2,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results1 = ldap_add($ds,$roleDN1,$entrynew);
- #$results2 = ldap_add($ds,$roleDN2,$entryHA);
- }
- if ($results1){ #&& $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'DhcpAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['DhcpAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'RbsAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['RbsAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'ZoneAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- #$roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- if ( count($actroles['ZoneAdmin']) != 0 ){
- $results1 = ldap_mod_add($ds,$roleDN1,$entry);
- #$results2 = ldap_mod_add($ds,$roleDN2,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN1,$entrynew);
- }
- if ($results1){ #&& $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- }
- }else{
- switch ($role){
- case 'MainAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- $results = ldap_mod_add($ds,$roleDN,$entry);
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'HostAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['HostAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'DhcpAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['DhcpAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'RbsAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['RbsAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'ZoneAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['ZoneAdmin']) != 0 ){
- $results = ldap_mod_add($ds,$roleDN,$entry);
- }else{
- $entrynew ['objectclass'] = "groupOfNames";
- $entrynew ['cn'] = $role;
- $entrynew ['member'] = $userDN;
- $results = ldap_add($ds,$roleDN,$entrynew);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- }
- }
-}
-
-
-function delete_role_member($userDN,$role,$auDN,$domDN){
-
- global $ds, $suffix, $ldapError;
-
- $actroles = get_roles($auDN);
-
- $entry['member'] = $userDN;
-
- if ($domDN != ""){
- $actdnsroles = get_roles_dns($domDN);
-
- switch ($role){
- case 'MainAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- $roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- if ( count($actroles['MainAdmin']) == 1 || count($actdnsroles['MainAdmin']) == 1 ){
- echo "Rolle <b>MainAdmin</b> muss mindestens ein Mitglied haben!<br>
- <b>$userDN</b> wird nicht gel&ouml;scht.<br><br>";
- }else{
- $results1 = ldap_mod_del($ds,$roleDN1,$entry);
- $results2 = ldap_mod_del($ds,$roleDN2,$entry);
- }
- if ($results1 && $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'HostAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- #$roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- if ( count($actroles['HostAdmin']) == 1 ){
- $results1 = ldap_delete($ds,$roleDN1);
- }else{
- $results1 = ldap_mod_del($ds,$roleDN1,$entry);
- }
- #$results2 = ldap_mod_del($ds,$roleDN2,$entry);
- if ($results1){ #&& $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'DhcpAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['DhcpAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'RbsAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['RbsAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'ZoneAdmin':
- $roleDN1 = "cn=".$role.",cn=roles,".$auDN;
- #$roleDN2 = "cn=".$role.",cn=roles,".$domDN;
- if ( count($actroles['ZoneAdmin']) == 1 ){
- $results1 = ldap_delete($ds,$roleDN1);
- }else{
- $results1 = ldap_mod_del($ds,$roleDN1,$entry);
- }
- #$results2 = ldap_mod_del($ds,$roleDN2,$entry);
- if ($results1){ #&& $results2){
- return 1;
- }else{
- return 0;
- }
- break;
- }
- }else{
- switch ($role){
- case 'MainAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['MainAdmin']) == 1 ){
- echo "Rolle <b>MainAdmin</b> muss mindestens ein Mitglied haben!<br>
- <b>$userDN</b> wird nicht gel&oumlscht.<br><br>";
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'HostAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['HostAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'DhcpAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['DhcpAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'RbsAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['RbsAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- case 'ZoneAdmin':
- $roleDN = "cn=".$role.",cn=roles,".$auDN;
- if ( count($actroles['ZoneAdmin']) == 1 ){
- $results = ldap_delete($ds,$roleDN);
- }else{
- $results = ldap_mod_del($ds,$roleDN,$entry);
- }
- if ($results){
- return 1;
- }else{
- return 0;
- }
- break;
- }
- }
-}
-
-
-function get_role_members($roleDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $roleDN, "objectclass=*", array("member"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "search problem";
- die;
- } else {
- $members_array = array();
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- if (count($item['member']) > 1){
- $members_array = $item['member'];
- }
- else{
- $members_array[] = $item['member'];
- }
- }
- }
- return $members_array;
-}
-
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/commonlib.inc.php b/ldap-site-mngmt/webinterface/lib/commonlib.inc.php
deleted file mode 100644
index 95fc0776..00000000
--- a/ldap-site-mngmt/webinterface/lib/commonlib.inc.php
+++ /dev/null
@@ -1,554 +0,0 @@
-<?php
-
-
-/**
-* attributesToString($entry, $name, $delemiter = "", $pattern = "", $empty = "&nbsp") -
-* Gibt die Attribute eines LDAP-Eintrages formatiert aus
-*
-* Gibt die Attribute des Schl�ssels $name des LDAP-Eintraes $entry aus. Mehrere Werte werden mit $delemiter
-* voneinander getrennt. F�r jeden Wert des Attributes wird in $pattern an die Stelle "$name" (Dallarzeichen plus die Bezeichnung)
-* das aktuelle Attribut eingef�gt - �hnlich (aber nicht gleich!) der String-Interpretation von PHP. Falls $pattern = "" wird
-* einfach der Wert zur�ck gegeben. Falls f�r den Schl�ssel keine Attribut-Werte definiert sind, wird $empty zur�ck gegeben
-*
-* @param array entry LDAP-Array
-* @param string name Hashbezeichnung
-* @param string delimiter Trennzeichen
-* @param string pattern Muster
-* @param string empty Zeichen f�r leere Felder
-*
-* @return string Array-Werte als String
-*
-* @author Timothy Burk, lt. Musterl�sung
-*
-*/
-
- function attributesToString($entry, $name, $delimiter = "", $pattern = "", $empty = "") {
- $buffer = "";
- $name=strtolower($name);
- if (isset($entry[$name])) {
- $count = $entry[$name]['count'];
- for ($i = 0; $i < $count; $i++) {
- if ($pattern) {
- $tmp = $pattern;
- $buffer .= str_replace('$' . $name, $entry[$name][$i], $tmp);
- } else {
- $buffer .= $entry[$name][$i];
- }
- if ($delimiter && ($i + 1) < $count) {
- $buffer .= $delimiter;
- }
- }
- }
-
- if ("" == $buffer && $empty) {
- $buffer = $empty;
- }
- return $buffer;
- }
-
-/*
- * oneAttribute($entry, $name, $empty = "", $i = 0) {
- * liefert den ($i-ten) Wert des Attributes $name aus $entry
- * Eingabe ist entweder ein Datensatz aus dem ldapsearch-Ergebnis, oder
- * ein um die Meta-Infos (count) bereinigtes Ergebnis
- * sorry f�r die mangelhafte Doku - Thomas
- */
-
- function oneAttribute($entry, $name, $empty = "", $i = 0) {
- $buffer = "";
- if (isset($entry[$name][$i])) {
- $buffer = $entry[$name];
- } else if (isset($entry[$name])) {
- $buffer = $entry[$name];
- }
-
- if ("" == $buffer && $empty) {
- $buffer = $empty;
- }
- return $buffer;
- }
-
-
- /**
- * redirect($seconds, $url, $msg = "", $addSessionId = TRUE) - leitet den Benutzer auf eine andere Seite weiter
- *
- * Leitet den Benuzter nach $seconds Sekunden auf die Seite $url weiter. W�hrend der Wartezeit bekommt der Benutzer
- * die Information $msg mitgeteilt (Achtung: keine automatische Formatierung der $msg). Wenn $addSessionId TRUE ist,
- * dann wird an den URL die SessionId angeh�ngt.
- *
- * @author Timothy Burk, lt. Musterl�sung
- */
-
- function redirect($seconds, $url, $msg = "", $addSessionId = TRUE) {
- if ($addSessionId) {
- if (strpos($url, "?") === FALSE) {
- $url .= "?";
- } else {
- $url .= "&";
- }
- $url .= SID;
- }
-
- echo "<html>\n" .
- " <head>\n" .
- ' <meta http-equiv="refresh" content="' . $seconds . "; URL=$url" . '">' . "\n" .
- " </head>\n";
- if ($msg) {
- echo " <body>\n" .
- $msg .
- " </body>\n";
- }
- echo "</html>\n";
- }
-
-
-
-/**
-* getRights($ds, $userDn) - ermittelt die Rechte eines Users.
-*
-* Die Funktion erwartet ein Directory-Handle und den vollst�ndigen Distiguished Name des
-* Users. R�ckgabewert ist ein numerisches eindimensionales Array, welches die Rechte enth�lt.
-*
-* @param resource ds LDAP Directory Handle
-* @param string userDn Distinguishedname des Users
-*
-* @return array rechte
-*
-* @author Timothy Burk
-*/
-
-function getRoles($ds, $userDN) {
- global $ldapError, $suffix, $uid;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(member=$userDN)(cn=*))", array("dn","cn"), "dn", "sub", 0, 0))) {
- redirect(5, "index.php", $ldapError, FALSE);
- die;
- }
- $result = ldapArraySauber($result);
- $clean = array();
-
- foreach($result as $item) {
- $dn = ldap_explode_dn($item['dn'], 0);
- $dnsub = array_slice($dn,3);
- $auDN = implode(',',$dnsub);
- $element['au'] = $auDN;
- $element['role'] = $item['cn'];
- $clean[] = $element;
- }
-
- $res = array();
- foreach($clean as $item){
- $au = $item['au'];
- $role = $item['role'];
- if(array_key_exists($au,$res)){
- $res[$au][] = $role;
- }
- else{
- $res[$au] = array($role);
- }
- }
- $i=0;
- foreach (array_keys($res) as $key){
- $au_roles[$i]['au'] = $key;
- $au_roles[$i]['role'] = $res[$key];
- $i++;
- }
- return $au_roles;
-}
-
-
-/**
-* createMenu($rechte) - erstellt die Menuleiste abh�ngig von der Rechten des Users.
-*
-* Die Navigationsleiste wird dynamisch erzeugt und von dieser Funktion direkt in das
-* entsprechende Template geparst. Dabei werden nur die Schaltfl�chen zur Verf�gung
-* gestellt, die der User mit seinen Rechten anzeigen darf.
-*
-* @param array rechte Eindimensionales Array mit den Rechten des Users
-* @param int mainnr Nummer des aktiven Hauptmenus
-*
-* @author Timothy Burk
-*/
-
-function createMainMenu($rollen , $mainnr) {
-
- global $template, $START_PATH, $auDN;
-
- # pre-checks
- $mipbs = get_maxipblocks_au($auDN);
- #echo "MIPB: "; print_r ($mipbs); echo "<br>";
- if ($mipbs[0] != ""){
- $dhcplink = "dhcp/dhcpsubnets.php?mnr=0";
- }else{
- $dhcplink = "dhcp/no_dhcp.php";
- }
-
- # Struktur der Registerkartenleiste
- $mainmenu = array(array("link" => "au/au.php",
- "text" => "AU Home",
- "zugriff" => "alle"),
- #array("link" => "roles/roles.php",
- # "text" => "Admin Rollen",
- # "zugriff" => array("MainAdmin","DhcpAdmin")),
- #array("link" => "ip/ip.php",
- # "text" => "IP Management",
- # "zugriff" => array("MainAdmin","HostAdmin","DhcpAdmin")),
- array("link" => "computers/hostoverview.php?sort=hostname",
- "text" => "Rechner",
- "zugriff" => array("MainAdmin","HostAdmin","DhcpAdmin")),
- array("link" => $dhcplink,
- "text" => "DHCP",
- "zugriff" => array("MainAdmin","DhcpAdmin")),
- array("link" => "rbs/rbs.php",
- "text" => "RemoteBoot/PXE",
- "zugriff" => array("MainAdmin","RbsAdmin")),
- array("link" => "dns/dns.php",
- "text" => "DNS",
- "zugriff" => array("MainAdmin","ZoneAdmin")));
-
-
- # Zusammenstellen der Menuleiste
- $template->define_dynamic("Mainmenu", "Mmenu");
- $i=0;
- foreach($mainmenu as $item) {
- if($item['zugriff'] === "alle" || vergleicheArrays($rollen , $item['zugriff'])) {
- if ($i==0) {
- if ($mainnr==0) {
- $zwisch="";
- $lastaktive=true;
- $farb="#505050";
- }
- else {
- $zwisch="";
- $farb="#A0A0A0";
- $lastaktive=false;
- }
- }
- else {
- if ($mainnr==$i) {
- $zwisch="";
- $lastaktive=true;
- $farb="#505050";
- }
- else {
- $farb="#A0A0A0";
- if ($lastaktive) {$zwisch="";}
- else {$zwisch="";}
- $lastaktive=false;
- }
- }
- $template->assign(array("MZWISCHEN" => $zwisch,
- "MFARBE" => $farb,
- "MLINK_M" => $START_PATH.$item["link"],
- "MTEXT_M" => $item["text"]));
- $template->parse("MAINMENU_LIST", ".Mainmenu");
- }
- $i=$i+1;
- }
- if ($lastaktive) {$template->assign(array("MENDE" => ""));}
- else {
- $template->assign(array("MENDE" => ""));
- }
-
-}
-
-
-
-/**
-* vergleicheArrays($a, $b) - Ermitteln der Schnittmenge zweier Arrays
-*
-* @param array a
-* @param array b
-*
-* @return boolean TRUE, wenn die Schnittmenge von a und b nicht leer ist, sonst FALSE
-*
-* @author Timothy Burk
-*/
-
-function vergleicheArrays($a, $b) {
- if((sizeof(array_unique($a)) + sizeof($b)) > sizeof(array_unique(array_merge($a, $b)))) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-
-/**
-* inputArraySauber($Array)
-*
-* L�scht aus einem Array, welches POST-Daten enth�lt leere Felder. N�tig f�r die Formatierung
-* vor dem Anlegen neuer Objekte.
-*
-* @param array _POST-Array
-*
-* @return array Bereinigtes Array.
-*
-* @author Timothy Burk
-*/
-function inputArraySauber($Array) {
- $b = array();
- foreach($Array as $key => $a) {
- if(!is_array($a)) {
- trim($a);
- }
- if (!$a == "") {
- if(is_array($a)) {
- $b[$key] = $a;
- } else {
- $b[$key] = htmlentities($a);
- }
- }
- }
- return $b;
-}
-
-
-/**
-* numArraySauber($Array)
-*
-* L�scht aus einemn numerischen Array leere Felder.
-*
-* @param array Numerisches Array
-*
-* @return array Bereinigtes Array.
-*
-* @author Timothy Burk
-*/
-function numArraySauber($Array) {
- $b = array();
- $arr = array();
- if(!(is_array($Array))) {
- $arr[] = $Array;
- } else {
- $arr = $Array;
- }
- foreach($arr as $key => $a) {
- if (!$a == "") {
- $b[] = $a;
- }
- }
- return $b;
-}
-
-/**
-* ldapArraySauber($Array, [$delEmpty])
-*
-* Bereinigt ein dreidimensionales Array, so wie es aus der Funktion uniLdapSearch kommt.
-* Dabei werden alle count-Felder sowie alle numerischen Felder in denen der Schl�ssel
-* gespeichert ist entfernt. Attributarrays mit nur einem Element werden gel�scht, das Element
-* wir als Skalar gespeichert.
-* Wenn $delEmpty = TRUE ist, werden nur nichtleere Felder gespeichert.
-*
-* @param array $Array uniLdapSearch()-Ausgabe
-* @param boolean $delEmpty (Standard: $delEmpty = FALSE)
-*
-* @return array Bereinigtes Array.
-*
-* @author Timothy Burk
-*/
-function ldapArraySauber($Array, $delEmpty = FALSE) {
- $b = array();
- foreach($Array as $key => $item) {
- if(is_array($item)) {
- foreach($item as $key_attr => $attr) {
- if(!is_int($key_attr)) {
- if(is_array($attr)) {
- if($attr['count'] == 1) {
- $attr[0] = str_replace(chr(160),"",trim($attr[0]));
- if(($delEmpty && $attr[0] != "") || !($delEmpty)) {
- $b[$key][$key_attr] = $attr[0];
- }
- } else {
- for($i=0; $i < $attr['count']; $i++) {
- $attr[$i] = str_replace(chr(160),"",trim($attr[$i]));
- if(($delEmpty && $attr[$i] != "") || !($delEmpty)) {
- $b[$key][$key_attr][$i] = $attr[$i];
- }
- }
- }
- } else {
- $attr = str_replace(chr(160),"",trim($attr));
- if(($delEmpty && $attr != "") || !($delEmpty)) {
- $b[$key][$key_attr] = $attr;
- }
- }
- }
- }
- } else {
- if(is_int($key)) {
- $item = str_replace(chr(160),"",trim($item));
- if(($delEmpty && $item != "") || !($delEmpty)) {
- $b[$key] = $item;
- }
- }
- }
- }
- return $b;
-}
-
-/**
-* personOptionen($rechte)
-*
-* Enth�lt die m�glichen Optionen, die auf einen User angewandt werden k�nnen als
-* zweidimensionales Array mit folgenden Attributen:
-* [ziel]: Aufzurufendes PHP-Skript
-* [text]: Beschriftung der Schaltfl�che
-* [desc]: Beschreibung der Funktion
-* [rechte][]: Array mit den erforderlichen Rechten f�r die jeweilige Option. array("alle") steht f�r "ohne Einschr�nkung".
-*
-* Dieses in dieser Funktion gespeicherte Array wird abh�ngig von den �bergebenen
-* Rechten um nicht erlaubte Optionen reduziert und dann ausgegeben.
-*
-* @param array $rechte Eindimensionales Array $_SESSION['rechte']
-*
-* @return array Zweidimensionales Array mit den erlaubten Optionen.
-*
-* @author Timothy Burk
-*/
-function personOptionen($rechte) {
- global $utc_uid, $utc_cn, $START_PATH;
- $optionen = array();
- $optionen[] = array("ziel" => $START_PATH."person/datensatz.php?aktion=edit",
- "text" => "Userdaten bearbeiten",
- "desc" => "Anzeigen und �ndern der pers�nlichen Daten des Users.",
- "rechte" => array("writeMitarbeiter"),
- "hidden" => array("aktion" => "edit"));
- $optionen[] = array("ziel" => $START_PATH."person/datensatz.php",
- "text" => "Datensatz l�schen",
- "desc" => "Der User wird vollst�ndig mit allen Daten aus der Datenbank gel�scht.",
- "rechte" => array("writeMitarbeiter"),
- "hidden" => array("aktion" => "delete"));
- $optionen[] = array("ziel" => $START_PATH."person/datensatz.php",
- "text" => "User (de)aktivieren",
- "desc" => "Diese Funktion legt einen User durch die Deaktivierung im Archiv ab. Von dort kann der Datensatz weiterhin eingesehen und ggf. reaktiviert werden.",
- "rechte" => array("writeMitarbeiter"),
- "hidden" => array("aktion" => "archiv"));
- $optionen[] = array("ziel" => $START_PATH."person/vertrag_show.php",
- "text" => "Vertr�ge bearbeiten",
- "desc" => "Bearbeiten oder Anlegen eines Vertrages. Sie k�nnen dabei zwischen verschiedenen Vertragsarten w�hlen.",
- "rechte" => array("writeVertrag", "readVertrag"));
- $optionen[] = array("ziel" => $START_PATH."urlaub/krank_angabe.php",
- "text" => "Krankheitstage",
- "desc" => "Krankheitsdaten bearbeiten.",
- "rechte" => array("writeKrankheitUrlaub"),
- "hidden" => array("uidToChange" => $utc_uid, "GName" => $utc_cn));
- $optionen[] = array("ziel" => $START_PATH."urlaub/liste.php",
- "text" => "Urlaubstage anzeigen",
- "desc" => "Urlaubstage des Users in grafischer �bersicht anzeigen.",
- "rechte" => array("readKrankheitUrlaub"),
- "hidden" => array("wer" => $utc_uid, "wann" => "g", "sub" => $utc_cn));
- $optionen[] = array("ziel" => $START_PATH."person/rechte_show.php",
- "text" => "Rechte vergeben",
- "desc" => "Diese Option dient dazu, dem User bestimmte Rechte zuzuweisen, beispielsweise das Recht Urlaub zu beantragen, Vertragsdaten andere User zu bearbeiten oder einzusehen usw..",
- "rechte" => array("writeRechte"));
- $optionen[] = array("ziel" => $START_PATH."person/suchen.php",
- "text" => "Abbrechen",
- "desc" => "&nbsp;",
- "rechte" => array("alle"));
-
- $opt_reduced = array();
- foreach($optionen as $option) {
- if(in_array("alle",$option['rechte']) || vergleicheArrays($option['rechte'],$rechte)) {
- array_push($opt_reduced, $option);
- }
- }
- return $opt_reduced;
-}
-
-
-/**
-* makeArrFromAttribute($a, $attribute)
-*
-* Ein zweidimensionales Array wird nach der ersten Dimension durchlaufen.
-* Dabei werden die Werte des angegebenen Attributes $attribute f�r alle
-* Eintr�ge extrahiert und in einem neuen Array gespeichert, welches
-* anschlie�end zur�ckgegeben wird.
-*
-* @param array $a Zweidimensionales Array
-* @param string $attribute Schl�sselname der zweiten Dimension
-*
-* @return array Eindimensionales numerisches Array mit den Attributwerten.
-*
-* @author Timothy Burk
-*/
-function makeArrFromAttribute($a, $attribute) {
- $c = array();
- foreach($a as $b) {
- $c[] = $b[$attribute];
- }
- return $c;
-}
-?>
-
-<?php
-
-
-/**
-* sortArrayByKey sortiert die 1.Dimension von bis zu 5-dimensionalen Arrays
-* nach den Werten in einem beliebigen Schl�ssel in beliebiger Dimension
-*
-* PS: die Funktion sortArrayByKey ist nur sinnvoll, wenn sich die Array-Eintr�ge
-* der 1.Dim sehr �hnlich sind, sprich bei Suchergebnissen!!
-*
-* @param array $array : das zu sortierende Array
-* @param string $sortKey : der Schl�ssel, nach dem sortiert werden soll
-* Bsp.:
-* es soll nach $array[$i][$j][$k]['sortkey'] sortiert werden
-* => $sortKey = "$j#$k#sortkey"
-* @param string $sortDirection : die Sortierrichtung, g�ltige Werte sind "up", "down"
-*
-*
-* @author Daniel H�fler
-*/
-function sortArrayByKey($array, $sortKey, $sortDirection = "up") {
- $sortKeyArray = explode("#", $sortKey);
- $count = count($sortKeyArray);
- if($count < 5) {
- switch($count) {
- case 0:
- foreach($array as $key => $item) {
- $toSortKeys[$key] = $item;
- }
- break;
- case 1:
- foreach($array as $key => $item) {
- $toSortKeys[$key] = $item[$sortKeyArray[0]];
- }
- break;
- case 2:
- foreach($array as $key => $item) {
- $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]];
- }
- break;
- case 3:
- foreach($array as $key => $item) {
- $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]][$sortKeyArray[2]];
- }
- break;
- case 4:
- foreach($array as $key => $item) {
- $toSortKeys[$key] = $item[$sortKeyArray[0]][$sortKeyArray[1]][$sortKeyArray[2]][$sortKeyArray[3]];
- }
- break;
- }
- } else {
- echo "zu viele Dimensionen!! H�chstens 4 Dimensionen m�glich";
- return false;
- }
- if($sortDirection == "up") {
- asort($toSortKeys);
- } elseif($sortDirection == "down") {
- arsort($toSortKeys);
- } else {
- echo "Keine g�ltige Sortierrichtung!! W�hlen sie \"up\" oder \"down\"\n";
- return false;
- }
- $sortArray = array();
- foreach($toSortKeys as $key => $item) {
- $sortArray[$key] = $array[$key];
- }
- return($sortArray);
-}
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/config.inc.php b/ldap-site-mngmt/webinterface/lib/config.inc.php
deleted file mode 100644
index 18a59409..00000000
--- a/ldap-site-mngmt/webinterface/lib/config.inc.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
- # URL and Root Path of LSM Webinterface
- $START_PATH="https://dhcp.uni-freiburg.de/";
- #$START_PATH="http://localhost/lsm/";
-
- ###################################
- # LSM LDAP Directory Information
-
- # LDAP Server
- # Master
- define('LDAP_HOST', 'ldap://foo.ruf.uni-freiburg.de');
- #define('LDAP_HOST', 'ldaps://foo.ruf.uni-freiburg.de');
- # Slave
- #define('LDAP_HOST', 'ldap://bar.ruf.uni-freiburg.de');
- #define('LDAP_HOST', 'ldaps://bar.ruf.uni-freiburg.de');
-
- # Local for Testing
- #define('LDAP_HOST', 'localhost');
-
- define('LDAP_PORT', 389);
- #define('LDAP_PORT', 636);
-
- $suffix = "dc=uni-freiburg,dc=de";
- $domsuffix = "uni-freiburg.de";
- $rootAU = "ou=UniFreiburg,ou=RIPM,dc=uni-freiburg,dc=de";
- ###################################
-
-
- # einige Sachen, die aus Sicherheitsgr�nden in produktiven Umgebungen ge�ndert werden sollten!!!
- #$dummyUid = "rz-ldap"; // Dummy-User f�r einige Aktionen - muss angelegt werden!!!
- #$dummyPassword = "dummy";
-
- #$standardPassword = "..."; // das Passwort mit dem alle User im Anwendungsldap angelegt werden!!!
-
-?>
diff --git a/ldap-site-mngmt/webinterface/lib/dhcp_management_functions.php b/ldap-site-mngmt/webinterface/lib/dhcp_management_functions.php
deleted file mode 100644
index 97259728..00000000
--- a/ldap-site-mngmt/webinterface/lib/dhcp_management_functions.php
+++ /dev/null
@@ -1,727 +0,0 @@
-<?php
-
-/**
-* dhcp_management_functions.php - DHCP Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung des DHCP Dienstes
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-###################################################################################################
-
-# wenn DHCP Objekte geändert werden DHCP modify time der AU aktualisieren, und auch der AUs
-# referenzierter Objekte (Subnetz, RBS Dhcp Optionen) aktualisieren
-function update_dhcpmtime($au_array){
-
- global $ds, $auDN, $ldapError;
-
- $entry ['dhcpmtime'] = time();
-
- # eigene AU
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- echo "<br><b>dhcpMTime</b> erfolgreich in AU ".$auDN." aktualisiert!<br>" ;
- #return 1;
- }else{
- echo "<br>Fehler beim Aktualisieren der <b>dhcpMTime</b>!<br>" ;
- }
-
- # andere AUs
- if ( count($au_array) != 0 ) {
- $au_array = array_unique($au_array);
- # Bind als DHCP Manager
- $dhcp_uid = "dhcpmanager";
- $dhcp_userPassword = "dhcpman02";
- if (!($dhcp_ds = uniLdapConnect($dhcp_uid,$dhcp_userPassword))){
- echo "Konnte nicht als <b>DHCP-Manager</b> mit LDAP Server verbinden";
- die;
- }else{
- #echo "DHCP BIND erfolgreich";
- foreach ($au_array as $au){
- $results = ldap_mod_replace($dhcp_ds,$au,$entry);
- if ($results){
- echo "<b>dhcpMTime</b> erfolgreich in AU ".$au." aktualisiert!<br>" ;
- #return 1;
- }else{
- echo "<br>Fehler beim Aktualisieren der <b>dhcpMTime</b>!<br>" ;
- }
- }
- ldap_unbind($dhcp_ds);
- }
- }
-}
-
-
-# freie x.x.x.0/24 Netzwerke einer AU holen
-function get_networks(){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $networks = array();
- $fipb_array = get_freeipblocks_au($auDN);
- foreach ( $fipb_array as $fipb ){
- $exp = explode('_',$fipb);
- $fs = explode('.',$exp[0]);
- $fe = explode('.',$exp[1]);
- #print_r($fs); echo "<br>";
- #print_r($fe); echo "<br>";
-
- if ($fs[3] == 0){$networks [] = $exp[0];}
- $fs[2] = $fs[2] + 1;
- $fs[3] = 0;
-
- while ( $fs[2] <= $fe[2] ){
- $iprange = implode('_',array(implode('.',$fs),implode('.',$fs)));
- if (check_ip_in_iprange($iprange,$fipb)){
- $networks [] = implode('.',$fs);
- if ($fs[2] == 255){ $fs[1] = $fs[1] + 1; $fs[2] = 0; }
- else{ $fs[2] = $fs[2] + 1; }
- }
- }
- }
- #print_r($networks); echo "<br>";
- return $networks;
-}
-
-# Check ob AU über noch freie x.x.x.0/24 Netzwerke verfügt (freie IP Blöcke)
-function check_if_free_networks(){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $networks = 0;
- $fipb_array = get_freeipblocks_au($auDN);
- if ( $fipb_array[0] != "" ){
- foreach ( $fipb_array as $fipb ){
- $exp = explode('_',$fipb);
- $fs = explode('.',$exp[0]);
- $fe = explode('.',$exp[1]);
-
- if ($fs[3] == 0){return 1; break;}
- else{
- $fs[2] = $fs[2] + 1;
- $fs[3] = 0;
-
- while ( $fs[2] <= $fe[2] ){
- $iprange = implode('_',array(implode('.',$fs),implode('.',$fs)));
- if (check_ip_in_iprange($iprange,$fipb)){
- return 1; break 2;
- }
- if ($fs[2] == 255){ $fs[1] = $fs[1] + 1; $fs[2] = 0; }
- else{ $fs[2] = $fs[2] + 1; }
- }
- }
- }
- }
- return $networks;
-}
-
-# Check ob AU über x.x.x.0/24 Netzwerke insgesamt verfügt (maximale IP Blöcke)
-function check_if_max_networks(){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $networks = 0;
- $mipb_array = get_maxipblocks_au($auDN);
- if ( $mipb_array[0] != "" ){
- foreach ( $mipb_array as $mipb ){
- $exp = explode('_',$mipb);
- $fs = explode('.',$exp[0]);
- $fe = explode('.',$exp[1]);
-
- if ($fs[3] == 0){return 1; break;}
- else{
- $fs[2] = $fs[2] + 1;
- $fs[3] = 0;
-
- while ( $fs[2] <= $fe[2] ){
- $iprange = implode('_',array(implode('.',$fs),implode('.',$fs)));
- if (check_ip_in_iprange($iprange,$mipb)){
- return 1; break 2;
- }
- if ($fs[2] == 255){ $fs[1] = $fs[1] + 1; $fs[2] = 0; }
- else{ $fs[2] = $fs[2] + 1; }
- }
- }
- }
- }
- return $networks;
-}
-
-###################################################################################################
-
-function get_dhcpoffers($auDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn","dhcpofferdn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(objectclass=dhcpService)", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- #print_r($result);echo "<br><br>";
-
- $dhcp_offers = array();
- foreach ($result as $dhcp){
- if ( strpos($auDN, $dhcp['dhcpofferdn']) !== false ) # && $dhcp['dn'] != $dhcpserviceDN
- $dhcp_offers [] = $dhcp['dn'];
- }
- }
- #print_r($dhcp_offers);echo "<br><br>";
- return $dhcp_offers;
-}
-
-function alternative_dhcpservices($dhcpserviceDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $alt_dhcp = array();
-
- $dhcparray = get_dhcpoffers($auDN);
- # print_r($dhcparray); echo "<br>";
- if (count($dhcparray) != 0){
- for ($i=0; $i < count($dhcparray); $i++){
- if ($dhcparray[$i] != $dhcpserviceDN){
- $exp = ldap_explode_dn ( $dhcparray[$i], 1 );
- $alt = array ("dn" => $dhcparray[$i], "cn" => $exp[0], "au" => " / ".$exp[2]);
- $alt_dhcp[] = $alt;
- }
- }
- }
-
- return $alt_dhcp;
-}
-
-function alternative_dhcpsubnets($dhcpsubnetDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $alt_subnet = array();
- $dhcpservices = get_dhcpoffers($auDN);
- #print_r($dhcpservices); echo "<br>";
- if (count($dhcpservices) != 0){
- foreach ($dhcpservices as $servDN){
- $attribs = array("dn","cn","dhcphlpcont");
- #$servDN = $item['dn'];
- #print_r($servDN); echo "<br>";
- $filter = "(&(objectclass=dhcpSubnet)(dhcphlpcont=$servDN))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, $attribs, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }else{
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br>";
- foreach ($result as $subnet){
- if ( check_subnet_mipb($subnet['cn']) && $subnet['dn'] != $dhcpsubnetDN){
- $exp = ldap_explode_dn ( $subnet['dn'], 1 );
- $alt = array ("dn" => $subnet['dn'], "cn" => $exp[0], "au" => " / ".$exp[2]);
- $alt_subnet[] = $alt;
- }
- }
- }
-
- }
- }
-
- return $alt_subnet;
-}
-
-function check_subnet_mipb($subnet){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $subexp = explode('.',$subnet);
- $ret = 0;
- $mipb_array = get_maxipblocks_au($auDN);
- if ( $mipb_array[0] != "" ){
- foreach ( $mipb_array as $mipb ){
- $exp = explode('_',$mipb);
- $ms = explode('.',$exp[0]);
- $me = explode('.',$exp[1]);
- if ( $subexp[2] >= $ms[2] && $subexp[2] <= $me[2] ){
- $ret = 1;
- break;
- }
- }
- }
- if ($ret){return 1;}
- else{return 0;}
-
-}
-
-###############################################################################
-# Funktionen zur Verwaltung von DHCP Service Objekten
-#
-
-function add_dhcpservice ($dhcpserviceName,$dhcpoffer,$atts){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- #$dnarray = ldap_explode_dn ( $dhcpserviceDN, 1 );
- $dhcpserviceDN = "cn=".$dhcpserviceName.",cn=dhcp,".$auDN;
-
- $entrydhcp ['objectclass'][0] = "dhcpService";
- $entrydhcp ['objectclass'][1] = "dhcpOptions";
- $entrydhcp ['objectclass'][2] = "top";
- $entrydhcp ['cn'] = $dhcpserviceName;
- $entrydhcp ['dhcpofferdn'] = $dhcpoffer;
-
- # weitere Attribute
- foreach (array_keys($atts) as $key){
- if ($atts[$key] != ""){
- $entrydhcp[$key] = $atts[$key];
- }
- }
- print_r($entrydhcp); echo "<br>";
- print_r($dhcpserviceDN); echo "<br>";
-
- if ($result = ldap_add($ds, $dhcpserviceDN, $entrydhcp)){
- return 1;
- }
- else{
- $mesg = "Fehler beim eintragen des neuen DHCP Service Objekts!";
- return 0;
- }
-}
-
-
-# Löschen von Referenzen (dhcpHlpService) auf DHCP Service Objekt
-function cleanup_del_dhcpservice ($dhcpserviceDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $filter = "(&(|(objectClass=dhcpSubnet)(objectclass=dhcpHost))(dhcphlpcont=$dhcpserviceDN))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $delentry ['dhcphlpcont'] = $dhcpserviceDN;
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-}
-
-
-# Anpassen von Referenzen auf DHCP Service Objekt an neuen DN
-function adjust_dhcpservice_dn ($newdhcpserviceDN,$dhcpserviceDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $filter = "(&(|(objectClass=dhcpSubnet)(objectclass=dhcpHost))(dhcphlpcont=$dhcpserviceDN))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['dhcphlpcont'] = $newdhcpserviceDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-
-}
-
-
-
-function alternative_dhcpobjects($objecttype,$objectDN,$ip){
-
- global $ds, $suffix, $auDN, $assocdom, $ldapError;
-
- $alt_dhcp = array();
- $expip = explode('.',$ip);
- $subnetDN = "";
-
- /*if ($objecttype == "subnet"){
- # alternative DHCP Dienstobjekte eigene AU/übergeordnete AUs
- $servarray = alternative_dhcpservices("");
- #print_r($servarray); echo "<br>";
- if (count($servarray) != 0){
- for ($i=0; $i < count($servarray); $i++){
- $alt_dhcp[] = $servarray[$i];
- }
- }
- if ($ip == ""){
- # alternative DHCP Subnetzobjekte eigene AU/übergeordnete AUs hinzufügen
- $subarray = alternative_dhcpsubnets($objectDN);
- #print_r($subarray);
- if (count($subarray) != 0){
- for ($i=0; $i < count($subarray); $i++){
- $alt_dhcp[] = $subarray[$i];
- }
- }
- }
- }*/
-
- if ($objecttype == "service"){
- # alternative DHCP Dienstobjekte eigene AU/übergeordnete AUs
- $servarray = alternative_dhcpservices($objectDN);
- #print_r($servarray); echo "<br>";
- if (count($servarray) != 0){
- for ($i=0; $i < count($servarray); $i++){
- $alt_dhcp[] = $servarray[$i];
- }
- }
- /*# Subnetz entsprechend IP
- $subarray = alternative_dhcpsubnets($objectDN);
- #print_r($subarray);
- if (count($subarray) != 0){
- for ($i=0; $i < count($subarray); $i++){
- $expsub = explode('.', $subarray[$i]['cn']);
- if ($expip[0] == $expsub[0] && $expip[1] == $expsub[1] && $expip[2] == $expsub[2]){
- $alt_dhcp[] = $subarray[$i];
- $subnetDN = $subarray[$i]['dn'];
- break;
- }
- }
- }
- # falls keine IP weitere Subnetze hinzufügen
- #print_r($subarray);
- if ( $ip == "" && count($subarray) != 0 ){
- for ($i=0; $i < count($subarray); $i++){
- if ($subnetDN != $subarray[$i]['dn']){
- $alt_dhcp[] = $subarray[$i];
- }
- }
- }*/
- }
-
- if ($objecttype == "nodhcp"){
- # alternative DHCP Dienstobjekte eigene AU/übergeordnete AUs
- $servarray = alternative_dhcpservices("");
- #print_r($servarray); echo "<br>";
- if (count($servarray) != 0){
- for ($i=0; $i < count($servarray); $i++){
- $alt_dhcp[] = $servarray[$i];
- }
- }
- /*# Subnetz entsprechend IP
- $subarray = alternative_dhcpsubnets($objectDN);
- #print_r($subarray);
- if (count($subarray) != 0){
- for ($i=0; $i < count($subarray); $i++){
- $expsub = explode('.', $subarray[$i]['cn']);
- if ($expip[0] == $expsub[0] && $expip[1] == $expsub[1] && $expip[2] == $expsub[2]){
- $alt_dhcp[] = $subarray[$i];
- $subnetDN = $subarray[$i]['dn'];
- break;
- }
- }
- }
- # falls keine IP weitere Subnetze hinzufügen
- #print_r($subarray); echo "<br>";print_r($subnetDN);
- if ( $ip == "" && count($subarray) != 0 ){
- for ($i=0; $i < count($subarray); $i++){
- if ($subnetDN != $subarray[$i]['dn']){
- $alt_dhcp[] = $subarray[$i];
- }
- }
- }*/
- }
- #echo "<br>";print_r($alt_dhcp);
- return $alt_dhcp;
-}
-
-
-###############################################################################
-# Funktionen zur Verwaltung von DHCP Subnet Objekten
-#
-
-function add_dhcpsubnet ($cn,$dhcpservice,$netmask,$atts){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $subnet = implode('_',array($cn,$cn));
-
- # IP checken und FIBS anpassen
- $fipb_array = get_freeipblocks_au($auDN);
-
- for ($i=0; $i < count($fipb_array); $i++){
- if ( split_iprange($subnet,$fipb_array[$i]) != 0 ){
- $ipranges = split_iprange($subnet,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- break;
- }
- }
-
- if ($i < count($fipb_array) ){
- # ldap_mod_replace -> Array fipb_array aktualisiert die FIPB in AU mit $auDN
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
-
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- echo "<br>Neue FIPBs erfolgreich eingetragen!<br>" ;
-
- $dhcpsubnetDN = "cn=".$cn.",cn=dhcp,".$auDN;
-
- $entrydhcp ['objectclass'][0] = "dhcpSubnet";
- $entrydhcp ['objectclass'][1] = "dhcpOptions";
- $entrydhcp ['objectclass'][2] = "top";
- $entrydhcp ['cn'] = $cn;
- $entrydhcp ['dhcpoptnetmask'] = $netmask;
- if ( $dhcpservice != "none" ){
- $entrydhcp ['dhcphlpcont'] = $dhcpservice;
- }
- # weitere Attribute
- foreach (array_keys($atts) as $key){
- if ($atts[$key] != ""){
- $entrydhcp[$key] = $atts[$key];
- }
- }
- print_r($entrydhcp); echo "<br>";
- print_r($dhcpsubnetDN); echo "<br>";
-
- if ($result = ldap_add($ds, $dhcpsubnetDN, $entrydhcp)){
- printf("Subnet <b>%s / %s</b> erfolgreich eingetragen",$cn,$netmask);
- update_dhcpmtime(array());
- return 1;
- #if ( check_ip_in_subnet($range1,$cn) && check_ip_in_subnet($range2,$cn)){
- # $dhcprange = implode('_',array($range1,$range2));
- # if ( $range = new_ip_dhcprange($dhcprange,$dhcpsubnetDN,$auDN) ){
- # echo "DHCP Range <b>".$range1." - ".$range2."</b> erfolgreich im Subnetobjekt eingetragen";
- # }else{
- # echo "DHCP Range <b>".$range1." - ".$range2."</b> konnte nicht im Subnetobjekt eingetragen werden!";
- # }
- # return 1;
- #}else{
- # echo "DHCP Range nicht in Subnetz ".$cn." enthalten.<br>Keine DHCP Range angelegt.<br>";
- # return 1;
- #}
- }else{
- echo "<br>Fehler beim anlegen des DHCP Subnet Objekts!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim eintragen der FIPBs!<br>";
- return 0;
- }
- }
- else{
- printf("<br>Subnet %s nicht im verfuegbaren IP Bereich!<br>", $subnet );
- return 0;
- }
-
-}
-
-function delete_dhcpsubnet($subnetDN,$cn){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- delete_ip_dhcprange($subnetDN,$auDN);
- if ( dive_into_tree_del($subnetDN,"") ){
- cleanup_del_dhcpsubnet($subnetDN);
- $oldsubnetip = implode("_",array($cn,$cn));
- $entry ['FreeIPBlock'] = $oldsubnetip;
- $results = ldap_mod_add($ds,$auDN,$entry);
- if ($results){
- merge_ipranges($auDN);
- update_dhcpmtime(array());
- return 1;
- }else{
- return 0;
- }
- }else{
- return 0;
- }
-
-}
-
-function modify_subnet_dn($subnetDN,$newsubnetDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- # check IP-Net-Syntax ...
-
- # Subnet CNs (IP) in internes Range ".._.." Format bringen
- $newcn = ldap_explode_dn($newsubnetDN,1);
- $newcnarray = array($newcn[0],$newcn[0]);
- $newsubnetip = implode("_",$newcnarray);
- $oldcn = ldap_explode_dn($subnetDN,1);
- $oldcnarray = array($oldcn[0],$oldcn[0]);
- $oldsubnetip = implode("_",$oldcnarray);
-
- # IP checken und FIBS anpassen
- $fipb_array = get_freeipblocks_au($auDN);
- for ($i=0; $i < count($fipb_array); $i++){
- if ( split_iprange($newsubnetip,$fipb_array[$i]) != 0 ){
- $ipranges = split_iprange($newsubnetip,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- break;
- }
- }
-
- if ($i < count($fipb_array) ){
-
- # zunächst alte DHCP Ranges löschen
- delete_ip_dhcprange($subnetDN,$auDN);
- # Move Subtree
- if(move_subtree($subnetDN, $newsubnetDN)){
- adjust_dhcpsubnet_dn($newsubnetDN, $subnetDN);
- printf("<br>Subnet Name (IP) erfolgreich von %s zu %s ge&auml;ndert!<br>", $oldcn[0], $newcn[0]);
- # neue Subnetz-IP aus FIPBs entfernen
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
- # alte Subnetz-IP in FIPBs integrieren
- $entry ['FreeIPBlock'][] = $oldsubnetip;
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- merge_ipranges($auDN);
- update_dhcpmtime(array());
- echo "<br>FIPBs erfolgreich angepasst!<br>" ;
- return 1;
- }else{
- echo "<br>Fehler beim Anpassen der FIPBs!<br>" ;
- }
- }else{
- echo "<br>Fehler beim &auml;ndern des Subnet Namens (IP)!<br>" ;
- }
- }else{
- printf("<br>Neues Subnet %s nicht im verfuegbaren IP Bereich!<br>", $newcn[0] );
- return 0;
- }
-}
-
-# wird eigentlich nicht benötigt wenn host deklarationen nicht in subnet scope sind ...
-function cleanup_del_dhcpsubnet ($dhcpsubnetDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $filter = "(&(objectclass=dhcpHost)(dhcphlpcont=$dhcpsubnetDN))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $delentry ['dhcphlpcont'] = $dhcpsubnetDN;
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-}
-
-
-# wird eigentlich nicht benötigt wenn host deklarationen nicht in subnet scope sind ...
-function adjust_dhcpsubnet_dn ($newdhcpsubnetDN,$dhcpsubnetDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $filter = "(&(objectclass=dhcpHost)(dhcphlpcont=$dhcpsubnetDN))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['dhcphlpcont'] = $newdhcpsubnetDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-}
-
-
-# Nach Änderung der Host IP Adresse, überprüfen ob neue IP noch mit Subnet übereinstimmt
-# Falls keine Übereinstimmung mehr, dann Subnetzuordnung aus Host löschen.
-# wird eigentlich nicht benötigt wenn host deklarationen nicht in subnet scope sind ...
-function adjust_hostip_dhcpsubnet($ip,$hostDN,$dhcphlpcont) {
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $subnet = ldap_explode_dn($dhcphlpcont, 1);
- $expsub = explode('.', $subnet[0]);
- print_r($expsub); echo "<br>";
- $expip = explode('.', $ip);
- print_r($expsip); echo "<br>";
- if ($expip[0] != $expsub[0] || $expip[1] != $expsub[1] || $expip[2] != $expsub[2]){
- $entrydhcp ['dhcphlpcont'] = array();
- ldap_mod_del($ds,$hostDN,$entrydhcp);
- echo "Host mit neuer IP <b>".$ip."</b> wurde aus DHCP Subnet <b>".$subnet[0]."</b> entfernt<br><br>";
- }
-}
-
-function check_ip_in_subnet($ip,$subnet) {
-
- global $ds, $suffix, $auDN, $ldapError;
- $ipchunks = explode('.',$ip);
- $netchunks = explode('.',$subnet);
- $return = 0;
- for ($i=1; $i<4; $i++){
- if ( $netchunks[$i] == "0" ){
- if ( $ipchunks[$i-1] == $netchunks[$i-1] ){
- $return = 1;
- }
- break;
- }
- }
- if ($return) { return 1; }else{ return 0; }
-}
-
-#########################
-# Pools
-function add_dhcppool ($dhcpsubnetdn,$range,$unknownclients,$dhcpservicedn,$rbssrvdn){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN,"(objectclass=*)", array("cn"), "dn", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
-
- $dhcpcn_array = array();
- foreach ($result as $item){
- $dhcpcn_array [] = $item['cn'];
- }
- print_r($dhcpcn_array);echo "<br><br>";
- for ($i=0;$i<100;$i++){
- if ( array_search ( "Pool".$i, $dhcpcn_array ) === false ){
- $cn = "Pool".$i;
- break;
- }
- }
- $dhcppoolDN = "cn=".$cn.",cn=dhcp,".$auDN;
-
- $entrydhcp ['objectclass'][0] = "dhcpPool";
- $entrydhcp ['objectclass'][1] = "dhcpOptions";
- $entrydhcp ['objectclass'][2] = "top";
- $entrydhcp ['cn'] = $cn;
- $entrydhcp ['dhcphlpcont'] = $dhcpsubnetdn;
- $entrydhcp ['dhcprange'] = $range;
- if ($unknownclients == "allow"){
- $entrydhcp ['dhcpoptallow'] = "unknown-clients";
- }elseif ($unknownclients == "ignore"){
- $entrydhcp ['dhcpoptignore'] = "unknown-clients";
- }else{
- $entrydhcp ['dhcpoptdeny'] = "unknown-clients";
- }
- if ( $rbssrvdn != "none" ){
- $entrydhcp ['hlprbservice'] = $rbssrvdn;
- }
-
- print_r($dhcppoolDN);echo "<br><br>";
- print_r($entrydhcp);echo "<br><br>";
-
- if ($result = ldap_add($ds,$dhcppoolDN,$entrydhcp)){
- return 1;
- }else{return 0;}
-
-}
-
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/host_management_functions.php b/ldap-site-mngmt/webinterface/lib/host_management_functions.php
deleted file mode 100644
index 502dccb2..00000000
--- a/ldap-site-mngmt/webinterface/lib/host_management_functions.php
+++ /dev/null
@@ -1,474 +0,0 @@
-<?php
-
-/**
-* host_management_functions.php - Rechner und Gruppen Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung von Rechnern und Rechnergruppen,
-* sowie von MachineConfig-Objekten
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-
-$ldapError = null;
-
-###################################################################################################
-
-###############################################################################
-# Funktionen zur Verwaltung von Rechnern
-#
-
-# Ändern des DN des Rechners, d.h. beim Ändern des Attributes 'hostname'
-function modify_host_dn($hostDN, $newhostDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if (move_subtree($hostDN,$newhostDN)){
- adjust_dn_entries($hostDN,$newhostDN);
-
- # Gruppen anpassen in denen Host Member ist
- $groups = get_groups_member($auDN,array("dn","member"),$hostDN);
- # print_r($groups); echo "<br>";
- if (count($groups != 0)){
-
- foreach ($groups as $group){
- #$entry = array("member");
- if ( count($group['member']) > 1 ){
- for($i=0; $i<count($group['member']); $i++){
- if ($hostDN == $group['member'][$i]){
- $entry ['member'][$i] = $newhostDN;
- }else{
- $entry ['member'][$i] = $group['member'][$i];
- }
- }
- # print_r($entry); echo "<br>";
- ldap_mod_replace($ds,$group['dn'],$entry);
- }
- if ( count($group['member']) == 1 && $group['member'] == $hostDN ){
- $entry['member'] = $newhostDN;
- # print_r($entry); echo "";
- ldap_mod_replace($ds,$group['dn'],$entry);
- }
- }
- }
-
- }
-}
-
-
-# Rechner neu anlegen
-function add_host($hostDN,$hostname,$hostdesc,$mac,$ip,$atts,$dhcp){
-
- global $ds, $suffix, $auDN, $assocdom, $ldapError;
-
- $syntax = new Syntaxcheck;
-
- $entryhost ['objectclass'][0] = "Host";
- $entryhost ['objectclass'][1] = "dhcpHost";
- $entryhost ['objectclass'][2] = "dhcpOptions";
- $entryhost ['objectclass'][3] = "top";
- $entryhost ["hostname"] = $hostname;
- $entryhost ["domainname"] = $assocdom;
- if ($hostdesc != ""){$entryhost ["description"] = $hostdesc;}
- if ($mac != "" && $syntax->check_mac_syntax($mac) ){
- $entryhost ["hwaddress"] = $mac;
- if ($dhcp != "none" && $dhcp != ""){
- $entryhost ["dhcphlpcont"] = $dhcp;
- }
- }else{
- echo "Keine MAC Adresse angelegt. Kein Eintrag im DHCP.<br>";
- }
- foreach (array_keys($atts) as $key){
- if ($atts[$key] != ""){
- $entryhost[$key] = $atts[$key];
- }
- }
-
- print_r($entryhost); echo "<br>";
- if ($result = ldap_add($ds, $hostDN, $entryhost)){
-
- if($ip != ""){
- if( $syntax->check_ip_syntax($ip) ){
- $newip_array = array($ip,$ip);
- $newip = implode('_',$newip_array);
- print_r($newip); echo "<br><br>";
- if (new_ip_host($newip,$hostDN,$auDN)){
- echo "IP erfolgreich eingetragen<br><br>";
- if ($mac != "" && $dhcp != "none" && $dhcp != ""){
- $entryfa ["dhcpoptfixed-address"] = "ip";
- if (ldap_mod_add($ds,$hostDN,$entryfa)){
- echo "DHCP Fixed-Address erfolgreich auf IP gesetzt<br><br>";
- }else{
- echo "Fehler beim Setzen der DHCP Fixed-Address<br><br>";
- }
- }
- }else{
- echo "Fehler beim eintragen der IP<br><br>";
- }
- }else{
- echo "Falsche IP Syntax! IP nicht eingetragen<br><br>";
- }
- }
- echo "Rechner erfolgreich eingetragen";
- if ($mac != "" && $dhcp != "none" && $dhcp != ""){
- update_dhcpmtime(array());
- }
- return 1;
- }
- else{
- $mesg = "Fehler beim eintragen des neuen Rechners!";
- return 0;
- }
-}
-
-
-# Rechner löschen
-function delete_host($hostDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $hostdata = get_node_data($hostDN,array("hwaddress","ipaddress"));
-
- # IP Adresse freigeben
- if ($hostdata['ipaddress'] != ""){
- delete_ip_host($hostDN,$auDN);
- }
-
- if (dive_into_tree_del($hostDN,"")){
-
- # alle DN Objekte in denen Rechner stand ebenfalls löschen
- # Member in Groups
- $groups = get_groups_member($auDN,array("dn","cn"),$hostDN);
- # echo "Rechner aus den Gruppen entfernen: <br>"; print_r($groups); echo "<br>";
- if (count($groups) != 0){
- $entrydel ['member'] = $hostDN;
- foreach ($groups as $group){
- echo "Entferne gel&ouml;schten Rechner aus Gruppe <b>".$group['cn']."</b> <br>";
- $resultG = ldap_mod_del($ds, $group['dn'], $entrydel);
-
- # Filename in Gruppen-PXEs
- $pxes = get_pxeconfigs($group['dn'],array("dn","cn"));
- if ( count($pxes) != 0 && $hostdata['hwaddress'] != ""){
- foreach ($pxes as $pxe){
- $delfilename ['filename'] = "01-".$hostdata['hwaddress'];
- $resultP = ldap_mod_del($ds,$pxe['dn'],$delfilename);
- echo "Entferne MAC des gel&ouml;schten Rechners aus Gruppen-PXE <b>".$pxe['cn']."</b> <br>";
- }
- }
- }
- }
-
- # DHCP, DNS, RBS Server ... noch todo
- # ...
- return 1;
- }
- else{
- return 0;
- }
-}
-
-function check_hostname($hostname){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $brothercheck = 0;
- $brotherhosts = get_hosts($auDN,array("hostname"),"");
-
- foreach ($brotherhosts as $item){
- if( $item['hostname'] == $hostname ){
- $brothercheck = 1;
- break;
- }
- }
- return $brothercheck;
-}
-
-###############################################################################
-# Funktionen zur Verwaltung von Rechnergruppen
-#
-
-# Gruppen DN ändern
-function modify_group_dn($groupDN, $newgroupDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($groupDN,$newgroupDN)){
- adjust_dn_entries($groupDN,$newgroupDN);}
-}
-
-
-# Gruppe neu anlegen
-function add_group($groupDN,$groupcn,$groupdesc,$addmember){
-
- global $ds, $suffix, $auDN, $assocdom, $ldapError;
-
- $entrygroup ['objectclass'][0] = "groupOfComputers";
- $entrygroup ['objectclass'][1] = "top";
- $entrygroup ["cn"] = $groupcn;
- if ($groupdesc != ""){$entrygroup ["description"] = $groupdesc;}
-
- # Members anlegen (zuerst 'none' rausnehmen)
- $n = array_search('none',$addmember);
- if ($n === 0 ){array_splice($addmember, $n, 1);}
-
- if (count($addmember) != 0){
- $i = 0;
- foreach ($addmember as $member){
- $exp = explode('_',$member);
- $entrygroup['member'][$i] = $exp[0];
- $i++;
- }
- }
- print_r($entrygroup); echo "<br>";
-
- if ($result = ldap_add($ds, $groupDN, $entrygroup)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-# Gruppe löschen
-function delete_group($groupDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if (dive_into_tree_del($groupDN,"")){
-
- # alle DN Objekte in denen Gruppe stand ebenfalls löschen
- # DHCP ... noch todo
-
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-function add_groupmember($groupDN,$member){
-
- global $ds, $suffix, $auDN, $ldapError;
-
-}
-
-
-function delete_groupmember($groupDN,$member){
-
- global $ds, $suffix, $auDN, $ldapError;
-
-}
-
-
-###############################################################################
-# Funktionen zur Verwaltung von MachineConfigs
-#
-
-function check_timerange($mcday,$mcbeg,$mcend,$nodeDN,$excepttimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $brothers = get_machineconfigs($nodeDN,array("timerange"));
- # keine Überschneidungen pro Spez.Ebene zulassen
- #print_r($brothers); echo "<br><br>";
- if (count($brothers) != 0){
-
- $intersect = 0;
- foreach ($brothers as $item){
-
- # Fall, dass Brother mehrere TimeRanges hat
- if (count($item['timerange']) > 1){
- foreach ($item['timerange'] as $tr){
-
- if($tr != $excepttimerange){
- $exptime = explode('_',$tr);
- $bmcday = $exptime[0];
- $bmcbeg = $exptime[1];
- $bmcend = $exptime[2];
- #echo "mcday:"; print_r($mcday); echo "<br>";
- #echo "bmcday:"; print_r($bmcday); echo "<br>";
- #echo "mcbeg:"; print_r($mcbeg); echo "<br>";
- #echo "bmcbeg:"; print_r($bmcbeg); echo "<br>";
- #echo "mcend:"; print_r($mcend); echo "<br>";
- #echo "bmcend:"; print_r($bmcend); echo "<br>";
-
- if ($mcday == $bmcday){
- if ( $mcbeg > $bmcend || $mcend < $bmcbeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bmcday."_".$bmcbeg."_".$bmcend;
- break;
- }
- }
- }
-
- }
- }
- # Fall, dass Brother nur eine TimeRange hat
- elseif (count($item['timerange']) == 1){
-
- if($item['timerange'] != $excepttimerange){
- $exptime = explode('_',$item['timerange']);
- $bmcday = $exptime[0];
- $bmcbeg = $exptime[1];
- $bmcend = $exptime[2];
- #echo "mcday:"; print_r($mcday); echo "<br>";
- #echo "bmcday:"; print_r($bmcday); echo "<br>";
- #echo "mcbeg:"; print_r($mcbeg); echo "<br>";
- #echo "bmcbeg:"; print_r($bmcbeg); echo "<br>";
- #echo "mcend:"; print_r($mcend); echo "<br>";
- #echo "bmcend:"; print_r($bmcend); echo "<br>";
-
- if ($mcday == $bmcday){
- if ( $mcbeg > $bmcend || $mcend < $bmcbeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bmcday."_".$bmcbeg."_".$bmcend;
- break;
- }
- }
- }
- }
- }
- #echo "intersect: "; print_r($intersect); echo "<br>";
- if ($intersect == 1){
- echo "<b>[".$mcday."_".$mcbeg."_".$mcend."]</b> &uuml;berschneidet sich mit der
- bereits existierende <b>Time Range [".$intersecttr."]</b> !";
- return 0;
- }else{
- return 1;
- }
- }else{
- return 1;
- }
-}
-
-
-
-function add_mc($mcDN,$mccn,$mctimerange,$mcdesc,$mcattribs){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $mcentry ['objectclass'][0] = "MachineConfig";
- $mcentry ['objectclass'][1] = "top";
- $mcentry ['cn'] = $mccn;
- if ($mctimerange != ""){$mcentry ['timerange'] = $mctimerange;}
- if ($mcdesc != ""){$mcentry ['description'] = $mcdesc;}
- if ($mcdesc == ""){$mcentry ['description'] = $mccn;}
- foreach (array_keys($mcattribs) as $key){
- if ($mcattribs[$key] != ""){
- $mcentry[$key] = $mcattribs[$key];
- }
- }
-
- #print_r($mcentry); echo "<br>";
- #print_r($mcDN); echo "<br>";
- if (ldap_add($ds,$mcDN,$mcentry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-# MachineConfig CN (DN) ändern
-function modify_mc_dn($mcDN, $newmcDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($mcDN,$newmcDN)){
- return 1;
- }else{
- return 0;
- }
-}
-
-function change_mc_timerange($mcDN,$newmcDN,$mctimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- # move tree
- if (move_subtree($mcDN,$newmcDN)){
- # timerange ändern
- $entrymc ['timerange'] = $mctimerange;
- if (ldap_mod_replace($ds,$newmcDN,$entrymc)){
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-#####################################################################
-# Natürliches Sortieren (x.x.4.9 vor x.x.4.11 ) von mehr-dim Arrays der Art:
-# Array (
-# [0] => Array (
-# [hostname] = client01
-# [ipaddress] = 132.230.4.11
-# )
-# [1] => Array (
-# [hostname] = client02
-# [ipaddress] = 132.230.4.9
-# )
-# )
-
-/**
- * @return Returns the array sorted as required
- * @param $aryData Array containing data to sort
- * @param $strIndex Name of column to use as an index
- * @param $strSortBy Column to sort the array by
- * @param $strSortType String containing either asc or desc [default to asc]
- * @desc Naturally sorts an array using by the column $strSortBy
- */
-function array_natsort($aryData, $strIndex, $strSortBy, $strSortType=false){
-
- // if the parameters are invalid
- if (!is_array($aryData) || !$strIndex || !$strSortBy){
- // return the array
- return $aryData;
- }
- // create our temporary arrays
- $arySort = $aryResult = array();
- // loop through the array
- foreach ($aryData as $aryRow){
- // set up the value in the array
- $arySort[$aryRow[$strIndex]] = $aryRow[$strSortBy];
- }
- // apply the natural sort
- natsort($arySort);
- // if the sort type is descending
- if ($strSortType=="desc"){
- // reverse the array
- arsort($arySort);
- }
- // loop through the sorted and original data
- foreach ($arySort as $arySortKey => $arySorted){
- foreach ($aryData as $aryOriginal){
- // if the key matches
- if ($aryOriginal[$strIndex]==$arySortKey){
- // add it to the output array
- array_push($aryResult, $aryOriginal);
- }
- }
- }
-
- return $aryResult;
-}
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/ip_management_functions.php b/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
deleted file mode 100644
index e5c30eca..00000000
--- a/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
+++ /dev/null
@@ -1,1553 +0,0 @@
-<?php
-
-/**
-* ip_management_functions.php - IP Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung der IP Adressen.
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-
-####################################################################################
-# Basisfunktionen zur Verarbeitung von IP Ranges
-
-/*PHP Funktionen ip2long(), long2ip() machen dasselbe und werden verwendet
-function ip_dot_to_long($ip_dot)
-{
- $ip_long = unpack('N*', pack('C*', preg_split('/\./',$ip_dot)));
- return $ip_long;
-}
-
-function ip_long_to_dot($ip_long)
-{
- $ip_dot = join('.',unpack('C*',pack('N',$ip_long)));
- return $ip_dot;
-}*/
-
-/**
-* check_ip_in_iprange($iprange1, $iprange2)
-* Prueft ob erste IP Range in zweiter IP Range enthalten ist.
-*
-* @param string iprange1 erste IP Range
-* @param string iprange2 zweite IP Range
-*
-* @return boolean Erfolg bzw. Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function check_ip_in_iprange($iprange1,$iprange2)
-{
- $ipr1exploded = explode('_',$iprange1);
- $ipr2exploded = explode('_',$iprange2);
- $ipr1s = ip2long($ipr1exploded[0]);
- $ipr1e = ip2long($ipr1exploded[1]);
- $ipr2s = ip2long($ipr2exploded[0]);
- $ipr2e = ip2long($ipr2exploded[1]);
-
- if( $ipr1s >= $ipr2s && $ipr1e <= $ipr2e ){ return 1;}
- else{ return 0;}
-}
-
-
-/**
-* split_iprange($iprange1, $iprange2)
-* Entnimmt erste IP Range aus der zweiten IP Range und gibt bei Erfolg Array verbleibender
-* IP Ranges zurueck.
-*
-* @param string iprange1 erste IP Range
-* @param string iprange2 zweite IP Range
-*
-* @return array bei Erfolg bzw. boolean 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function split_iprange($iprange1,$iprange2)
-{
- $iprange3;
- $iprange4;
- $ipranges = array();
-
- if (check_ip_in_iprange($iprange1,$iprange2) == 1)
- {
- $ipr1exploded = explode('_',$iprange1);
- $ipr2exploded = explode('_',$iprange2);
- $ipr1s = ip2long($ipr1exploded[0]);
- $ipr1e = ip2long($ipr1exploded[1]);
- $ipr2s = ip2long($ipr2exploded[0]);
- $ipr2e = ip2long($ipr2exploded[1]);
-
- $ipr3s = $ipr2s;
- $ipr3e = $ipr1s - 1;
- $ipr4s = $ipr1e + 1;
- $ipr4e = $ipr2e;
-
- if ($ipr3s <= $ipr3e){$iprange3 = long2ip($ipr3s)."_".long2ip($ipr3e); $ipranges[] = $iprange3;}
- if ($ipr4s <= $ipr4e){$iprange4 = long2ip($ipr4s)."_".long2ip($ipr4e); $ipranges[] = $iprange4;}
-
- #echo "MATCH!<br>";
- return $ipranges;
- }
- else
- {
- #echo "IPRange1 not in IPRange2: ";
- return 0;
- }
-}
-
-
-/**
-* intersect_ipranges($iprange1, $iprange2)
-* Bildet die Schnittmenge zweier IP Ranges.
-*
-* @param string iprange1 erste IP Range
-* @param string iprange2 zweite IP Range
-*
-* @return string iprange3 Schnitt-IP-Range
-*
-* @author Tarik Gasmi
-*/
-function intersect_ipranges($iprange1,$iprange2)
-{
- $ipr1exploded = explode('_',$iprange1);
- $ipr2exploded = explode('_',$iprange2);
- $ipr1s = ip2long($ipr1exploded[0]);
- $ipr1e = ip2long($ipr1exploded[1]);
- $ipr2s = ip2long($ipr2exploded[0]);
- $ipr2e = ip2long($ipr2exploded[1]);
-
- if ( $ipr1s >= $ipr2s ){$ipr3s = $ipr1s;}else{$ipr3s = $ipr2s;}
- if ( $ipr1e <= $ipr2e ){$ipr3e = $ipr1e;}else{$ipr3e = $ipr2e;}
-
- if ($ipr3s <= $ipr3e){
- $iprange3 = long2ip($ipr3s)."_".long2ip($ipr3e);
- return $iprange3;
- }
- else{
- return "";
- echo "No Intersection<br>";
- }
-}
-
-
-/**
-* merge_2_ipranges($iprange1, $iprange2)
-* Vereinigt 2 IP Ranges zu einer IP Range, falls sie adjazent sind oder sich ueberschneiden.
-*
-* @param string iprange1 erste IP Range
-* @param string iprange2 zweite IP Range
-*
-* @return string iprange3 bei Erfolg bzw. boolean 0 bei Misserfolg.
-*
-* @author Tarik Gasmi
-*/
-function merge_2_ipranges($iprange1,$iprange2)
-{
-
- $ipr1exploded = explode('_',$iprange1);
- $ipr2exploded = explode('_',$iprange2);
- $ipr1s = ip2long($ipr1exploded[0]);
- $ipr1e = ip2long($ipr1exploded[1]);
- $ipr2s = ip2long($ipr2exploded[0]);
- $ipr2e = ip2long($ipr2exploded[1]);
-
- if ( ($ipr1e + 1) >= $ipr2s && $ipr1s <= ($ipr2e + 1) ){
- if ($ipr1s <= $ipr2s){ $ipr3s = $ipr1s; }else{ $ipr3s = $ipr2s; }
- if ($ipr1e <= $ipr2e){ $ipr3e = $ipr2e; }else{ $ipr3e = $ipr1e; }
-
- if ($ipr3s <= $ipr3e){
- $iprange3 = long2ip($ipr3s)."_".long2ip($ipr3e);
- printf("Merging: %s and %s -> %s<br>",$iprange1,$iprange2,$iprange3);
- return $iprange3;
- }
- else{
- # printf("No Merging possible: %s and %s<br>",$iprange1,$iprange2);
- return 0; }
- }
- else{
- # printf("No Merging possible: %s and %s<br>",$iprange1,$iprange2);
- return 0;
- }
-}
-
-
-#########################################################################################
-# IP Management LDAP Grundfunktionen
-
-/**
-* get_freeipblocks_au($auDN)
-* Holt die FreeIPBlocks einer AU und gibt sie in einem Array zurueck.
-*
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return array fipb_array FreeIPBlocks der AU.
-*
-* @author Tarik Gasmi
-*/
-function get_freeipblocks_au($auDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $auDN, "objectclass=*", array("FreeIPBlock"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "search problem";
- die;
- } else {
- $fipb_array = array();
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- if (count($item['freeipblock']) > 1){
- $fipb_array = $item['freeipblock'];
- }
- else{
- $fipb_array[] = $item['freeipblock'];
- }
- }
- }
- return $fipb_array;
-}
-
-/**
-* get_maxipblocks_au($auDN)
-* Holt die MaxIPBlocks einer AU und gibt sie in einem Array zurueck.
-*
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return array mipb_array MaxIPBlocks der AU.
-*
-* @author Tarik Gasmi
-*/
-function get_maxipblocks_au($auDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $auDN, "objectclass=*", array("MaxIPBlock"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "search problem";
- die;
- } else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- if (count($item['maxipblock']) > 1){
- $mipb_array = $item['maxipblock'];
- }
- else{
- $mipb_array[] = $item['maxipblock'];
- }
- }
- }
- return $mipb_array;
-}
-
-# benutze IP Ranges (Rechner, Ranges, Delegs)
-function get_used_ipblocks_au($auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $host_ips = array();
- $dhcps_ips = array();
- $dhcpr_ips = array();
- $deleg_ips = array();
- # Rechner IPs
- if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(objectclass=Host)", array("IPAddress"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- } else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- if (count($item['ipaddress']) != 0){
- $host_ips [] = $item['ipaddress'];
- }
- }
- }
- echo "Rechner IPs:<br>"; print_r($host_ips); echo "<br><br>";
-
- # DHCP Subnets
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpSubnet)", array("cn"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- } else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- $dhcps_ips [] = $item['cn']."_".$item['cn'];
- }
- }
- echo "DHCP Subnets:<br>"; print_r($dhcps_ips); echo "<br><br>";
-
- # DHCP Pool Ranges
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpPool)", array("dhcpRange"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- } else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- if (count($item['dhcprange']) > 1){
- foreach ($item['dhcprange'] as $range){
- $dhcpr_ips [] = $range;
- }
- }
- elseif (count($item['dhcprange']) == 1){
- $dhcpr_ips [] = $item['dhcprange'];
- }
- }
- }
- echo "DHCP Pool Ranges:<br>"; print_r($dhcpr_ips); echo "<br><br>";
-
- # Delegierte IPs
- $childau_array = get_childau($auDN,array("dn","ou","maxipblock"));
- #print_r($childau_array);
- if (count($childau_array) != 0){
- foreach ($childau_array as $childau){
- if (count($childau['maxipblock']) > 1){
- foreach ($childau['maxipblock'] as $mipb){
- $deleg_ips [] = $mipb;
- }
- }elseif (count($childau['maxipblock']) == 1){
- $deleg_ips [] = $childau['maxipblock'];
- }
- }
- }
- echo "Delegiert IP Blocks:<br>"; print_r($deleg_ips); echo "<br><br>";
-
- $used_ips = array_merge($host_ips, $dhcps_ips, $dhcpr_ips, $deleg_ips);
- sort($used_ips);
- $used_ips = merge_ipranges_array($used_ips);
-
- return $used_ips;
-}
-
-
-/**
-* get_host_ip($hostDN)
-* Holt die IP Adressen eines Hosts und gibt sie in einem Array zurueck.
-*
-* @param string hostDN Distinguished Name des LDAP Host-Objektes
-*
-* @return array host_array IPs des Hosts.
-*
-* @author Tarik Gasmi
-*/
-function get_host_ip($hostDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $hostDN, "(objectclass=Host)", array("hostName","IPAddress","dhcpOptFixed-address"), "hostName", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- return 0;
- }
- else {
- $result = ldapArraySauber($result);
- $host_array = array();
-
- foreach ($result as $item){
- $host_array['hostname'] = $item['hostname'];
- $host_array['ipaddress'] = $item['ipaddress'];
- #if ( $item['dhcpoptfixed-address'] != "" ){
- $host_array['dhcpoptfixed-address'] = $item['dhcpoptfixed-address'];
- #}
- # $host_array = array('hostname' => $item['hostname'], 'ipaddress' => $item['ipaddress']);
- }
- return $host_array;
- }
-}
-
-
-/**
-* get_dhcp_range($dhcpobjectDN)
-* Holt die IP Ranges eines DHCP Subnets/Pools und gibt sie in einem Array zurueck.
-*
-* @param string dhcpobjectDN Distinguished Name des LDAP DHCP-Objektes
-*
-* @return array dhcp_array IP Ranges des Subnets/Pools.
-*
-* @author Tarik Gasmi
-*/
-function get_dhcp_range($dhcpobjectDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $dhcpobjectDN, "(objectclass=*)", array("cn","dhcpRange"), "cn", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- return 0;
- }
- else {
- $result = ldapArraySauber($result);
- $dhcp_array = array();
-
- foreach ($result as $item){
- $dhcp_array['cn'] = $item['cn'];
- $dhcp_array['dhcprange'] = $item['dhcprange'];
- }
- return $dhcp_array;
- }
-}
-
-function get_dhcp_range2($dhcpobjectDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $dhcpobjectDN, "(objectclass=*)", array("dhcpRange"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- return 0;
- }
- else {
- $result = ldapArraySauber($result);
- $dhcp_array = array();
- foreach ($result as $item){
- if ( count($item['dhcprange']) == 1 ){
- $dhcp_array[] = $item['dhcprange'];
- }
- if ( count($item['dhcprange']) > 1 ){
- foreach ($item['dhcprange'] as $range){
- $dhcp_array[] = $range;
- }
- }
- }
- return $dhcp_array;
- }
-}
-
-
-/**
-* merge_ipranges($auDN)
-* Nimmt die Arrays von IP Ranges eines AU Objektes, MaxIPBlocks und FreeIPBlocks, und vereinigt
-* rekusriv alle adjazenten/sich ueberschneidenden IP Ranges zu einer IP Range.
-*
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @author Tarik Gasmi
-*/
-function merge_ipranges($auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $fipb_array = get_freeipblocks_au($auDN);
- $mipb_array = get_maxipblocks_au($auDN);
- if ( count($fipb_array) > 1) sort($fipb_array);
- if ( count($mipb_array) > 1) sort($mipb_array);
-
- $c = count($fipb_array);
- for ($i=0; $i < $c; $i++){
- for ($j=$i+1; $j < $c; $j++){
- if ( merge_2_ipranges($fipb_array[$i],$fipb_array[$j])){
- $fipb_array[$i] = merge_2_ipranges($fipb_array[$i],$fipb_array[$j]);
- array_splice($fipb_array, $j, 1);
- $c--;
- $i=-1;
- break;
- }
- }
- }
- #print_r($fipb_array);printf("<br>");
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results) echo "FIPBs erfolgreich zusammengefasst!<br>" ;
- else echo "Fehler beim eintragen der FIPBs!<br>";
-
- $d = count($mipb_array);
- for ($i=0; $i < $d; $i++){
- for ($j=$i+1; $j < $d; $j++){
- if ( merge_2_ipranges($mipb_array[$i],$mipb_array[$j])){
- $mipb_array[$i] = merge_2_ipranges($mipb_array[$i],$mipb_array[$j]);
- array_splice($mipb_array, $j, 1);
- $d--;
- $i=-1;
- break;
- }
- }
- }
- #print_r($mipb_array);printf("<br>");
- foreach ( $mipb_array as $item ){
- $entry2 ['MaxIPBlock'][] = $item;
- }
- $results = ldap_mod_replace($ds,$auDN,$entry2);
- if ($results) echo "MIPBs erfolgreich zusammengefasst!<br>" ;
- else echo "Fehler beim eintragen der MIPBs!<br>";
-}
-
-function merge_dhcpranges($dhcpobjectDN)
-{
- global $ds, $suffix, $ldapError;
-
- $dhcp_array = get_dhcp_range2($dhcpobjectDN);
- if ( count($dhcp_array) > 1) sort($dhcp_array);
-
- $c = count($dhcp_array);
- for ($i=0; $i < $c; $i++){
- for ($j=$i+1; $j < $c; $j++){
- if ( merge_2_ipranges($dhcp_array[$i],$dhcp_array[$j])){
- $dhcp_array[$i] = merge_2_ipranges($dhcp_array[$i],$dhcp_array[$j]);
- array_splice($dhcp_array, $j, 1);
- $c--;
- $i=-1;
- break;
- }
- }
- }
- foreach ( $dhcp_array as $item ){
- $entry ['dhcprange'][] = $item;
- }
- $results = ldap_mod_replace($ds,$dhcpobjectDN,$entry);
- if ($results) echo "<br>DHCP Ranges erfolgreich zusammengefasst!<br><br>" ;
- else echo "<br>Fehler beim eintragen der DHCP Ranges!<br><br>";
-}
-
-function merge_ipranges_array($ipranges_array)
-{
- global $ds, $suffix, $ldapError;
-
- sort($ipranges_array);
- $c = count($ipranges_array);
- for ($i=0; $i < $c; $i++){
- for ($j=$i+1; $j < $c; $j++){
- if ( merge_2_ipranges($ipranges_array[$i],$ipranges_array[$j])){
- $ipranges_array[$i] = merge_2_ipranges($ipranges_array[$i],$ipranges_array[$j]);
- array_splice($ipranges_array, $j, 1);
- $c--;
- $i=-1;
- break;
- }
- }
- }
- return $ipranges_array;
- # Rückgabewert ...
-}
-
-
-
-/**
-* new_ip_host($ip,$hostDN,$auDN)
-* Weist einem Host eine IP Adresse neu zu, falls sie vergeben werden darf (in den FreeIPBlocks
-* enthalten ist), und passt die FreeIPBlocks der AU an.
-*
-* @param string ip IP Adresse, die zugewiesen werden soll
-* @param string hostDN Distinguished Name des LDAP Host-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function new_ip_host($ip,$hostDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $fipb_array = get_freeipblocks_au($auDN);
-
- for ($i=0; $i < count($fipb_array); $i++){
- if ( split_iprange($ip,$fipb_array[$i]) != 0 ){
- $ipranges = split_iprange($ip,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- break;
- }
- }
-
- if ($i < count($fipb_array) ){
- # ldap_mod_replace -> Array fipb_array aktualisiert die FIPB in AU mit $auDN
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
-
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- echo "<br>Neue FIPBs erfolgreich eingetragen!<br>" ;
-
- # ldap_mod_add -> IPAddress = $ip , in Host mit $hostDN
- $ipentry ['IPAddress'] = $ip;
- $results = ldap_mod_add($ds,$hostDN,$ipentry);
- if ($results){
- echo "<br>IP Adresse erfolgreich eingetragen!<br>" ;
- return 1;
- }else{
- echo "<br>Fehler beim eintragen der IP Adresse!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim eintragen der FIPBs!<br>";
- return 0;
- }
- }
- else{
- printf("<br>IP Adresse %s nicht im verfuegbaren Bereich!<br>", $ip );
- return 0;
- }
-}
-
-/**
-* new_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
-* Weist einem DHCP Subnet/Pool eine IP Range neu zu, falls sie vergeben werden darf (in den FreeIPBlocks
-* enthalten ist), und passt die FreeIPBlocks der AU an.
-*
-* @param string ip IP Range, die zugewiesen werden soll
-* @param string dhcpobjectDN Distinguished Name des LDAP DHCP-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function new_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $fipb_array = get_freeipblocks_au($auDN);
-
- #print_r($fipb_array);
-
- for ($i=0; $i < count($fipb_array); $i++){
- if ( split_iprange($ip,$fipb_array[$i]) != 0 ){
- $ipranges = split_iprange($ip,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- break;
- }
- }
-
- if ($i < count($fipb_array) ){
- # ldap_mod_replace -> Array fipb_array aktualisiert die FIPB in AU mit $auDN
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
-
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- echo "<br>Neue FIPBs erfolgreich eingetragen!<br>" ;
-
- # ldap_mod_add -> IPAddress = $ip , in Host mit $hostDN
- $ipentry ['dhcpRange'] = $ip;
- $results = ldap_mod_add($ds,$dhcpobjectDN,$ipentry);
- if ($results){
- echo "<br>IP Adresse erfolgreich eingetragen!<br>" ;
- return 1;
- }else{
- echo "<br>Fehler beim eintragen der IP Adresse!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim eintragen der FIPBs!<br>";
- return 0;
- }
- }else{
- printf("<br>IP Range %s ist nicht im verfuegbaren Bereich!<br>", $ip );
- return 0;
- }
-}
-
-## Add Dhcprange in DHCP Pool
-function add_dhcprange($newrange,$pooldn) {
-
- global $ds, $auDN, $suffix, $ldapError;
-
- # Freie IP Bereiche testen
- $fipb_array = get_freeipblocks_au($auDN);
- $test = 0;
- for ($f=0; $f < count($fipb_array); $f++){
- if ( split_iprange($newrange,$fipb_array[$f]) != 0 ){
- $ipranges = split_iprange($newrange,$fipb_array[$f]);
- array_splice($fipb_array, $f, 1, $ipranges);
- $test = 1;
- break;
- }
- }
- if ( $test ){
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
- $result1 = ldap_mod_replace($ds,$auDN,$entry);
- if ($result1){
- echo "<br>Neue FIPBs erfolgreich eingetragen!<br>";
- $rangeentry ['dhcprange'] = $newrange;
- print_r($rangeentry);echo "<br><br>";
- $result2 = ldap_mod_add($ds,$pooldn,$rangeentry);
- if ($result2){
- merge_dhcpranges($pooldn);
- #printf("Neue dynamische IP Range %s - %s erfolgreich in Subnetz %s0 eingetragen!<br>",$addrange1[$i],$addrange2[$i],$net);
- return 1;
- }else{
- # echo "<br>Fehler beim eintragen des dynamischen DHCP Pools!<br>";
- # Range wieder in FIPBs aufnehmen.
- $entry2 ['FreeIPBlock'] = $newrange;
- ldap_mod_add($ds,$auDN,$entry2);
- merge_ipranges($auDN);
- return 0;
- }
- }else{
- echo "<br>Fehler beim eintragen der FIPBs!<br>";
- return 0;
- }
- }else{
- printf("<br>IP Range %s ist nicht im verfuegbaren Bereich!<br>", $range );
- return 0;
- }
-}
-
-
-/**
-* delete_ip_host($hostDN,$auDN)
-* Löscht die IP Adresse eines Hosts, und passt die FreeIPBlocks der AU an.
-*
-* @param string hostDN Distinguished Name des LDAP Host-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function delete_ip_host($hostDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $host_array = get_host_ip($hostDN);
- $old_ip = $host_array['ipaddress']; # oder IP aus dem Formular
- # print_r($host_array);printf("<br>");
- # printf($old_ip);
- $delentry ['ipaddress'] = $old_ip;
- if ( $host_array['dhcpoptfixed-address'] != "" ){
- $delentry ['dhcpoptfixed-address'] = array();
- }
- # print_r($delentry);printf("<br>");
-
- $results = ldap_mod_del($ds,$hostDN,$delentry);
- if ($results){
- echo "<br>IP Adresse erfolgreich geloescht!<br>";
- $modentry['FreeIPBlock'] = $old_ip;
- $results = ldap_mod_add($ds,$auDN,$modentry);
- if ($results){
- echo "<br>geloeschte IP Adresse erfolgreich als neuer FIPB in die AU eingetragen!<br>" ;
- merge_ipranges($auDN);
- return 1;
- }
- else{
- echo "<br>Fehler beim eintragen der geloeschten IP Adresse als neuen FIPB!<br>";
- return 0;
- }
- }
- else{
- echo "<br>Fehler beim loeschen der IP Adresse!<br>";
- return 0;
- }
-}
-
-/**
-* delete_ip_dhcprange($dhcpobjectDN,$auDN)
-* Loescht die IP Range eines DHCP Subnets/Pools, und passt die FreeIPBlocks der AU an.
-*
-* @param string dhcpobjectDN Distinguished Name des LDAP DHCP-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function delete_ip_dhcprange($dhcpobjectDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $dhcp_array = get_dhcp_range($dhcpobjectDN);
-
- if ( $dhcp_array['dhcprange'] != "" ){
- $old_ip = $dhcp_array['dhcprange']; # oder IP aus dem Formular besser da ja mehrere moeglich
- # print_r($dhcp_array);printf("<br>");
- # printf($old_ip);
- $delentry['dhcpRange'] = $old_ip;
- # print_r($delentry);printf("<br>");
-
- $results = ldap_mod_del($ds,$dhcpobjectDN,$delentry);
- if ($results){
- echo "<br>DHCP IP Range erfolgreich geloescht!<br>";
- $modentry['FreeIPBlock'] = $old_ip;
- $results = ldap_mod_add($ds,$auDN,$modentry);
- if ($results){
- echo "<br>geloeschte IP Range erfolgreich als neuer FIPB in die AU eingetragen!<br>" ;
- merge_ipranges($auDN);
- return 1;
- }
- else{
- echo "<br>Fehler beim eintragen der geloeschten IP Range als neuen FIPB!<br>";
- # Transaktion simulieren und alte Range wieder eintragen ??
- return 0;
- }
- }
- else{
- echo "<br>Fehler beim loeschen der DHCP IP Range!<br>";
- return 0;
- }
- }
-}
-
-/**
-* modify_ip_host($ip,$hostDN,$auDN)
-* Aendert die IP Adresse eines Hosts, falls neue IP verfuegbar, und passt die FreeIPBlocks der AU an.
-*
-* @param string ip IP Adresse, die neu zugewiesen werden soll
-* @param string hostDN Distinguished Name des LDAP Host-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function modify_ip_host($ip,$hostDN,$auDN,$fixadd)
-{
- global $ds, $suffix, $ldapError;
-
- if ( delete_ip_host($hostDN,$auDN) ){
- if ( new_ip_host($ip,$hostDN,$auDN) ){
- if ( $fixadd != ""){
- $fa_entry ['dhcpoptfixed-address'] = $fixadd;
- ldap_mod_add($ds,$hostDN,$fa_entry);
- }
- echo "<br>IP Adresse erfolgeich geaendert!<br>";
- return 1;
- }else{
- echo "<br>Fehler beim Aendern der IP Adresse!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim Aendern der IP Adresse!<br>";
- return 0;
- }
-}
-
-/**
-* modify_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
-* Aendert IP Range eines DHCP Subnet/Pool, falls neue Range verfuegbar ist,
-* und passt die FreeIPBlocks der AU an.
-*
-* @param string ip IP Range, die neu zugewiesen werden soll
-* @param string dhcpobjectDN Distinguished Name des LDAP DHCP-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function modify_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- if ( delete_ip_dhcprange($dhcpobjectDN,$auDN) ){
- if ( new_ip_dhcprange($ip,$dhcpobjectDN,$auDN) ){
- echo "<br>DHCP IP Range erfolgeich geaendert!<br>";
- return 1;
- }else{
- echo "<br>Fehler beim Aendern der DHCP IP Range!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim Aendern der DHCP IP Range!<br>";
- return 0;
- }
-}
-
-
-/**
-* new_ip_delegation($ip,$childauDN,$auDN)
-* Delegiert einen neuen IP Bereich an eine untergeordnete AU, falls dieser verfuegbar ist
-* (in den FreeIPBlocks enthalten ist), und passt die FreeIPBlocks der AU an.
-*
-* @param string ip IP Bereich, der zugewiesen werden soll
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function new_ip_delegation($ip,$childauDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $fipb_array = get_freeipblocks_au($auDN);
- #echo "<br>---<br>";print_r($fipb_array);echo "<br>---<br>";
- for ($i=0; $i < count($fipb_array); $i++){
- if ( split_iprange($ip,$fipb_array[$i]) != 0 ){
- $ipranges = split_iprange($ip,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- break;
- }
- }
-
- if ($i < count($fipb_array) ){
- # ldap_mod_replace -> Array fipb_array aktualisiert die FIPB in AU mit $auDN
- foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
-
- $results = ldap_mod_replace($ds,$auDN,$entry);
- if ($results){
- echo "<br>Neue FIPBs erfolgreich eingetragen!<br>" ;
-
- # ldap_mod_add -> IPAddress = $ip , in Host mit $hostDN
- $mipbentry['MaxIPBlock'] = $ip;
- $mipbentry['FreeIPBlock'] = $ip;
- #print_r($mipbentry);
-
- $results = ldap_mod_add($ds,$childauDN,$mipbentry);
- if ($results){
- echo "<br>IP Adressblock erfolgreich delegiert!<br>" ;
- merge_ipranges($childauDN);
- return 1;
- }else{
- echo "<br>Fehler beim eintragen der IP Adresse!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim eintragen der FIPBs!<br>";
- return 0;
- }
- }
- else{
- printf("<br>Zu delegierende IP Range %s ist nicht im verfuegbaren Bereich!<br>", $ip );
- }
-}
-
-/**
-* delete_ip_delegation($oldmipb,$childauDN,$auDN)
-* Einen an eine untergeordnete AU delegierten IP Bereich zuruecknehmen. Diese Funktion wird rekursiv fuer
-* alle weiter-delegierten Teilbereiche abgearbeitet. FreeIPBlocks der AU und Child-AU, sowie MaxIPBlocks
-* der Child-AU werden angepasst.
-*
-* @param string oldmipb delegierter maximaler IP Bereich, der zurueckgenommen werden soll
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function delete_ip_delegation($oldmipb,$childauDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- # Durch Reduzierung zu loeschende IP Ranges (Array)
- $delip[] = $oldmipb;
- #print_r($delip);printf("<br><br>");
-
- # Finde unter allen Child-AUs diejenigen, die von Reduzierung betroffene Child-Child-AUs haben
- # Diese sind werden rekursiv abgearbeitet
- $cchild_array = get_childau($childauDN,array("dn","maxipblock"));
- # print_r($cchild_array);printf("<br><br>");
- $cchild_todo = array();
- foreach ($delip as $delipitem){
- foreach ($cchild_array as $item){
- if( count($item['maxipblock']) > 1 ){
- foreach ($item['maxipblock'] as $item2 ){
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $cchild_todo[] = array('coldmipb' => $item2,
- 'ccauDN' => $item['dn'],
- 'childauDN' => $childauDN );
- }
- }
- }
- elseif ( count($item['maxipblock']) == 1 ){
- if ( intersect_ipranges($delipitem,$item['maxipblock']) != false ){
- $cchild_todo[] = array('coldmipb' => $item['maxipblock'],
- 'ccauDN' => $item['dn'],
- 'childauDN' => $childauDN );
- }
- }
- }
- }
- #print_r($cchild_todo);printf("<br><br>");
-
- ###################
- # Rekursionsaufruf (für jede Child-AU, die betroffene Child-Child-AU hat)
- foreach ($cchild_todo as $item){
- delete_ip_delegation($item['coldmipb'],$item['ccauDN'],$item['childauDN']);
- }
- ###################
-
- # Ab hier: alles was bei jedem Fkt.Aufruf zu machen ist (in Ebene AU und Child-AU)
-
- # in CAU Check ob RechnerIPs oder DhcpIPs betroffen:
- $del_objects = objects_to_delete($delip,$childauDN,$cchild_array);
- # print_r($del_objects);printf("<br><br>");
- if ( count($del_objects['hostips']) != 0 ){
- printf("<br>Host IP Addresses that will be deleted: <br>");
- foreach ($del_objects['hostips'] as $item){
- printf("HostDN: %s &nbsp;&nbsp; IP Address: %s <br>",$item['dn'],$item['ip']);
- }
- }
- if ( count($del_objects['dhcpranges']) != 0 ){
- printf("<br>Subnet IP Ranges that will be adjusted: <br>");
- foreach ($del_objects['dhcpranges'] as $item){
- printf("DhcpObjectDN: %s &nbsp;&nbsp; Zu loeschende IP Range: %s <br>",$item['dn'],$item['delrange']);
- }
- }
- # hier kommte Abfrage ob wirklich Aenderung ausfuehren, ja dann weiter mit loeschen
- # sonst Abbruch
- # momentan: einfach loeschen
- if ( count($del_objects['hostips']) != 0 ){
- foreach ($del_objects['hostips'] as $item){
- delete_ip_host($item['dn'],$item['auDN']);
- }
- }
- if ( count($del_objects['dhcpranges']) != 0 ){
- foreach ($del_objects['dhcpranges'] as $item){
- delete_ip_dhcprange($item['dn'],$item['auDN']);
- }
- }
-
- # in Child-AU: oldmipb loeschen
- $mipb_array = get_maxipblocks_au($childauDN);
- #print_r($mipb_array);printf("<br><br>");
- foreach ($delip as $delipitem){
- # if ( count($mipb_array) > 1 ){
- for ($i=0; $i < count($mipb_array); $i++){
- if ( intersect_ipranges($delipitem,$mipb_array[$i]) != 0 ){
- #$ipranges = intersect_ipranges($newmipb,$mipb_array[$i]);
- array_splice($mipb_array, $i, 1);
- }
- }
- # }else{
- # if ( intersect_ipranges($delipitem,$mipb_array) != 0 ){
- # # $ipranges = intersect_ipranges($newmipb,$mipb_array);
- # $mipb_array = array();
- # }
- # }
- }
- # print_r($mipb_array);printf("<br><br>");
- # for ($i=0; $i < count($mipb_array); $i++){
- # if ($mipb_array[$i] == false){array_splice($mipb_array, $i, 1);}
- # }
-
- #print_r($mipb_array);printf("<br><br>");
- if (count($mipb_array) == 0){
- $entry ['MaxIPBlock'] = array();
- #print_r($entry);printf("<br><br>");
- $results = ldap_mod_del($ds,$childauDN,$entry);
- }else{
- foreach ( $mipb_array as $item ){
- $entry ['MaxIPBlock'][] = $item;
- }
- #print_r($entry);printf("<br><br>");
- $results = ldap_mod_replace($ds,$childauDN,$entry);
- }
-
- if ($results){
- echo "<br>MIPBs in Child-AU erfolgreich geloescht!<br>" ;
-
- # in Child-AU: FIPBs anpassen
- $fipb_array = get_freeipblocks_au($childauDN);
- #print_r($fipb_array);printf("<br><br>");
- foreach ($delip as $delipitem){
- # if ( count($fipb_array) > 1 ){
- for ($i=0; $i < count($fipb_array); $i++){
- if ( intersect_ipranges($delipitem,$fipb_array[$i]) != 0 ){
- # $ipranges = intersect_ipranges($newmipb,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1);
- }
- }
- # }
- # else{
- # if ( intersect_ipranges($delipitem,$fipb_array) != 0 ){
- # # $ipranges = intersect_ipranges($newmipb,$fipb_array);
- # $fipb_array = array();
- # }
- # }
- }
- # print_r($fipb_array);printf("<br><br>");
- # for ($i=0; $i < count($fipb_array); $i++){
- # if ($fipb_array[$i] == false){array_splice($fipb_array, $i, 1);}
- # }
-
- #print_r($fipb_array);printf("<br><br>");
- if (count($fipb_array) == 0){
- $entry1 ['FreeIPBlock'] = array();
- #print_r($entry1);printf("<br><br>");
- $results = ldap_mod_del($ds,$childauDN,$entry1);
- }else{
- foreach ( $fipb_array as $item ){
- $entry1 ['FreeIPBlock'][] = $item;
- }
- #print_r($entry1);printf("<br><br>");
- $results = ldap_mod_replace($ds,$childauDN,$entry1);
- }
-
- if ($results){
- echo "FIPBs in Child-AU erfolgreich geloescht!<br>" ;
-
- # in AU: Geloeschte IP Bereiche als neue FIPBs aufnehmen
- foreach ($delip as $item){
- $entry2 ['FreeIPBlock'][] = $item;
- }
- #print_r($entry2);printf("<br><br>");
- $results = ldap_mod_add($ds,$auDN,$entry2);
- if ($results){
- echo "FIPBs in AU erfolgreich aktualisiert!<br>" ;
-
- # IP Bloecke aufraeumen in Child-AU und AU (Merging)
- merge_ipranges($auDN);
- merge_ipranges($childauDN);
- return 1;
- }else{
- echo "Fehler beim aktualisieren der FIPBs in AU!<br>";
- return 0;
- }
- }else{
- echo "Fehler beim loeschen der FIPBs in Child-AU!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim loeschen der MIPBs in Child-AU!<br>";
- return 0;
- }
-}
-
-
-/**
-* reduce_ip_delegation($oldmipb,$newmipb,$childauDN,$auDN)
-* Einen an eine untergeordnete AU delegierten IP Bereich verkleinern. Diese Funktion wird rekursiv fuer
-* alle weiter-delegierten Teilbereiche abgearbeitet. FreeIPBlocks der AU und Child-AU, sowie MaxIPBlocks
-* der Child-AU werden angepasst.
-*
-* @param string oldmipb delegierter maximaler IP Bereich, der verkleinert werden soll
-* @param string newmipb delegierter maximaler IP Bereich nach der Verkleinerung
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function reduce_ip_delegation($oldmipb,$newmipb,$childauDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- # Durch Reduzierung zu loeschende IP Ranges (Array)
- $delip = split_iprange($newmipb,$oldmipb);
- #print_r($delip);printf("<br><br>");
-
- # Finde unter allen Child-AUs diejenigen, die von Reduzierung betroffene Child-Child-AUs haben
- # Diese sind werden rekursiv abgearbeitet
- $cchild_array = get_childau($childauDN,array("dn","maxipblock"));
-
- $cchild_todo = array();
- foreach ($delip as $delipitem){
- foreach ($cchild_array as $item){
- if( count($item['maxipblock']) > 1 ){
- foreach ($item['maxipblock'] as $item2 ){
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $cchild_todo[] = array('coldmipb' => $item2,
- 'cnewmipb' => intersect_ipranges($newmipb,$item2),
- 'ccauDN' => $item['dn'],
- 'childauDN' => $childauDN );
- }
- }
- }
- elseif ( count($item['maxipblock']) == 1 ){
- if ( intersect_ipranges($delipitem,$item['maxipblock']) != false ){
- $cchild_todo[] = array('coldmipb' => $item['maxipblock'],
- 'cnewmipb' => intersect_ipranges($newmipb,$item['maxipblock']),
- 'ccauDN' => $item['dn'],
- 'childauDN' => $childauDN );
- }
- }
- }
- }
- #print_r($cchild_todo);printf("<br><br>");
-
- ######################
- # Rekursionsaufruf (für jede Child-AU, die betroffene Child-Child-AU hat)
- foreach ($cchild_todo as $item){
- if ($item['cnewmipb'] == false ){
- delete_ip_delegation($item['coldmipb'],$item['ccauDN'],$item['childauDN']);
- }
- else{
- reduce_ip_delegation($item['coldmipb'],$item['cnewmipb'],$item['ccauDN'],$item['childauDN']);
- }
- }
- ######################
-
-
- # Ab hier: alles was bei jedem Fkt.Aufruf zu machen ist (auf Ebene AU und Child-AU)
-
- # in CAU Check ob RechnerIPs oder DhcpIPs betroffen:
- # - falls ja: nochmals Abfrage (Hammermethode: diese auch loeschen) ob diese zu loeschen sind
- # -> ja, betreffende IPs loeschen
- # -> nein, Abbruch.
- # - falls nein: fuer jedes FIPB in CAU intersect(FIPB,newmipb)-> Schnittmengen bilden die neuen FIPB
- $del_objects = objects_to_adjust($newmipb,$delip,$childauDN,$cchild_array);
- # print_r($del_objects);printf("<br><br>");
- if ( count($del_objects['hostips']) != 0 ){
- printf("<br>Host IP Addresses that will be deleted: <br>");
- foreach ($del_objects['hostips'] as $item){
- printf("HostDN: %s &nbsp;&nbsp; IP Address: %s <br>",$item['dn'],$item['ip']);
- }
- }
- if ( count($del_objects['dhcpranges']) != 0 ){
- printf("<br>Subnet IP Ranges that will be adjusted: <br>");
- foreach ($del_objects['dhcpranges'] as $item){
- printf("DhcpObjectDN: %s &nbsp;&nbsp; New IP Range: %s <br>",$item['dn'],$item['newrange']);
- }
- }
-
- # momentan wird einfach geloescht:
- if ( count($del_objects['hostips']) != 0 ){
- foreach ($del_objects['hostips'] as $item){
- delete_ip_host($item['dn'],$item['auDN']);
- }
- }
- if ( count($del_objects['dhcpranges']) != 0 ){
- foreach ($del_objects['dhcpranges'] as $item){
- if ( count($item['newrange']) >= 1 ){
- modify_ip_dhcprange($item['newrange'],$item['dn'],$item['auDN']);
- }else{
- delete_ip_dhcprange($item['dn'],$item['auDN']);
- }
- }
- }
-
- # in Child-AU: oldmipb -> newmipb
- $mipb_array = get_maxipblocks_au($childauDN);
- # print_r($mipb_array);printf("<br><br>");
- foreach ($delip as $delipitem){
- for ($i=0; $i < count($mipb_array); $i++){
- if ( intersect_ipranges($delipitem,$mipb_array[$i]) != 0 ){
- $ipranges = intersect_ipranges($newmipb,$mipb_array[$i]);
- array_splice($mipb_array, $i, 1, $ipranges);
- }
- }
- }
- # print_r($mipb_array);printf("<br><br>");
- for ($i=0; $i < count($mipb_array); $i++){
- if ($mipb_array[$i] == false){array_splice($mipb_array, $i, 1);}
- }
- #print_r($mipb_array);printf("<br><br>");
- if (count($mipb_array) == 0){
- $entry ['MaxIPBlock'] = array();
- #print_r($entry);printf("<br><br>");
- $results = ldap_mod_del($ds,$childauDN,$entry);
- }else{
- foreach ( $mipb_array as $item ){
- $entry ['MaxIPBlock'][] = $item;
- }
- #print_r($entry);printf("<br><br>");
- $results = ldap_mod_replace($ds,$childauDN,$entry);
- }
-
- if ($results){
- echo "<br>MIPBs in Child-AU erfolgreich aktualisiert!<br>" ;
-
- # in Child-AU: FIPBs anpassen
- $fipb_array = get_freeipblocks_au($childauDN);
- #print_r($fipb_array);printf("<br><br>");
- foreach ($delip as $delipitem){
- for ($i=0; $i < count($fipb_array); $i++){
- if ( intersect_ipranges($delipitem,$fipb_array[$i]) != 0 ){
- $ipranges = intersect_ipranges($newmipb,$fipb_array[$i]);
- array_splice($fipb_array, $i, 1, $ipranges);
- }
- }
- }
- # print_r($fipb_array);printf("<br><br>");
- for ($i=0; $i < count($fipb_array); $i++){
- if ($fipb_array[$i] == false){array_splice($fipb_array, $i, 1);}
- }
- #print_r($fipb_array);printf("<br><br>");
- if (count($fipb_array) == 0){
- $entry1 ['FreeIPBlock'] = array();
- #print_r($entry1);printf("<br><br>");
- $results = ldap_mod_del($ds,$childauDN,$entry1);
- }else{
- foreach ( $fipb_array as $item ){
- $entry1 ['FreeIPBlock'][] = $item;
- }
- #print_r($entry1);printf("<br><br>");
- $results = ldap_mod_replace($ds,$childauDN,$entry1);
- }
-
- if ($results){
- echo "FIPBs in Child-AU erfolgreich aktualisiert!<br>" ;
-
- # in AU: Geloeschte IP Bereiche als neue FIPBs aufnehmen
- foreach ($delip as $item){
- $entry2 ['FreeIPBlock'][] = $item;
- }
- #print_r($entry2);printf("<br><br>");
- $results = ldap_mod_add($ds,$auDN,$entry2);
- if ($results){
- echo "FIPBs in AU erfolgreich aktualisiert!<br>" ;
-
- # IP Bloecke aufraeumen in Child-AU und AU (Merging)
- merge_ipranges($auDN);
- merge_ipranges($childauDN);
-
- return 1;
- }else{
- echo "Fehler beim aktualisieren der FIPBs in AU!<br>";
- return 0;
- }
- }else{
- echo "Fehler beim aktualisieren der FIPBs in Child-AU!<br>";
- return 0;
- }
- }else{
- echo "<br>Fehler beim aktualisieren der MIPBs in Child-AU!<br>";
- return 0;
- }
-}
-
-
-/**
-* expand_ip_delegation($oldmipb,$newmipb,$childauDN,$auDN)
-* Einen an eine untergeordnete AU delegierten IP Bereich erweitern. Diese Funktion wird rekursiv fuer
-* alle weiter-delegierten Teilbereiche abgearbeitet. FreeIPBlocks der AU und Child-AU, sowie MaxIPBlocks
-* der Child-AU werden angepasst. Entspricht einer Neu-Delegierung des erweiterten IP Bereichs.
-*
-* @param string oldmipb delegierter maximaler IP Bereich, der erweitert werden soll
-* @param string newmipb delegierter maximaler IP Bereich nach der Erweiterung
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param string auDN Distinguished Name des LDAP AU-Objektes
-*
-* @return boolean 1 bei Erfolg bzw. 0 bei Misserfolg
-*
-* @author Tarik Gasmi
-*/
-function expand_ip_delegation($oldmipb,$newmipb,$childauDN,$auDN)
-{
- global $ds, $suffix, $ldapError;
-
- $difference = split_iprange($oldmipb,$newmipb);
- if ( new_ip_delegation($difference[0],$childauDN,$auDN) ){
- return 1;
- }else{
- return 0;
- }
-}
-
-
-/**
-* objects_to_delete($delip,$childauDN,$cchild_array)
-* Liefert die durch eine Rücknahme einer IP Delegierung betroffenen Host/DHCP-Objekte der Child-AU
-* und Child-Child-AUs in einem Array. Dieses enthaelt fuer jedes Objekt dessen Distinguished Name,
-* dessen IP Adresse(n)/Range(s) und den Distinguished Name der AU der das Objekt angehoert. Parameter
-* die fuer die Funktionen delete_ip_host(), delete_ip_range() Benoetigt werden.
-*
-* @param string delip IP Bereich der geloescht wird
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param array cchild_array Array von allen Child-Child-AUs (jedes Item enthaelt DN und MaxIPBlock)
-*
-* @return array objects_to_delete Array aller betroffenen Objekte (DN, IP, auDN)
-*
-* @author Tarik Gasmi
-*/
-function objects_to_delete($delip,$childauDN,$cchild_array)
-{
- global $ds, $suffix, $ldapError;
-
- # Hosts von child-AU, child-child-AU
- $chosts = get_hosts($childauDN,array("dn","ipaddress"));
- # print_r($chosts);printf("<br><br>");
- $cchosts = array();
- foreach ($cchild_array as $item){
- $cchostsitem = get_hosts($item['dn'],array("dn","ipaddress"));
- foreach ($cchostsitem as $item2){
- $cchosts[] = $item2;
- }
- }
- $chosts = array_merge($chosts,$cchosts);
- # print_r($chosts);printf("<br><br>");
-
- # Pools von child-AU, child-child-AU
- $csubnets = get_dhcppools($childauDN,array("dn","dhcprange"));
- # print_r($csubnets);printf("<br><br>");
- $ccsubnets = array();
- foreach ($cchild_array as $item){
- $ccsubnetsitem = get_hosts($item['dn'],array("dn","dhcprange"));
- foreach ($ccsubnetsitem as $item2){
- $ccsubnets[] = $item2;
- }
- }
- $csubnets = array_merge($csubnets,$ccsubnets);
- # print_r($csubnets);printf("<br><br>");
-
-
- # Zu loeschende Hosts bestimmen
- $chosts_todo = array();
- foreach ($delip as $delipitem){
- if ( count($chosts) != 0 ){
- foreach ($chosts as $item){
- if( count($item['ipaddress']) > 1 ){
- foreach ($item['ipaddress'] as $item2 ){
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $chosts_todo[] = array('dn' => $item['dn'],
- 'ip' => $item['ipaddress'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- elseif ( count($item['ipaddress']) == 1 ){
- if ( intersect_ipranges($delipitem,$item['ipaddress']) != false ){
- $chosts_todo[] = array('dn' => $item['dn'],
- 'ip' => $item['ipaddress'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- }
- }
- # print_r($chosts_todo);printf("<br><br>");
-
- # Zu loeschende Pools bestimmen, und wie IP Range anzupassen ist
- $csubnets_todo = array();
- foreach ($delip as $delipitem){
- if ( count($csubnets) != 0 ){
- foreach ($csubnets as $item){
- if( count($item['dhcprange']) > 1 ){
- foreach ($item['dhcprange'] as $item2 ){
- # print_r(intersect_ipranges($delipitem,$item2));
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $csubnets_todo[] = array('dn'=> $item['dn'],
- 'delrange' => $item2['dhcprange'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- elseif ( count($item['dhcprange']) == 1 ){
- # print_r(intersect_ipranges($delipitem,$item['dhcprange']));
- if ( intersect_ipranges($delipitem,$item['dhcprange']) != false ){
- $csubnets_todo[] = array('dn'=> $item['dn'],
- 'delrange' => $item['dhcprange'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- }
- }
- # print_r($csubnets_todo);printf("<br><br>");
-
- $objects_to_delete = array('hostips' => $chosts_todo,
- 'dhcpranges' => $csubnets_todo);
- return $objects_to_delete;
-}
-
-
-/**
-* objects_to_adjust($newmipb,$delip,$childauDN,$cchild_array)
-* Liefert die durch eine Reduzierung einer IP Delegierung betroffenen Host/DHCP-Objekte der Child-AU
-* und Child-Child-AUs in einem Array. Dieses enthaelt fuer jedes Objekt dessen Distinguished Name,
-* dessen IP Adresse(n)/Range(s) und den Distinguished Name der AU der das Objekt angehoert. Parameter
-* die fuer die Funktionen delete_ip_host(), delete_ip_dhcprange(), modify_ip_dhcprange() benoetigt werden.
-*
-* @param string newmipb IP Bereich der nach Reduzierung verbleibt
-* @param string delip IP Bereich der durch Reduzierung wegfaellt
-* @param string childauDN Distinguished Name des untergeordneten (Child) LDAP AU-Objektes
-* @param array cchild_array Array von allen Child-Child-AUs (jedes Item enthaelt DN und MaxIPBlock)
-*
-* @return array objects_to_adjust Array aller betroffenen Objekte (DN, IP, auDN)
-*
-* @author Tarik Gasmi
-*/
-function objects_to_adjust($newmipb,$delip,$childauDN,$cchild_array)
-{
- global $ds, $suffix, $ldapError;
-
- # Hosts von child-AU, child-child-AU
- $chosts = get_hosts($childauDN,array("dn","ipaddress"));
- # print_r($chosts);printf("<br><br>");
- $cchosts = array();
- foreach ($cchild_array as $item){
- $cchostsitem = get_hosts($item['dn'],array("dn","ipaddress"));
- foreach ($cchostsitem as $item2){
- $cchosts[] = $item2;
- }
- }
- $chosts = array_merge($chosts,$cchosts);
- # print_r($chosts);printf("<br><br>");
-
- # Pools von child-AU, child-child-AU
- $csubnets = get_dhcppools($childauDN,array("dn","dhcprange"));
- # print_r($csubnets);printf("<br><br>");
- $ccsubnets = array();
- foreach ($cchild_array as $item){
- $ccsubnetsitem = get_hosts($item['dn'],array("dn","dhcprange"));
- foreach ($ccsubnetsitem as $item2){
- $ccsubnets[] = $item2;
- }
- }
- $csubnets = array_merge($csubnets,$ccsubnets);
- # print_r($csubnets);printf("<br><br>");
-
-
- # Zu loeschende Hosts bestimmen
- $chosts_todo = array();
- foreach ($delip as $delipitem){
- if ( count($chosts) != 0 ){
- foreach ($chosts as $item){
- if( count($item['ipaddress']) > 1 ){
- foreach ($item['ipaddress'] as $item2 ){
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $chosts_todo[] = array('dn' => $item['dn'],
- 'ip' => $item['ipaddress'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- elseif ( count($item['ipaddress']) == 1 ){
- if ( intersect_ipranges($delipitem,$item['ipaddress']) != false ){
- $chosts_todo[] = array('dn' => $item['dn'],
- 'ip' => $item['ipaddress'],
- 'auDN' => $item['auDN']);
- }
- }
- }
- }
- }
- # print_r($chosts_todo);printf("<br><br>");
-
- # Zu loeschende Subnets bestimmen, und wie IP Range anzupassen ist
- $csubnets_todo = array();
- foreach ($delip as $delipitem){
- if ( count($csubnets) != 0 ){
- foreach ($csubnets as $item){
- if( count($item['dhcprange']) > 1 ){
- foreach ($item['dhcprange'] as $item2 ){
- # print_r(intersect_ipranges($delipitem,$item2));
- if ( intersect_ipranges($delipitem,$item2) != false ){
- $csubnets_todo[] = array('dn'=> $item['dn'],
- 'newrange' => intersect_ipranges($newmipb,$item2),
- 'auDN' => $item['auDN']);
- }
- }
- }
- elseif ( count($item['dhcprange']) == 1 ){
- # print_r(intersect_ipranges($delipitem,$item['dhcprange']));
- if ( intersect_ipranges($delipitem,$item['dhcprange']) != false ){
- $csubnets_todo[] = array('dn'=> $item['dn'],
- 'newrange' => intersect_ipranges($newmipb,$item['dhcprange']),
- 'auDN' => $item['auDN']);
- }
- }
- }
- }
- }
- # print_r($csubnets_todo);printf("<br><br>");
-
-
- $objects_to_adjust = array('hostips' => $chosts_todo,
- 'dhcpranges' => $csubnets_todo);
- return $objects_to_adjust;
-}
-
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/ldap.inc.php b/ldap-site-mngmt/webinterface/lib/ldap.inc.php
deleted file mode 100644
index 79d50e61..00000000
--- a/ldap-site-mngmt/webinterface/lib/ldap.inc.php
+++ /dev/null
@@ -1,1117 +0,0 @@
-<?php
-/**
-* ldap.inc.php - LDAP-Bibliothek
-* 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
-*/
-//Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-/**
-* uniLdapConnect($userRdn, $userPwd) - F�hrt den Bind am Gruppe1-LDAP-Server durch
-*
-* @param string userRdn UID f�r den Login
-* @param string userPwd Loginpasswort
-*
-* @return boolean Erfolg bzw. Misserfolg
-*
-* @author Timothy Burk
-*/
-function uniLdapConnect($userRdn = "", $userPwd = "") {
- global $ldapError, $suffix;
- if(!(defined("LDAP_HOST") && defined("LDAP_PORT"))) {
- $ldapError = "Hostname und/oder Port des LDAP-Servers wurden nicht angegeben!";
- return FALSE;
- }
- if($ds = ldap_connect(LDAP_HOST, LDAP_PORT)) {
- # Connect zum LDAP-Server OK
- if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
- # Optionen gesetzt
- #if (ldap_start_tls($ds)){
- if($userRdn != "" && $userPwd != "") {
- # Anmeldung als User.
- if($result = @ldap_bind($ds, "uid=".$userRdn.",ou=people,".$suffix, $userPwd)) {
- # Bind erfolgreich ausgef�hrt
- return $ds;
- } else {
- # Bind nicht erfolreich.
- if(ldap_error($ds) == "Invalid credentials") {
- $ldapError .= "Bind nicht erfolgreich: die Zugangsdaten sind nicht korrekt.<br>\n";
- } else {
- $ldapError .= "Bind als User nicht erfolgreich: ".ldap_error($ds)."<br>\n";
- }
- #print_r(ldap_error($ds));echo "<br><br>";
- return false;
- }
- } else {
- # Anonymer Bind.
- if($result = ldap_bind($ds)) {
- # Anonymer Bind erfolgreich ausgef�hrt
- return $ds;
- } else {
- # Anonymer Bind nicht erfolreich.
- $ldapError .= "Anonymer Bind nicht erfolgreich: ".ldap_error($ds)."<br>\n";
- return false;
- }
- }
- #} else {
- # # TLS starten fehlgeschlagen
- # $ldapError .= "TLS starten fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- #}
- } else {
- # Optionen setzen fehlgeschlagen
- $ldapError .= "Protokollversion setzen fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- }
- } else {
- # Connect fehlgeschlagen.
- $ldapError .= "Connect fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- }
-}
-
-
-/**
-* rzLdapConnect($userRdn, $userPwd) - F�hrt den Bind am RZ-LDAP-Server durch
-*
-* @param string userRdn UID f�r den Login
-* @param string userPwd Loginpasswort
-*
-* @return boolean Erfolg bzw. Misserfolg
-*
-* @author Timothy Burk
-*/
-function rzLdapConnect($userRdn = "", $userPwd = "") {
- global $ldapError, $suffix_rz;
- if(!(defined("LDAP_HOST_RZ") && defined("LDAP_PORT_RZ"))) {
- $ldapError = "Hostname und/oder Port des LDAP-Servers wurden nicht angegeben!";
- return FALSE;
- }
- if($ds = ldap_connect(LDAP_HOST_RZ, LDAP_PORT_RZ)) {
- # Connect zum LDAP-Server OK
- if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
- # Optionen gesetzt
- if($userRdn != "" && $userPwd != "") {
- # Anmeldung als User.
- if($result = @ldap_bind($ds, "uid=".$userRdn.",ou=people,".$suffix_rz, $userPwd)) {
- # Bind erfolgreich ausgef�hrt
- return $ds;
- } else {
- # Bind nicht erfolreich.
- if(ldap_error($ds) == "Invalid credentials") {
- $ldapError .= "Bind nicht erfolgreich: die Zugangsdaten sind nicht korrekt.<br>\n";
- } else {
- $ldapError .= "Bind als User nicht erfolgreich: ".ldap_error($ds)."<br>\n";
- }
- return false;
- }
- } else {
- # Anonymer Bind.
- if($result = ldap_bind($ds)) {
- # Anonymer Bind erfolgreich ausgef�hrt
- return $ds;
- } else {
- # Anonymer Bind nicht erfolreich.
- $ldapError .= "Anonymer Bind nicht erfolgreich: ".ldap_error($ds)."<br>\n";
- return false;
- }
- }
- } else {
- # Optionen setzen fehlgeschlagen
- $ldapError .= "Protokollversion setzen fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- }
- } else {
- # Connect fehlgeschlagen.
- $ldapError .= "Connect fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- }
-}
-
- /**
- * uniLdapSearch($ds, $base, $filter, $attributes, $sort, $mode, $resultLimit, $timeout)
- * 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.
- *
- * @param string $base die DN, das Verzeichnis, in dem die Suche startet
- *
- * @param string $filter die Suchbedingungen
- *
- * @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 $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 $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
- *
- * @see ldap_read()
- * @see ldap_list()
- * @see ldap_search()
- * @see ldap_sort()
- * @see ldap_get_entries()
- * @see ldap_free_result()
- *
- * @author Timothy Burk
- */
-function uniLdapSearch($ds, $base, $filter, $attributes, $sort, $mode, $resultLimit, $timeout) {
- global $ldapError;
- $abfrage = false;
- if($mode == "one") {
- if($resource = ldap_read($ds, $base, $filter, $attributes, 0, $resultLimit, $timeout)) {
- # Abfrage erfolgreich!
- $abfrage = true;
- } else {
- # Abfrage fehlgeschlagen.
- $ldapError .= "Abfrage mit Mode $mode ist fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- return false;
- }
- } else if($mode == "list") {
- if($resource = ldap_list($ds, $base, $filter, $attributes, 0, $resultLimit, $timeout)) {
- # Abfrage erfolgreich!
- ldap_sort($ds,$resource,$sort);
- $abfrage = true;
- } else {
- # Abfrage fehlgeschlagen.
- $ldapError .= "Abfrage mit Mode $mode ist fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- return false;
- }
- } else if($mode == "sub") {
- if($resource = ldap_search($ds, $base, $filter, $attributes, 0, $resultLimit, $timeout)) {
- # Abfrage erfolgreich!
- ldap_sort($ds,$resource,$sort);
- $abfrage = true;
- } else {
- # Abfrage fehlgeschlagen.
- $ldapError .= "Abfrage mit Mode $mode ist fehlgeschlagen: ".ldap_error($ds)."<br>\n";
- return false;
- }
- } else {
- # Kein g�ltiger Modus angegeben.
- $ldapError .= "Es wurde kein g�ltiger Modus angegeben.";
- return false;
- }
- if($abfrage && ($entries = ldap_get_entries($ds, $resource))) {
- # Auslesen des Verzeichnisses erfolgreich.
- ldap_free_result($resource);
- return $entries;
- } else {
- # Auslesen des Verzeichnisses nicht erfolgreich.
- $ldapError .= "Auslesen des Verzeichnisses nicht erfolgreich: ".ldap_error($ds)."<br>\n";
- return false;
- }
-}
-/**
-* uniLdapAdd($ds, $dn, $daten, [$objectclass])
-*
-* 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 string $objectclass Objektklasse des neuen Eintrages (Standard = "")
-*
-* @return boolean TRUE wenn Eintrag erfolgreich, FALSE wenn ein Fehler aufgetreten ist.
-*
-* @see ldap_add()
-*
-* @author Timothy Burk
-*/
-function uniLdapAdd($ds, $dn, $daten, $objectclass = "") {
- if($objectclass != "") {
- $daten['objectclass'] = $objectclass;
- }
- if(ldap_add($ds, $dn, $daten)) {
- return true;
- } else {
- return false;
- }
-}
-
-/**
-* 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.
-*
-* @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_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.
-*
-* @see ldap_mod_replace()
-* @see ldap_mod_add()
-* @see ldap_mod_del()
-* @see ldapArraySauber()
-* @see numArraySauber()
-*
-* @author Timothy Burk
-*/
-function uniLdapModify($ds, $dn, $daten_alt, $daten_neu, $i = 0) {
- $meldung = "";
- $daten_alt = ldapArraySauber($daten_alt, FALSE);
- $daten_alt = $daten_alt[$i];
- foreach($daten_neu as $key => $value_neu) {
- $key = strtolower($key);
- 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 &nbsp; l�schen
- if (isset($daten_alt[$key])) {
- $daten_alt[$key] = str_replace(chr(160),"",trim($daten_alt[$key])); // ungewollte Leerzeichen und &nbsp; 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.
- if(ldap_mod_add($ds, $dn, array($key => $value_neu))) {
- $meldung .= "Add successfull: ".$key." -> ".$value_neu."<br>";
- } else {
- $meldung .= "Add error: ".$key." -> ".$value_neu."<br>";
- }
-
- } else if($daten_alt[$key] != "" && $value_neu == "") {
- # FALL 2:
- # Alter Wert ist nicht leer, neuer Wert ist leer.
- # L�sche Attribut.
- if(ldap_mod_del($ds, $dn, array($key => $daten_alt[$key]))) {
- $meldung .= "Delete successfull: ".$key." -> ".$daten_alt[$key]."<br>";
- } else {
- $meldung .= "Delete error: ".$key." -> ".$daten_alt[$key]."<br>";
- }
-
- } 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.
- if(ldap_mod_replace($ds, $dn, array($key => $value_neu))) {
- $meldung .= "Replace successfull: ".$key." -> ".$value_neu."<br>";
- } else {
- $meldung .= "Replace error: ".$key." -> ".$value_neu."<br>";
- }
-
- } else {
- # In allen anderen F�llen ist keine �nderung n�tig
- }
- } else {
- # Wenn $value_neu ein Array ist...
- # (d.h., das Attribut $key darf mehrere Werte annehmen)
- $value_neu = numArraySauber($value_neu);
- if (isset($daten_alt[$key])) {
- $value_alt = numArraySauber($daten_alt[$key]);
- foreach($value_alt as $item) {
- #$item = htmlentities($item);
- # L�sche alle alten Werte des Attributes $key.
- if(ldap_mod_del($ds, $dn, array($key => $item))) {
- $meldung .= "Delete successfull: ".$key." -> ".$item."<br>";
- } else {
- $meldung .= "Delete error: ".$key." -> ".$item."<br>";
- }
- }
- }
- foreach($value_neu as $item) {
- $item = htmlentities($item);
- # 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 {
- $meldung .= "Add error: ".$key." -> ".$item."<br>";
- }
-
- }
- }
- }
- #return $meldung;
- if(eregi("error",$meldung)) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-/**
-* 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
-*/
-
-function uniLdapDelete($ds, $dn) {
- # �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";
- 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($i = 0; $i < $daten['count']; $i++){
- uniLdapDelete($ds, $daten[$i]['dn']);
- }
- # l�schen der Bl�tter
- if(ldap_delete($ds, $dn)) {
- return true;
- } else {
- $ldapError .= "L�schen fehlgeschlagen".ldap_error($ds)."<br>\n";
- return false;
- }
-}
-
-############################################################################################
-#
-# Ab hier LDAP Funktionen (Tarik Gasmi) nutzen die zuvor definierten Funktionen
-# von Timothy Burk, u.A.
-#
-############################################################################################
-# Weitere LDAP Funktionen
-
-#
-# LDAP Funktionen um alle Objekte der AU eines bestimmten Typs mit gew�hlten Attributen zu holen
-#
-function get_hosts($auDN,$attributes,$sortattr)
-{
- global $ds, $suffix, $ldapError;
-
- if ( $sortattr == ""){
- $sortattr = "hostname";
- }
-
- if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(objectclass=Host)", $attributes, $sortattr, "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- # print_r($result);printf("<br><br>");
- $host_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $host_array[] = $atts;
- }
- if($attributes != false ){return $host_array;}
- else{return $result;}
- }
-}
-
-function get_groups($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=groups,".$auDN, "(objectclass=groupOfComputers)", $attributes, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- # print_r($result);printf("<br><br>");
- $group_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $group_array[] = $atts;
- }
- if($attributes != false ){return $group_array;}
- else{return $result;}
- }
-}
-
-function get_groups_member($auDN,$attributes,$member)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=groups,".$auDN, "(&(objectclass=groupOfComputers)(member=$member))", $attributes, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- # print_r($result);printf("<br><br>");
- $group_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $group_array[] = $atts;
- }
- if($attributes != false ){return $group_array;}
- else{return $result;}
- }
-}
-
-function get_machineconfigs($baseDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $baseDN, "(objectclass=MachineConfig)", $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>");
- $mc_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['baseDN'] = $baseDN;
- $atts['auDN'] = $auDN;
- $mc_array[] = $atts;
- }
- if($attributes != false ){return $mc_array;}
- else{return $result;}
- }
-}
-
-function get_pxeconfigs($baseDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $baseDN, "(objectclass=PxeConfig)", $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_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;
-
- if(!($result = uniLdapSearch($ds, $baseDN, "(objectclass=MenuEntry)", $attributes, "menuposition", "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>");
- $menent_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['baseDN'] = $baseDN;
- $atts['auDN'] = $auDN;
- $menent_array[] = $atts;
- }
- if($attributes != false ){return $menent_array;}
- else{return $result;}
- }
-}
-
-function get_rbservices($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=rbs,".$auDN, "(objectclass=RBService)", $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>");
- $rbs_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $rbs_array[] = $atts;
- }
- if($attributes != false ){return $rbs_array;}
- else{return $result;}
- }
-}
-
-function get_subnets($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpSubnet)", $attributes, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- $subnet_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $subnet_array[] = $atts;
- }
- if($attributes != false ){return $subnet_array;}
- else{return $result;}
- }
-}
-
-function get_dhcppools($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpPool)", $attributes, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
-
- $pool_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $pool_array[] = $atts;
- }
- if($attributes != false ){return $pool_array;}
- else{return $result;}
- }
-}
-
-function get_dhcppools_subnet($subnetDN,$attributes)
-{
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $auDN, "(&(objectclass=dhcpPool)(dhcphlpcont=$subnetDN))", $attributes, "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
-
- $pool_array = array();
- foreach ($result as $item){
- $poolexpdn = ldap_explode_dn($item['dn'], 1);
- $poolau = $poolexpdn[2];
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['poolAU'] = $poolau;
- $pool_array[] = $atts;
- }
- if($attributes != false ){return $pool_array;}
- else{return $result;}
- }
-}
-
-function get_dhcppoolranges($poolDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $poolDN, "(objectclass=dhcpPool)", array("dhcprange"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $ranges_array = array();
- if ( count($result[0]['dhcprange']) == 1 ){
- $ranges_array [] = $result[0]['dhcprange'];
- }
- elseif ( count($result[0]['dhcprange']) > 1 ){
- foreach ($result[0]['dhcprange'] as $range){
- $ranges_array [] = $range;
- }
- }
- return $ranges_array;
- }
-}
-
-function get_childau($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $auDN, "(objectclass=AdministrativeUnit)", $attributes, "ou", "list", 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_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;
-
- if(!($result = uniLdapSearch($ds, $auDN, "(objectclass=AdministrativeUnit)", $attributes, "ou", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
-
- $au_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $au_array[] = $atts;
- }
- if($attributes != false ){return $au_array;}
- else{return $result;}
- }
-}
-
-function get_domain_data($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $suffix, "(&(objectclass=dnsdomain)(associatedname=$auDN))", $attributes, "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
-
- $domain_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $domain_array[] = $atts;
- }
- if($attributes != false ){return $domain_array;}
- else{return $result;}
- }
-}
-
-
-function get_roles($auDN)
-{
- global $ds, $suffix, $domDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=roles,".$auDN, "(|(objectclass=GroupOfNames)(objectclass=Admins))", array("cn","member"), "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- $roles_array = array();
- #print_r($result);
- foreach ($result as $item){
- if ( count($item['member']) > 1 ){
- foreach ($item['member'] as $member){
- $roles_array[$item['cn']][] = $member;
- }
- }
- if ( count($item['member']) == 1 ){
- $roles_array[$item['cn']][] = $item['member'];
- }
- }
- return $roles_array;
- }
-}
-
-function get_roles_dns($domDN)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=roles,".$domDN, "(objectclass=GroupOfNames)", array("cn","member"), "cn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- $roles_array = array();
- foreach ($result as $item){
- if ( count($item['member']) > 1){
- foreach ($item['member'] as $member){
- $roles_array[$item['cn']][] = $member;
- }
- }else{
- $roles_array[$item['cn']][] = $item['member'];
- }
- }
- return $roles_array;
- }
-}
-
-
-function get_users(){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=people,".$suffix, "(objectclass=inetOrgPerson)", array("dn","cn","sn","uid"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- $users_array = array();
- # foreach ($result as $item){
- # $users_array[$item['cn']] = $item['member'];
- # }
- # return $users_array;
- return $result;
- }
-}
-
-function get_user_data($userDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $userDN, "(objectclass=inetOrgPerson)", $attributes, "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $user_data = $atts;
- }
- if($attributes != false ){return $user_data;}
- else{return $result;}
- }
-}
-
-
-function get_dc_data($dcDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $dcDN, "(objectclass=dnsdomain)", $attributes, "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $dc_data = $atts;
- }
- if($attributes != false ){return $dc_data;}
- else{return $result;}
- }
-}
-
-function get_node_data($nodeDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- $node_data = array();
-
- if(!($result = uniLdapSearch($ds, $nodeDN, "(objectclass=*)", $attributes, "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- foreach ($result as $item){
- foreach ($attributes as $att){
- $node_data[$att] = $item[$att];
- }
- }
- if($attributes != false ){return $node_data;}
- else{return $result;}
- }
-}
-
-
-
-function get_zone_entries($dcDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $dcDN, "(|(objectclass=dNSZone)(objectclass=dNSZoneIncludeDirective))", $attributes, "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- # print_r($result);printf("<br><br>");
- $zone_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['dcDN'] = $dcDN;
- $zone_array[] = $atts;
- }
- if($attributes != false ){return $zone_array;}
- else{return $result;}
- }
-}
-
-
-function get_zone_entries_assocname($dcDN,$attributes,$assocname)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $dcDN, "(&(|(objectclass=dNSZone)(objectclass=dNSZoneIncludeDirective))(associatedname=$assocname))", $attributes, "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- # print_r($result);printf("<br><br>");
- $zone_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['dcDN'] = $dcDN;
- $zone_array[] = $atts;
- }
- if($attributes != false ){return $zone_array;}
- else{return $result;}
- }
-}
-
-function get_dn_menuposition($pxeDN,$pos)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $pxeDN, "(menuposition=$pos)", array("dn"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else {
- $result = ldapArraySauber($result);
- return $result[0]['dn'];
- }
-}
-
-function get_dhcpservices($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpService)", $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>");
- $dhcp_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $dhcp_array[] = $atts;
- }
- if($attributes != false ){return $dhcp_array;}
- else{return $result;}
- }
-}
-
-function get_dhcpsubnets($auDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "cn=dhcp,".$auDN, "(objectclass=dhcpSubnet)", $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>");
- $dhcp_array = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $atts['auDN'] = $auDN;
- $dhcp_array[] = $atts;
- }
- if($attributes != false ){return $dhcp_array;}
- else{return $result;}
- }
-}
-
-function get_service_subnets($dhcpserviceDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- $filter = "(&(dhcphlpcont=".$dhcpserviceDN.")(objectclass=dhcpSubnet))";
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, $filter, $attributes, "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- elseif(count($result) == 0){return $result;}
- else{
- $result = ldapArraySauber($result);
- # print_r($result);
- $dhcpsubnets = array();
- foreach ($result as $item){
- foreach ($attributes as $att){
- $atts[$att] = $item[$att];
- }
- $expdn = ldap_explode_dn($item['dn'],1);
- $au = array_slice($expdn, 3, 1);
- $atts['auDN'] = implode ( ',', $au );
- $dhcpsubnets [] = $atts;
- }
- #print_r($dhcpsubnets);
- if($attributes != false ){
- return $dhcpsubnets;
- }
- else{return $result;}
- }
-}
-
-?>
diff --git a/ldap-site-mngmt/webinterface/lib/ldap2.inc.php b/ldap-site-mngmt/webinterface/lib/ldap2.inc.php
deleted file mode 100644
index 3d0b26d9..00000000
--- a/ldap-site-mngmt/webinterface/lib/ldap2.inc.php
+++ /dev/null
@@ -1,350 +0,0 @@
-<?php
-/**
-* ldap2.inc.php - LDAP-Bibliothek
-* Diese Bibliothek enthält weitere LDAP Hilfs-Funktionen
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-//Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-
-# Liefert Array aller Child-Knoten mit bestimmten ausgwählten Attributen
-function get_childs($baseDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $baseDN, "(objectclass=*)", $attributes, "", "list", 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];
- }
- $childau_array[] = $atts;
- }
- if($attributes != false ){return $childau_array;}
- else{return $result;}
- }
-}
-
-# Liefert die RDNs aller Child-Knoten
-function get_childs_rdn($baseDN){
-
- $childs = get_childs($baseDN,array("dn"));
- # print_r($childs); echo "<br><br>";
-
- $childs_rdn = array();
- foreach ($childs as $item){
- $exp = explode(',',$item['dn']);
- $rdn = $exp[0];
- $childs_rdn[] = $rdn;
- }
-
- # print_r($childs_rdn);
- return $childs_rdn;
-}
-
-
-# Attribute eines Knotens (Vorsicht Array enthält noch DN und COUNT)
-# in einem Array wie er z.B. von ldap_add verwendet wird
-function get_node_attributes($nodeDN){
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $nodeDN, "(objectclass=*)", array(), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- # print_r($result);
- foreach ($result as $item){
- foreach (array_keys($item) as $merkmal)
- $attrs[$merkmal] = $item[$merkmal];
- }
- return $attrs;
-}
-
-# Rekursives Kopieren
-function dive_into_tree_cp($baseDN,$new_baseDN){
-
- global $ds, $suffix, $ldapError;
-
- $expldn = ldap_explode_dn($new_baseDN,0);
- $new_node_rdn = $expldn[0];
- $exp = explode('=',$new_node_rdn);
- $new_node_rdn_merk = $exp[0];
- $new_node_rdn_val = $exp[1];
- $new_node_rdn_merk = strtolower($new_node_rdn_merk);
-
- $childs_rdn = get_childs_rdn($baseDN);
-
- $attrs = get_node_attributes($baseDN);
- # print_r($attrs); echo "<br>";
- unset($attrs['dn']);
- unset($attrs['count']);
- $attrs["$new_node_rdn_merk"] = $new_node_rdn_val;
- # print_r($attrs); echo "<br>";
-
- $result = ldap_add($ds,$new_baseDN,$attrs);
-
-
- //recursivly do dive for each child
- foreach($childs_rdn as $rdn){
- dive_into_tree_cp( $rdn.",".$baseDN , $rdn.",".$new_baseDN);
- }
- return $result;
-}
-
-
-#
-# Rekursives Loeschen
-function dive_into_tree_del($baseDN,$except){
-
- global $ds, $suffix, $ldapError;
-
- $childs_rdn = get_childs_rdn($baseDN);
- //recursivly do dive for each child
- foreach($childs_rdn as $rdn){
- dive_into_tree_del( $rdn.",".$baseDN , $except);
- }
- if($baseDN != $except){
- $result = ldap_delete($ds,$baseDN);
- }
-
- return $result;
-}
-
-# Rekursives Verschieben
-function move_subtree($oldDN,$newDN){
-
- if(dive_into_tree_cp($oldDN,$newDN))
- {
- dive_into_tree_del($oldDN,"");
- echo "Moved subtree<br>";
- return 1;
- }
- else echo "Moving subtree not possible!!!<br>";
-}
-
-
-function adjust_dn_entries($oldDN,$newDN){
-
- global $ds, $suffix, $ldapError;
-
- # single Attributes:
- if(!($result = uniLdapSearch($ds, $newDN, "(objectclass=host)", array("dn","dhcphlpcont"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item){
- if (strpos($item['dhcphlpcont'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item['dhcphlpcont']);
- $entry['dhcphlpcont'] = $newvalue;
- ldap_mod_replace($ds,$item['dn'],$entry);
- }
- }
-
- if(!($result = uniLdapSearch($ds, $newDN, "(objectclass=PXEConfig)", array("dn","rbservicedn"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item2){
- if (strpos($item2['rbservicedn'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item2['rbservicedn']);
- $entry2['rbservicedn'] = $newvalue;
- ldap_mod_replace($ds,$item2['dn'],$entry2);
- }
- }
-
- if(!($result = uniLdapSearch($ds, $newDN, "(objectclass=dhcpService)", array("dn","dhcpprimarydn","dhcpsecondarydn"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item3){
- if (strpos($item3['dhcpprimarydn'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item3['dhcpprimarydn']);
- $entry3['dhcpprimarydn'] = $newvalue;
- ldap_mod_replace($ds,$item3['dn'],$entry3);
- }
- if (strpos($item3['dhcpsecondarydn'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item3['dhcpsecondarydn']);
- $entry4['dhcpsecondarydn'] = $newvalue;
- ldap_mod_replace($ds,$item3['dn'],$entry4);
- }
- }
-
- if(!($result = uniLdapSearch($ds, $newDN, "(objectclass=MenuEntry)", array("dn","genericmenuentrydn","ldapuri"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item4){
- if (strpos($item4['genericmenuentrydn'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item4['genericmenuentrydn']);
- $entry5['genericmenuentrydn'] = $newvalue;
- ldap_mod_replace($ds,$item4['dn'],$entry5);
- }
- if (strpos($item4['ldapuri'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item4['ldapuri']);
- $entry6['ldapuri'] = $newvalue;
- ldap_mod_replace($ds,$item4['dn'],$entry6);
- }
- }
-
- # Multi-Attribut member
- if(!($result = uniLdapSearch($ds, $newDN, "(objectclass=groupOfComputers)", array("dn","member","dhcphlpcont"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item5){
- for ($i=0; $i<count($item5['member']); $i++){
- if (strpos($item5['member'][$i],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item5['member'][$i]);
- $entry7['member'][$i] = $newvalue;
- }else{
- $entry7['member'][$i] = $item5['member'][$i];
- }
- ldap_mod_replace($ds,$item5['dn'],$entry7);
- }
- if (strpos($item5['dhcphlpcont'],$oldDN) != false){
- $newvalue = str_replace($oldDN,$newDN,$item5['dhcphlpcont']);
- $entry8['dhcphlpcont'] = $newvalue;
- ldap_mod_replace($ds,$item5['dn'],$entry8);
- }
-
- }
-
- # Attribut AssociatedName in DNS Teilbaum
- if(!($result = uniLdapSearch($ds, "ou=DNS,".$suffix , "(associatedname=$oldDN)", array("dn","associatedname"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item6){
- $newvalue = str_replace($oldDN,$newDN,$item6['associatedname']);
- $entry9['associatedname'] = $newvalue;
- ldap_mod_replace($ds,$item6['dn'],$entry9);
- }
-
- # Attribut RelativeDomainName in DNS Teilbaum ... noch nicht fertig
- $hostdnexpold = ldap_explode_dn($oldDN, 0);
- $hostdnexpnew = ldap_explode_dn($newDN, 0);
- $oldhostname = $hostdnexpold[0];
- $newhostname = $hostdnexpnew[0];
- if(!($result = uniLdapSearch($ds, "ou=DNS,".$suffix , "(relativedomainname=$oldhostname)", array("dn","relativedomainname"), "", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- foreach ($result as $item7){
- $newvalue = str_replace($oldhostname,$newhostname,$item7['relativedomainname']);
- $entry10['relativedomainname'] = $newvalue;
- ldap_mod_replace($ds,$item7['dn'],$entry10);
- }
-
-}
-
-
-
-function check_for_dc($dn, $dc){
- global $ds, $suffix, $ldapError;
- if(!($result = uniLdapSearch($ds, $dn, "(dc=$dc)", array("dc"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- if (count($result[0]['dc']) == 0 ) {return 0;}
- elseif ($result[0]['dc'] == $dc){return 1;}
-}
-
-
-function get_dc_childs($baseDN,$attributes)
-{
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $baseDN, "(objectclass=dnsdomain)", $attributes, "", "list", 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];
- }
- $childau_array[] = $atts;
- }
- if($attributes != false ){return $childau_array;}
- else{return $result;}
- }
-}
-
-# Liefert die RDNs aller dc-Child-Knoten
-function get_dc_childs_rdn($baseDN){
-
- global $ds, $suffix, $ldapError;
-
- $childs = get_dc_childs($baseDN,array("dn"));
- # print_r($childs); echo "<br><br>";
-
- $childs_rdn = array();
- foreach ($childs as $item){
- $exp = explode(',',$item['dn']);
- $rdn = $exp[0];
- $childs_rdn[] = $rdn;
- }
-
- # print_r($childs_rdn);
- return $childs_rdn;
-}
-
-function get_entry_number($entryDN,$entryobjectclass){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, $entryDN, "(objectclass=machineconfig)", array("count"), "", "one", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- print_r ($result);
-
-}
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php b/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php
deleted file mode 100644
index 2e7d5348..00000000
--- a/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php
+++ /dev/null
@@ -1,685 +0,0 @@
-<?php
-
-/**
-* rbs_management_functions.php - Remote Boot Services Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung von RBS Diensten,
-* PXE Konfigurationsdateien ihren Menüeinträgen und ihren Genersichen Bootmenüeinträgen
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-
-#######################################################################
-# Funktionen zur Verwaltung von RBS Diensten
-#
-
-#
-# Neues RBS Dienst-Objekt anlegen
-#
-function add_rbs($rbsDN,$rbscn,$rbsoffer,$server,$atts){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $rbsentry ['objectclass'][0] = "RBService";
- $rbsentry ['objectclass'][1] = "top";
- $rbsentry ['cn'] = $rbscn;
- $rbsentry ['rbsofferdn'] = $rbsoffer;
- if (count($atts) != 0){
- foreach (array_keys($atts) as $key){
- if ($atts[$key] != ""){
- $rbsentry[$key] = $atts[$key];
- }
- }
- }
- if (count($server) != 0){
- if ($server['tftp'] != ""){$rbsentry ['tftpserverip'] = $server['tftp'];}
- if ($server['nfs'] != ""){$rbsentry ['nfsserverip'] = $server['nfs'];}
- if ($server['nbd'] != ""){$rbsentry ['nbdserverip'] = $server['nbd'];}
- }
- # print_r($rbsentry); echo "<br>";
- print_r($rbsDN); echo "<br>";
-
- # Standard Fallback Menü anlegen
- $pxecn = "PXE_Fallback-No-Config";
- $pxeDN = "cn=".$pxecn.",".$rbsDN;
- $filename = array("fallback-nopxe");
- $ldapuri = LDAP_HOST."/dn=cn=computers,".$auDN; # wirklich nötig??
- $mecn = "Fallback-Text";
- $meDN = "cn=".$mecn.",".$pxeDN;
- $meattribs = array("label" => "Keine PXE Boot-Konfiguration fuer die aktuelle Zeit definiert",
- "kernel" => "menu.c32",
- "submenulink" => "fallback-nopxe");
-
- if (ldap_add($ds,$rbsDN,$rbsentry)){
- if (add_pxe($pxeDN,$pxecn,$rbsDN,"",array(),$filename,$ldapuri)){
- if (add_me($meDN,$mecn,"","01",$meattribs,$pxeDN)){
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-#
-# "RBS-Angebote" im Verzeichnis suchen, die die AU ($auDN) nutzen darf,
-# Suche nach passenden RBS-Offer-DNs
-#
-function get_rbsoffers($auDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn","rbsofferdn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(objectclass=RBService)", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- #print_r($result);echo "<br><br>";
-
- $rbs_offers = array();
- foreach ($result as $rbs){
- #print_r(strpos($auDN, $rbs['rbsofferdn']));echo "<br>";
- if ( strpos($auDN, $rbs['rbsofferdn']) !== false )
- $rbs_offers [] = $rbs['dn'];
- }
- }
- #print_r($rbs_offers);echo "<br><br>";
- return $rbs_offers;
-}
-
-
-#
-# Beim Löschen von RBS-Objekten muss dafür gesorgt werden dass keine PXEs mehr auf
-# diese zeigen, Ref. Abhängigkeiten
-#
-function clean_up_del_rbs($rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=PXEConfig)(rbservicedn=$rbsDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry ['rbservicedn'] = $rbsDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry2 ['hlprbservice'] = $rbsDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry2);
- }
-
-}
-
-#
-# beim ändern des CN (DN) des RBS muss dieses in allen referenzierenden PXEConfig-Objekten
-# nachvollzogen werden, Ref. Abhängigkeiten
-#
-function adjust_rbs_dn($newrbsDN, $rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=PXEConfig)(rbservicedn=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['rbservicedn'] = $newrbsDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry2 ['hlprbservice'] = $newrbsDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry2);
- }
-}
-
-function rbs_adjust_host($hostDN, $rbs){
-
- global $ds, $suffix, $ldapError;
-
- $modentry ['rbservicedn'] = $rbs;
-
- $pxearray = get_pxeconfigs($hostDN,array("dn"));
- if ( count($pxearray) != 0 ){
- foreach ( $pxearray as $item ){
- if ($result = ldap_mod_replace($ds,$item['dn'],$modentry)){
- return 1;
- }else{
- return 0;
- }
- }
- }
-}
-
-# Bei Änderung der TFTP Server IP eines RBS-Objekts entsprechend DHCP Option next-server
-# in den Hostobjekten anpassen und DHCP modify time in den AUs aktualisieren
-function adjust_dhcpnextserver($tftpIP, $rbsDN){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(|(objectclass=Host)(objectclass=dhcpPool))(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $host_au = array();
- if ($tftpIP == ""){
- $deltftpentry ['dhcpoptnext-server'] = array();
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], array());
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }else{
- $modtftpentry ['dhcpoptnext-server'] = $tftpIP;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modtftpentry);
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }
- if ( count($host_au) != 0 ){
- $host_au = array_unique($host_au);
- update_dhcpmtime($host_au);
- }
-}
-
-# Bei Änderung des PXE Init Boot File eines RBS-Objekts entsprechend DHCP Option Filename
-# in den Hostobjekten anpassen
-function adjust_dhcpfilename($initbootfile, $rbsDN, $type){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $host_au = array();
- if ($type == "add"){
- $modentry ['dhcpoptfilename'] = $initbootfile;
- foreach ($result as $item){
- ldap_mod_add($ds, $item['dn'], $modentry);
- }
- }
- elseif ($type == "delete"){
- $modentry ['dhcpoptfilename'] = array();
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], $modentry);
- }
- }
- elseif ($type == "replace"){
- $modentry ['dhcpoptfilename'] = $initbootfile;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }
- if ( count($host_au) != 0 ){
- $host_au = array_unique($host_au);
- update_dhcpmtime($host_au);
- }
-}
-
-# IP Adresse eines Host ändern -> RBS TFTP Server IP anpassen (inkl. dhcpNext-server)
-function adjust_hostip_tftpserverip($oldip,$newip){
-
- global $ds, $suffix, $ldapError, $auDN;
-
- if(!($result = uniLdapSearch($ds, "cn=rbs,".$auDN, "(&(objectclass=RBService)(tftpserverip=$oldip))", array("dn","tftpserverip"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- if (count($result) != 0){
- foreach ($result as $item){
- if ($newip == ""){
- $delentry ['tftpserverip'] = array();
- ldap_mod_del($ds, $item['dn'], $delentry);
- adjust_dhcpnextserver("", $item['dn']);
- }else{
- $modentry ['tftpserverip'] = $newip;
- ldap_mod_replace($ds, $item['dn'], $modentry);
- adjust_dhcpnextserver($newip, $item['dn']);
- }
- }
- }
-}
-
-#
-# Sucht den Hostname zu einer IP im Rechnerteilbaum der AU
-# Verwaltung der am RBS beteiligten Server
-#
-function get_hostname_from_ip($ip){
-
- global $ds, $suffix, $ldapError, $auDN;
-
- $ipp = array($ip,$ip);
- $ipaddress = implode('_',$ipp);
- if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(&(objectclass=Host)(ipaddress=$ipaddress))", array("dn","hostname"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result);
- $host ['hostname'] = $result[0]['hostname'];
- $host ['dn'] = $result[0]['dn'];
- return $host;
-}
-
-
-###############################################################################
-# Funktionen zur Verwaltung von PXE Bootmenüs
-
-#
-# Überprüft, ob sich die angegebene Timerange auf einer der 4 Spezifikationsstufen mit anderen
-# Timeranges des Objkets überschneidet
-#
-function check_timerange_pxe($pxeday,$pxebeg,$pxeend,$nodeDN,$excepttimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $brothers = get_pxeconfigs($nodeDN,array("timerange"));
- # keine Überschneidungen pro Spez.Ebene zulassen
- # print_r($brothers); echo "<br><br>";
- if (count($brothers) != 0){
-
- $intersect = 0;
- foreach ($brothers as $item){
-
- # Fall das Brother mehrere TimeRanges hat
- if (count($item['timerange']) > 1){
- foreach ($item['timerange'] as $tr){
-
- if($tr != $excepttimerange){
- $exptime = explode('_',$tr);
- $bpxeday = $exptime[0];
- $bpxebeg = $exptime[1];
- $bpxeend = $exptime[2];
- #echo "pxeday:"; print_r($pxeday); echo "<br>";
- #echo "bpxeday:"; print_r($bpxeday); echo "<br>";
- #echo "pxebeg:"; print_r($pxebeg); echo "<br>";
- #echo "bpxebeg:"; print_r($bpxebeg); echo "<br>";
- #echo "pxeend:"; print_r($pxeend); echo "<br>";
- #echo "bpxeend:"; print_r($bpxeend); echo "<br>";
-
- if ($pxeday == $bpxeday){
- if ( $pxebeg > $bpxeend || $pxeend < $bpxebeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bpxeday."_".$bpxebeg."_".$bpxeend;
- break;
- }
- }
- }
-
- }
- }
- # Fall das Brother nur eine TimeRange hat
- elseif (count($item['timerange']) == 1){
-
- if($item['timerange'] != $excepttimerange){
- $exptime = explode('_',$item['timerange']);
- $bpxeday = $exptime[0];
- $bpxebeg = $exptime[1];
- $bpxeend = $exptime[2];
- #echo "pxeday:"; print_r($pxeday); echo "<br>";
- #echo "bpxeday:"; print_r($bpxeday); echo "<br>";
- #echo "pxebeg:"; print_r($pxebeg); echo "<br>";
- #echo "bpxebeg:"; print_r($bpxebeg); echo "<br>";
- #echo "pxeend:"; print_r($pxeend); echo "<br>";
- #echo "bmcend:"; print_r($bpxeend); echo "<br>";
-
- if ($pxeday == $bpxeday){
- if ( $pxebeg > $bpxeend || $pxeend < $bpxebeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bpxeday."_".$bpxebeg."_".$bpxeend;
- break;
- }
- }
- }
- }
- }
- #echo "intersect: "; print_r($intersect); echo "<br>";
- if ($intersect == 1){
- echo "<b>[".$pxeday."_".$pxebeg."_".$pxeend."]</b> &uuml;berschneidet sich mit der
- bereits existierende <b>Time Range [".$intersecttr."]</b> !<br><br>";
- return 0;
- }else{
- return 1;
- }
- }else{
- return 1;
- }
-}
-
-
-#
-# Neues PXE Bootmenü anlegen
-#
-function add_pxe($pxeDN,$pxecn,$rbsDN,$pxetimerange,$pxeattribs,$filenames,$conffile){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $pxeentry ['objectclass'][0] = "PXEConfig";
- $pxeentry ['objectclass'][1] = "top";
- $pxeentry ['cn'] = $pxecn;
- $pxeentry ['rbservicedn'] = $rbsDN;
- #$pxeentry ['ldapuri'] = $ldapuri;
- if ($conffile != ""){$pxeentry ['fileuri'] = $conffile;}
- if (count($filenames) > 1 ){
- for ($i=0; $i<count($filenames); $i++){
- $pxeentry ['filename'][$i] = $filenames[$i];
- }
- }
- if (count($filenames) == 1){
- $pxeentry ['filename'] = $filenames[0];
- }
- if ($pxetimerange != ""){$pxeentry ['timerange'] = $pxetimerange;}
- if (count($pxeattribs) != 0){
- foreach (array_keys($pxeattribs) as $key){
- if ($pxeattribs[$key] != ""){
- $pxeentry[$key] = $pxeattribs[$key];
- }
- }
- }
- print_r($pxeentry); echo "<br>";
- print_r($pxeDN); echo "<br>";
- if (ldap_add($ds,$pxeDN,$pxeentry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# PXE CN (DN) ändern, Teilbaum verschieben
-#
-function modify_pxe_dn($pxeDN, $newpxeDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($pxeDN,$newpxeDN)){
- return 1;
- }else{
- return 0;
- }
-}
-
-
-#
-# Timerange eines PXEConfig-Objekts ändern
-#
-function change_pxe_timerange($pxeDN,$newpxeDN,$pxetimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- # move tree
- if (move_subtree($pxeDN,$newpxeDN)){
- # timerange ändern
- $entrypxe ['timerange'] = $pxetimerange;
- if (ldap_mod_replace($ds,$newpxeDN,$entrypxe)){
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-#
-# nach dem Löschen von PXEConfig Menueinträgen müssen Menüpositionen in der PXEConfig
-# angepasst werden (Lücken schließen)
-#
-function cleanup_menupositions($pxeDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $me = get_menuentries($pxeDN,array("dn","menuposition"));
- if (count($me) != 0){
- foreach ($me as $item){
- $pos = $item['menuposition'];
- $pos = preg_replace ( '/0([0-9])/', '$1', $pos);
- $menpos[$pos] = $item['dn'];
- ksort($menpos);
- }
- $p = 1;
- foreach ($menpos as $item){
- if (strlen($p) == 1){
- $p = "0".$p;
- }
- $entry ['menuposition'] = $p;
- ldap_mod_replace($ds,$item,$entry);
- $p++;
- }
- }
-}
-
-#
-# Hilfsfunktion zur Verarbeitung von Menüpositionen in PXEConfigs
-#
-function increment_menupositions($pxeDN,$menpos){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if (strlen($menpos) == 1){
- $menpos = "0".$menpos;
- }
- $meDN = get_dn_menuposition($pxeDN,$menpos);
- if ($meDN != ""){
- # zur Berechnung erst führende Nullen weg
- $menpos = preg_replace ( '/0([0-9])/', '$1', $menpos);
- $newpos = $menpos+1;
- increment_menupositions($pxeDN,$newpos);
- # zum Eintragen führenden Nullen wieder dazu
- if (strlen($newpos) == 1){
- $newpos = "0".$newpos;
- }
- $entry ['menuposition'] = $newpos;
- ldap_mod_replace($ds,$meDN,$entry);
- }
-}
-
-#
-# Neuen Menüeintrag anlegen
-#
-function add_me($meDN,$mecn,$gbmDN,$menpos,$meattribs,$pxeDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $mentry ['objectclass'][0] = "MenuEntry";
- $mentry ['objectclass'][1] = "top";
- $mentry ['cn'] = $mecn;
- if($gbmDN != ""){$mentry ['genericmenuentrydn'] = $gbmDN;}
- $mentry ['menuposition'] = $menpos;
- if (count($meattribs) != 0){
- foreach (array_keys($meattribs) as $key){
- if ($meattribs[$key] != ""){
- $mentry[$key] = $meattribs[$key];
- }
- }
- }
- print_r($mentry); echo "<br>";
- print_r($meDN); echo "<br>";
- increment_menupositions($pxeDN,$menpos); # andere jeweils um 1 erhöhen
- if (ldap_add($ds,$meDN,$mentry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# Menu Entry CN (DN) ändern
-#
-function modify_me_dn($meDN, $newmeDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($meDN,$newmeDN)){
- return 1;
- }else{
- return 0;
- }
-}
-
-
-
-#####################################################################
-# Verwaltung von GBM
-#
-
-function add_gbm($gbmDN,$gbmcn,$attribs){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $entry ['objectclass'][0] = "MenuEntry";
- $entry ['objectclass'][1] = "top";
- $entry ['cn'] = $gbmcn;
- if (count($attribs) != 0){
- foreach (array_keys($attribs) as $key){
- if ($attribs[$key] != ""){
- $entry[$key] = $attribs[$key];
- }
- }
- }
- print_r($entry); echo "<br>";
- print_r($gbmDN); echo "<br>";
- if (ldap_add($ds,$gbmDN,$entry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# beim löschen von GBMs muss dafür gesorgt werden, dass keine MEs mehr auf diese zeigen,
-# Ref.Abhängigkeiten (sonst gibts Fehler beim PXE-Perlskript und die Nutzer wissen nicht dass ihr PXE Menü nicht
-# mehr funktioniert, so kann man durch Fehlen des gbmDN wissen das es kein GBM mehr zu diesem ME gibt
-#
-function clean_up_del_gbm($gbmDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn","genericmenuentrydn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=MenuEntry)(genericmenuentrydn=$gbmDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry ['genericmenuentrydn'] = $gbmDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-
-}
-
-
-#
-# beim ändern des CN (DN) des GBM, Meüeinträge anpassen, Ref. Abhängigkeiten
-#
-function adjust_gbm_dn($newgbmDN, $gbmDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=MenuEntry)(genericmenuentrydn=$gbmDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['genericmenuentrydn'] = $newgbmDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-}
-
-
-
-function alternative_rbservices($rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $alt_rbs = array();
-
- $rbsarray = get_rbsoffers($auDN);
- # print_r($rbsarray); echo "<br>";
- if (count($rbsarray) != 0){
- for ($i=0; $i < count($rbsarray); $i++){
- if ($rbsarray[$i] != $rbsDN){
- $exp = ldap_explode_dn ( $rbsarray[$i], 1 );
- $alt = array ("dn" => $rbsarray[$i], "cn" => $exp[0], "au" => " / ".$exp[2]);
- $alt_rbs[] = $alt;
- }
- }
- }
-
- return $alt_rbs;
-}
-
-?> \ No newline at end of file
diff --git a/ldap-site-mngmt/webinterface/lib/syntax_check.php b/ldap-site-mngmt/webinterface/lib/syntax_check.php
deleted file mode 100644
index 48926260..00000000
--- a/ldap-site-mngmt/webinterface/lib/syntax_check.php
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-/*
- Syntaxcheck 1.2 2006/08/08
-
- A class for checking syntax of forms data
- Copyright (c) Tarik Gasmi, All Rights Reserved
-*/
-
-
-class Syntaxcheck
-{
-
- var $ERROR = "";
- var $CLEAR = false;
-
- function Syntaxcheck ()
- {
- return;
- }
-
- function clear_error ()
- {
- $this->ERROR = "";
- }
-
-
-
-
-
-# Ist "dotted quad IPAddress" in gueltigem Bereich? true or false
-# Ueberprueft Format, fuehrende Nullen, und Werte > 255
-#
-# Ueberprueft nicht nach reservierten oder nicht-route-baren IPs.
-#
-function check_ip_syntax($IP)
-{
- if($this->CLEAR) { $this->clear_error();}
-
- $len = strlen($IP);
- if( $len > 15 ){
- $this->ERROR = "check_ip_syntax: too long [$IP][$len]";
- return false;
- }
-
- $badcharacter = eregi_replace("([0-9\.]+)","",$IP);
- if(!empty($badcharacter)){
- $this->ERROR = "check_ip_syntax: Bad data in IP address [$badcharacter]";
- return false;
- }
-
- $chunks = explode(".",$IP);
- $count = count($chunks);
- if ($count != 4){
- $this->ERROR = "check_ip_syntax: not a dotted quad [$IP]";
- return false;
- }
-
- while ( list ($key,$val) = each ($chunks) ){
- if(ereg("^0",$val)){
- $this->ERROR = "check_ip_syntax: Invalid IP segment [$val]";
- return false;
- }
- $Num = $val;
- settype($Num,"integer");
- if($Num > 255){
- $this->ERROR = "check_ip_syntax: Segment out of range [$Num]";
- return false;
- }
- }
-
- return true;
-
-}
-
-# Netzwerkaddresse
-function check_netip_syntax($IP)
-{
- if($this->CLEAR) { $this->clear_error();}
-
- if ( !($this->check_ip_syntax($IP)) ){
- return false;
- }
- $chunks = explode(".",$IP);
- if ( $chunks[3] != "0" ){
- return false;
- }
- return true;
-}
-
-# MAC Adresse
-function check_mac_syntax($MAC)
-{
- if($this->CLEAR) { $this->clear_error();}
-
- $len = strlen($MAC);
- if( $len != 17 ){
- $this->ERROR = "check_mac_syntax: too long [$MAC][$len]";
- return false;
- }
-
- $badcharacter = eregi_replace("([0-9a-fA-F\:]+)","",$MAC);
- if(!empty($badcharacter)){
- $this->ERROR = "check_mac_syntax: Bad data in MAC address [$badcharacter]";
- return false;
- }
-
- $chunks = explode(":",$MAC);
- $count = count($chunks);
- if ($count != 6){
- $this->ERROR = "check_mac_syntax: not in format hx:hx:hx:hx:hx:hx [$MAC]";
- return false;
- }
- foreach ($chunks as $chunk){
- $chunklen = strlen($chunk);
- if( $len != 2 ){
- $this->ERROR = "check_mac_syntax: too long [$MAC][$len]";
- return false;
- }
- }
-
- return true;
-
-}
-
-
-# Domainname
-
-# Hostname
-function is_hostname ($hostname = ""){
-
- if($this->CLEAR) { $this->clear_error(); }
-
- $web = false;
-
- if(empty($hostname))
- {
- $this->ERROR = "is_hostname: No hostname submitted";
- return false;
- }
-
- // Only a-z, 0-9, and "-" or "." are permitted in a hostname
-
- // Patch for POSIX regex lib by Sascha Schumann sas@schell.de
- $Bad = eregi_replace("[-A-Z0-9\.]","",$hostname);
-
- if(!empty($Bad))
- {
- $this->ERROR = "is_hostname: invalid chars [$Bad]";
- return false;
- }
-
- // See if we're doing www.hostname.tld or hostname.tld
- if(eregi("^www\.",$hostname))
- {
- $web = true;
- }
-
- // double "." is a not permitted
- if(ereg("\.\.",$hostname))
- {
- $this->ERROR = "is_hostname: Double dot in [$hostname]";
- return false;
- }
- if(ereg("^\.",$hostname))
- {
- $this->ERROR = "is_hostname: leading dot in [$hostname]";
- return false;
- }
-
- $chunks = explode(".",$hostname);
-
- if( (gettype($chunks)) != "array")
- {
- $this->ERROR = "is_hostname: Invalid hostname, no dot seperator [$hostname]";
- return false;
- }
-
- $count = ( (count($chunks)) - 1);
-
- if($count < 1)
- {
- $this->ERROR = "is_hostname: Invalid hostname [$count] [$hostname]\n";
- return false;
- }
-
- // Bug that can't be killed without doing an is_host,
- // something.something will return TRUE, even if it's something
- // stupid like NS.SOMETHING (with no tld), because SOMETHING is
- // construed to BE the tld. The is_bigfour and is_country
- // checks should help eliminate this inconsistancy. To really
- // be sure you've got a valid hostname, do an is_host() on it.
-
- if( ($web) and ($count < 2) )
- {
- $this->ERROR = "is_hostname: Invalid hostname [$count] [$hostname]\n";
- return false;
- }
-
- $tld = $chunks[$count];
-
- if(empty($tld))
- {
- $this->ERROR = "is_hostname: No TLD found in [$hostname]";
- return false;
- }
-
- if(!$this->is_bigfour($tld))
- {
- if(!$this->is_country($tld))
- {
- $this->ERROR = "is_hostname: Unrecognized TLD [$tld]";
- return false;
- }
- }
-
-
- return true;
-}
-
-
-# Syntax Check für die Eingaben: Uhrzeit, Wochentag, Monatstag, Monatstag.Monat
-function check_timerange_syntax($mcday,$mcbeg,$mcend){
-
- if($this->CLEAR) { $this->clear_error();}
-
- $badcharacter = eregi_replace("([a-z0-9\.]+)","",$mcday);
- if(!empty($badcharacter)){
- $this->ERROR = "check_ip_syntax: Bad data in MC Day [$badcharacter]";
- return false;
- }
- $badcharacter = eregi_replace("([x0-9]+)","",$mcbeg);
- if(!empty($badcharacter)){
- $this->ERROR = "check_ip_syntax: Bad data in MC Begin [$badcharacter]";
- return false;
- }
- $badcharacter = eregi_replace("([x0-9]+)","",$mcend);
- if(!empty($badcharacter)){
- $this->ERROR = "check_ip_syntax: Bad data in MC End [$badcharacter]";
- return false;
- }
-
- $lenmcday = strlen($mcday);
- if (eregi("([a-z]+)",$mcday)){
- if ($lenmcday > 2){$this->ERROR = "WOTAG > 2"; return false;}
- if (eregi("([0-9\.]+)",$mcday)){$this->ERROR = "WOTAG enthaelt (0-9.)"; return false;}
- #if (!(eregi("[mdsfx][aiorx]",$mcday))){return false;}
- if (!(eregi("(m[io]|d[io]|s[ao]|fr|x)",$mcday))){$this->ERROR = "WOTAG falscher String"; return false;}
- }
- if (eregi("([0-9]+)",$mcday)){
- if (eregi("[\.]",$mcday)){
- preg_match("/[\.]/",$mcday,$treffer);
- if (count($treffer) > 1){$this->ERROR = "mehr als 2 Punkte"; return false;};
- $exp = explode('.',$mcday);
- $day = $exp[0];
- $lenday = strlen($day);
- if ($lenday > 2){$this->ERROR = "TAG > 2"; return false;}
- if (!(eregi("(0[1-9]|[0-2][0-9]|3[01])",$day))){$this->ERROR = "TAG nicht korrekt"; return false;}
- $month = $exp[1];
- $lenmonth = strlen($month);
- if ($lenmonth > 2){$this->ERROR = "MONAT > 2"; return false;}
- if (!(eregi("(0[0-9]|0[0-9]|1[0-2])",$month))){$this->ERROR = "Monat nicht korrekt"; return false;}
-
- }
- else{
- if ($lenmcday > 2){$this->ERROR = "TAG > 2"; return false;}
- if (!(eregi("(0[0-9]|[0-2][0-9]|3[01])",$mcday))){$this->ERROR = "Tag nicht korrekt"; return false;}
- }
- }
-
- $lenmcbeg = strlen($mcbeg);
- if ($lenmcbeg == 2){
- if (!(eregi("(0[0-9]|1[0-9]|2[0-3]|x)",$mcbeg))){$this->ERROR = "Uhrzeit nicht korrekt"; return false;}
- }
- if ($lenmcbeg == 1){
- if (!(eregi("([0-9]|x)",$mcbeg))){$this->ERROR = "Uhrzeit nicht korrekt"; return false;}
- }
- $lenmcend = strlen($mcend);
- if ($lenmcend == 2){
- if (!(eregi("(0[0-9]|1[0-9]|2[0-3]|x)",$mcend))){$this->ERROR = "Uhrzeit nicht korrekt"; return false;}
- }
- if ($lenmcend == 1){
- if (!(eregi("([0-9]|x)",$mcend))){$this->ERROR = "Uhrzeit nicht korrekt"; return false;}
- }
-
- return true;
-}
-
-
-# Überprüft ob Menuposition ein Zahl ist
-function check_menuposition($menpos){
-
- if($this->CLEAR) { $this->clear_error();}
-
- $badcharacter = eregi_replace("([0-9]+)","",$menpos);
- if(!empty($badcharacter)){
- $this->ERROR = "check_menupostion: Bad data in Menu Position [$badcharacter]";
- return false;
- }
-}
-
-}
-?> \ No newline at end of file