From 59cf91925ca8da43d2427331b23e4673b0e53095 Mon Sep 17 00:00:00 2001
From: Tarik Gasmi
Date: Mon, 14 May 2007 08:03:48 +0000
Subject: Other webinterface data.
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1077 95ad53e4-c205-0410-b2fa-d234c58c8868
---
.../webinterface/lib/ip_management_functions.php | 1385 ++++++++++++++++++++
1 file changed, 1385 insertions(+)
create mode 100644 ldap-site-mngmt/webinterface/lib/ip_management_functions.php
(limited to 'ldap-site-mngmt/webinterface/lib/ip_management_functions.php')
diff --git a/ldap-site-mngmt/webinterface/lib/ip_management_functions.php b/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
new file mode 100644
index 00000000..b4f4a733
--- /dev/null
+++ b/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
@@ -0,0 +1,1385 @@
+= $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;}
+
+ 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
";
+ }
+}
+
+
+/**
+* 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
",$iprange1,$iprange2,$iprange3);
+ return $iprange3;
+ }
+ else{
+ # printf("No Merging possible: %s and %s
",$iprange1,$iprange2);
+ return 0; }
+ }
+ else{
+ # printf("No Merging possible: %s and %s
",$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;
+}
+
+
+/**
+* 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;
+ }
+}
+
+
+/**
+* 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("
");
+ foreach ( $fipb_array as $item ){
+ $entry ['FreeIPBlock'][] = $item;
+ }
+ $results = ldap_mod_replace($ds,$auDN,$entry);
+ if ($results) echo "
FIPBs erfolgreich zusammengefasst!
" ;
+ else echo "
Fehler beim eintragen der FIPBs!
";
+
+ $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("
");
+ foreach ( $mipb_array as $item ){
+ $entry2 ['MaxIPBlock'][] = $item;
+ }
+ $results = ldap_mod_replace($ds,$auDN,$entry2);
+ if ($results) echo "
MIPBs erfolgreich zusammengefasst!
" ;
+ else echo "
Fehler beim eintragen der MIPBs!
";
+}
+
+
+/**
+* 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 "
Neue FIPBs erfolgreich eingetragen!
" ;
+
+ # ldap_mod_add -> IPAddress = $ip , in Host mit $hostDN
+ $ipentry ['IPAddress'] = $ip;
+ $results = ldap_mod_add($ds,$hostDN,$ipentry);
+ if ($results){
+ echo "
IP Adresse erfolgreich eingetragen!
" ;
+ return 1;
+ }else{
+ echo "
Fehler beim eintragen der IP Adresse!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim eintragen der FIPBs!
";
+ return 0;
+ }
+ }
+ else{
+ printf("
IP Adresse %s nicht im verfuegbaren Bereich!
", $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 "
Neue FIPBs erfolgreich eingetragen!
" ;
+
+ # ldap_mod_add -> IPAddress = $ip , in Host mit $hostDN
+ $ipentry ['dhcpRange'] = $ip;
+ $results = ldap_mod_add($ds,$dhcpobjectDN,$ipentry);
+ if ($results){
+ echo "
IP Adresse erfolgreich eingetragen!
" ;
+ return 1;
+ }else{
+ echo "
Fehler beim eintragen der IP Adresse!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim eintragen der FIPBs!
";
+ return 0;
+ }
+ }else{
+ printf("
IP Range %s ist nicht im verfuegbaren Bereich!
", $ip );
+ 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("
");
+ # printf($old_ip);
+ $delentry ['ipaddress'] = $old_ip;
+ if ( $host_array['dhcpoptfixed-address'] != "" ){
+ $delentry ['dhcpoptfixed-address'] = array();
+ }
+ # print_r($delentry);printf("
");
+
+ $results = ldap_mod_del($ds,$hostDN,$delentry);
+ if ($results){
+ echo "
IP Adresse erfolgreich geloescht!
";
+ $modentry['FreeIPBlock'] = $old_ip;
+ $results = ldap_mod_add($ds,$auDN,$modentry);
+ if ($results){
+ echo "
geloeschte IP Adresse erfolgreich als neuer FIPB in die AU eingetragen!
" ;
+ merge_ipranges($auDN);
+ return 1;
+ }
+ else{
+ echo "
Fehler beim eintragen der geloeschten IP Adresse als neuen FIPB!
";
+ return 0;
+ }
+ }
+ else{
+ echo "
Fehler beim loeschen der IP Adresse!
";
+ 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("
");
+ # printf($old_ip);
+ $delentry['dhcpRange'] = $old_ip;
+ # print_r($delentry);printf("
");
+
+ $results = ldap_mod_del($ds,$dhcpobjectDN,$delentry);
+ if ($results){
+ echo "
DHCP IP Range erfolgreich geloescht!
";
+ $modentry['FreeIPBlock'] = $old_ip;
+ $results = ldap_mod_add($ds,$auDN,$modentry);
+ if ($results){
+ echo "
geloeschte IP Range erfolgreich als neuer FIPB in die AU eingetragen!
" ;
+ merge_ipranges($auDN);
+ return 1;
+ }
+ else{
+ echo "
Fehler beim eintragen der geloeschten IP Range als neuen FIPB!
";
+ # Transaktion simulieren und alte Range wieder eintragen ??
+ return 0;
+ }
+ }
+ else{
+ echo "
Fehler beim loeschen der DHCP IP Range!
";
+ 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)
+{
+ global $ds, $suffix, $ldapError;
+
+ if ( delete_ip_host($hostDN,$auDN) ){
+ if ( new_ip_host($ip,$hostDN,$auDN) ){
+ echo "
IP Adresse erfolgeich geaendert!
";
+ return 1;
+ }else{
+ echo "
Fehler beim Aendern der IP Adresse!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim Aendern der IP Adresse!
";
+ 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 "
DHCP IP Range erfolgeich geaendert!
";
+ return 1;
+ }else{
+ echo "
Fehler beim Aendern der DHCP IP Range!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim Aendern der DHCP IP Range!
";
+ 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 "
---
";print_r($fipb_array);echo "
---
";
+ 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 "
Neue FIPBs erfolgreich eingetragen!
" ;
+
+ # 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 "
IP Adressblock erfolgreich delegiert!
" ;
+ merge_ipranges($childauDN);
+
+ return 1;
+ }else{
+ echo "
Fehler beim eintragen der IP Adresse!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim eintragen der FIPBs!
";
+ return 0;
+ }
+ }
+ else{
+ printf("
Zu delegierende IP Range %s ist nicht im verfuegbaren Bereich!
", $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("
");
+
+ # 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("
");
+ $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("
");
+
+ # 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("
");
+ printf("
Host IP Addresses that will be deleted:
");
+ foreach ($del_objects['hostips'] as $item){
+ printf("HostDN: %s IP Address: %s
",$item['dn'],$item['ip']);
+ }
+ printf("
Subnet IP Ranges that will be adjusted:
");
+ foreach ($del_objects['dhcpranges'] as $item){
+ printf("DhcpObjectDN: %s Zu loeschende IP Range: %s
",$item['dn'],$item['delrange']);
+ }
+ # hier kommte Abfrage ob wirklich Aenderung ausfuehren, ja dann weiter mit loeschen
+ # sonst Abbruch
+ # momentan: einfach loeschen
+ foreach ($del_objects['hostips'] as $item){
+ delete_ip_host($item['dn'],$item['auDN']);
+ }
+ 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("
");
+ 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("
");
+ # for ($i=0; $i < count($mipb_array); $i++){
+ # if ($mipb_array[$i] == false){array_splice($mipb_array, $i, 1);}
+ # }
+ print_r($mipb_array);printf("
");
+ if (count($mipb_array) == 0){
+ $entry ['MaxIPBlock'] = array();
+ print_r($entry);printf("
");
+ $results = ldap_mod_del($ds,$childauDN,$entry);
+ }else{
+ foreach ( $mipb_array as $item ){
+ $entry ['MaxIPBlock'][] = $item;
+ }
+ print_r($entry);printf("
");
+ $results = ldap_mod_replace($ds,$childauDN,$entry);
+ }
+
+ if ($results){
+ echo "
MIPBs in Child-AU erfolgreich geloescht!
" ;
+
+ # in Child-AU: FIPBs anpassen
+ $fipb_array = get_freeipblocks_au($childauDN);
+ print_r($fipb_array);printf("
");
+ 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("
");
+ # for ($i=0; $i < count($fipb_array); $i++){
+ # if ($fipb_array[$i] == false){array_splice($fipb_array, $i, 1);}
+ # }
+ print_r($fipb_array);printf("
");
+ if (count($fipb_array) == 0){
+ $entry1 ['FreeIPBlock'] = array();
+ print_r($entry1);printf("
");
+ $results = ldap_mod_del($ds,$childauDN,$entry1);
+ }else{
+ foreach ( $fipb_array as $item ){
+ $entry1 ['FreeIPBlock'][] = $item;
+ }
+ print_r($entry1);printf("
");
+ $results = ldap_mod_replace($ds,$childauDN,$entry1);
+ }
+
+ if ($results){
+ echo "
FIPBs in Child-AU erfolgreich geloescht!
" ;
+
+ # in AU: Geloeschte IP Bereiche als neue FIPBs aufnehmen
+ foreach ($delip as $item){
+ $entry2 ['FreeIPBlock'][] = $item;
+ }
+ print_r($entry2);printf("
");
+ $results = ldap_mod_add($ds,$auDN,$entry2);
+ if ($results){
+ echo "
FIPBs in AU erfolgreich aktualisiert!
" ;
+
+ # IP Bloecke aufraeumen in Child-AU und AU (Merging)
+ merge_ipranges($auDN);
+ merge_ipranges($childauDN);
+ return 1;
+ }else{
+ echo "
Fehler beim aktualisieren!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim loeschen!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim loeschen!
";
+ 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("
");
+
+ # 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("
");
+
+
+ # 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("
");
+ printf("
Host IP Addresses that will be deleted:
");
+ foreach ($del_objects['hostips'] as $item){
+ printf("HostDN: %s IP Address: %s
",$item['dn'],$item['ip']);
+ }
+ printf("
Subnet IP Ranges that will be adjusted:
");
+ foreach ($del_objects['dhcpranges'] as $item){
+ printf("DhcpObjectDN: %s New IP Range: %s
",$item['dn'],$item['newrange']);
+ }
+
+ # momentan wird einfach geloescht:
+ foreach ($del_objects['hostips'] as $item){
+ delete_ip_host($item['dn'],$item['auDN']);
+ }
+ 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("
");
+ 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("
");
+ for ($i=0; $i < count($mipb_array); $i++){
+ if ($mipb_array[$i] == false){array_splice($mipb_array, $i, 1);}
+ }
+ print_r($mipb_array);printf("
");
+ if (count($mipb_array) == 0){
+ $entry ['MaxIPBlock'] = array();
+ print_r($entry);printf("
");
+ $results = ldap_mod_del($ds,$childauDN,$entry);
+ }else{
+ foreach ( $mipb_array as $item ){
+ $entry ['MaxIPBlock'][] = $item;
+ }
+ print_r($entry);printf("
");
+ $results = ldap_mod_replace($ds,$childauDN,$entry);
+ }
+
+ if ($results){
+ echo "
MIPBs in Child-AU erfolgreich aktualisiert!
" ;
+
+ # in Child-AU: FIPBs anpassen
+ $fipb_array = get_freeipblocks_au($childauDN);
+ #print_r($fipb_array);printf("
");
+ 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("
");
+ for ($i=0; $i < count($fipb_array); $i++){
+ if ($fipb_array[$i] == false){array_splice($fipb_array, $i, 1);}
+ }
+ print_r($fipb_array);printf("
");
+ if (count($fipb_array) == 0){
+ $entry1 ['FreeIPBlock'] = array();
+ print_r($entry1);printf("
");
+ $results = ldap_mod_del($ds,$childauDN,$entry1);
+ }else{
+ foreach ( $fipb_array as $item ){
+ $entry1 ['FreeIPBlock'][] = $item;
+ }
+ print_r($entry1);printf("
");
+ $results = ldap_mod_replace($ds,$childauDN,$entry1);
+ }
+
+ if ($results){
+ echo "
FIPBs in Child-AU erfolgreich aktualisiert!
" ;
+
+ # in AU: Geloeschte IP Bereiche als neue FIPBs aufnehmen
+ foreach ($delip as $item){
+ $entry2 ['FreeIPBlock'][] = $item;
+ }
+ print_r($entry2);printf("
");
+ $results = ldap_mod_add($ds,$auDN,$entry2);
+ if ($results){
+ echo "
FIPBs in AU erfolgreich aktualisiert!
" ;
+
+ # IP Bloecke aufraeumen in Child-AU und AU (Merging)
+ merge_ipranges($auDN);
+ merge_ipranges($childauDN);
+
+ return 1;
+ }else{
+ echo "
Fehler beim aktualisieren!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim aktualisieren!
";
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim aktualisieren!
";
+ 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);
+ new_ip_delegation($difference[0],$childauDN,$auDN);
+}
+
+
+/**
+* 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("
");
+ 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("
");
+
+ # Subnets von child-AU, child-child-AU
+ $csubnets = get_subnets($childauDN,array("dn","dhcprange"));
+ # print_r($csubnets);printf("
");
+ 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("
");
+
+ # Pools von child-AU, child-child-AU
+ /*$cpools = get_pools($childauDN,array("dn","dhcprange"));
+ # print_r($cpools);printf("
");
+ foreach ($cchild_array as $item){
+ $ccpoolsitem = get_hosts($item['dn'],array("dn","dhcprange"));
+ foreach ($ccpoolsitem as $item2){
+ $ccpools[] = $item2;
+ }
+ }
+ $cpools = array_merge($cpools,$ccpools);
+ # print_r($cpools);printf("
");
+ */
+
+ # Zu loeschende Hosts bestimmen
+ $chosts_todo = array();
+ foreach ($delip as $delipitem){
+ 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("
");
+
+ # Zu loeschende Subnets bestimmen, und wie IP Range anzupassen ist
+ $csubnets_todo = array();
+ foreach ($delip as $delipitem){
+ 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("
");
+
+ # Zu loeschende Pools bestimmen, und wie IP Range anzupassen ist
+ /*$cpools_todo = array();
+ foreach ($delip as $delipitem){
+ foreach ($cpools as $item){
+ if( count($item['dhcprange']) > 1 ){
+ foreach ($item['dhcprange'] as $item2 ){
+ if ( intersect_ipranges($delipitem,$item2) != false ){
+ $cpools_todo[] = array('dn'=> $item['dn'],
+ 'delrange' => $item2['dhcprange'],
+ 'auDN' => $item['auDN']);
+ }
+ }
+ }
+ elseif ( count($item['dhcprange']) == 1 ){
+ if ( intersect_ipranges($delipitem,$item['dhcprange']) != false ){
+ $cpools_todo[] = array('dn'=> $item['dn'],
+ 'delrange' => $item['dhcprange'],
+ 'auDN' => $item['auDN']);
+ }
+ }
+ }
+ }
+ # print_r($cpools_todo);printf("
");
+ */
+
+ $dhcps_todo = array_merge($csubnets_todo,$cpools_todo);
+
+ $objects_to_delete = array('hostips' => $chosts_todo,
+ 'dhcpranges' => $dhcps_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("
");
+ 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("
");
+
+ # Subnets von child-AU, child-child-AU
+ $csubnets = get_subnets($childauDN,array("dn","dhcprange"));
+ # print_r($csubnets);printf("
");
+ 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("
");
+
+ # Pools von child-AU, child-child-AU
+ /*$cpools = get_pools($childauDN,array("dn","dhcprange"));
+ # print_r($cpools);printf("
");
+ foreach ($cchild_array as $item){
+ $ccpoolsitem = get_hosts($item['dn'],array("dn","dhcprange"));
+ foreach ($ccpoolsitem as $item2){
+ $ccpools[] = $item2;
+ }
+ }
+ $cpools = array_merge($cpools,$ccpools);
+ # print_r($cpools);printf("
");
+ */
+
+ # Zu loeschende Hosts bestimmen
+ $chosts_todo = array();
+ foreach ($delip as $delipitem){
+ 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("
");
+
+ # Zu loeschende Subnets bestimmen, und wie IP Range anzupassen ist
+ $csubnets_todo = array();
+ foreach ($delip as $delipitem){
+ 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("
");
+
+ # Zu loeschende Pools bestimmen, und wie IP Range anzupassen ist
+ /*$cpools_todo = array();
+ foreach ($delip as $delipitem){
+ foreach ($cpools as $item){
+ if( count($item['dhcprange']) > 1 ){
+ foreach ($item['dhcprange'] as $item2 ){
+ if ( intersect_ipranges($delipitem,$item2) != false ){
+ $cpools_todo[] = array('dn'=> $item['dn'],
+ 'newrange' => intersect_ipranges($newmipb,$item2),
+ 'auDN' => $item['auDN']);
+ }
+ }
+ }
+ elseif ( count($item['dhcprange']) == 1 ){
+ if ( intersect_ipranges($delipitem,$item['dhcprange']) != false ){
+ $cpools_todo[] = array('dn'=> $item['dn'],
+ 'newrange' => intersect_ipranges($newmipb,$item['dhcprange']),
+ 'auDN' => $item['auDN']);
+ }
+ }
+ }
+ }
+ # print_r($cpools_todo);printf("
");
+ */
+
+ $dhcps_todo = array_merge($csubnets_todo,$cpools_todo);
+
+ $objects_to_adjust = array('hostips' => $chosts_todo,
+ 'dhcpranges' => $dhcps_todo);
+ return $objects_to_adjust;
+}
+
+
+?>
\ No newline at end of file
--
cgit v1.2.3-55-g7522