From c7b4e4a81d7f38c0f1f927f6804ef281c4f67dcd Mon Sep 17 00:00:00 2001
From: Tarik Gasmi
Date: Tue, 31 Jul 2007 07:29:53 +0000
Subject: Actualized LDAP SiteManagement Code - Web Interface, DHCP
Generationscript
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1284 95ad53e4-c205-0410-b2fa-d234c58c8868
---
.../webinterface/lib/ip_management_functions.php | 214 ++++++++++++++++++++-
1 file changed, 210 insertions(+), 4 deletions(-)
(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
index b4f4a733..b158e35b 100644
--- a/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
+++ b/ldap-site-mngmt/webinterface/lib/ip_management_functions.php
@@ -93,11 +93,12 @@ function split_iprange($iprange1,$iprange2)
if ($ipr3s <= $ipr3e){$iprange3 = long2ip($ipr3s)."_".long2ip($ipr3e); $ipranges[] = $iprange3;}
if ($ipr4s <= $ipr4e){$iprange4 = long2ip($ipr4s)."_".long2ip($ipr4e); $ipranges[] = $iprange4;}
+ #echo "MATCH!
";
return $ipranges;
}
else
{
- echo "IPRange1 not in IPRange2: ";
+ #echo "IPRange1 not in IPRange2: ";
return 0;
}
}
@@ -246,6 +247,86 @@ function get_maxipblocks_au($auDN)
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:
"; print_r($host_ips); echo "
";
+
+ # 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:
"; print_r($dhcps_ips); echo "
";
+
+ # 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:
"; print_r($dhcpr_ips); echo "
";
+
+ # 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:
"; print_r($deleg_ips); echo "
";
+
+ $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)
@@ -316,6 +397,33 @@ function get_dhcp_range($dhcpobjectDN)
}
}
+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)
@@ -349,8 +457,8 @@ function merge_ipranges($auDN)
}
print_r($fipb_array);printf("
");
foreach ( $fipb_array as $item ){
- $entry ['FreeIPBlock'][] = $item;
- }
+ $entry ['FreeIPBlock'][] = $item;
+ }
$results = ldap_mod_replace($ds,$auDN,$entry);
if ($results) echo "
FIPBs erfolgreich zusammengefasst!
" ;
else echo "
Fehler beim eintragen der FIPBs!
";
@@ -376,6 +484,55 @@ function merge_ipranges($auDN)
else echo "
Fehler beim eintragen der MIPBs!
";
}
+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 "
DHCP Ranges erfolgreich zusammengefasst!
" ;
+ else echo "
Fehler beim eintragen der DHCP Ranges!
";
+}
+
+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)
@@ -454,7 +611,7 @@ function new_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
$fipb_array = get_freeipblocks_au($auDN);
- print_r($fipb_array);
+ #print_r($fipb_array);
for ($i=0; $i < count($fipb_array); $i++){
if ( split_iprange($ip,$fipb_array[$i]) != 0 ){
@@ -494,6 +651,55 @@ function new_ip_dhcprange($ip,$dhcpobjectDN,$auDN)
}
}
+## 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 "
Neue FIPBs erfolgreich eingetragen!
";
+ $rangeentry ['dhcprange'] = $newrange;
+ print_r($rangeentry);echo "
";
+ $result2 = ldap_mod_add($ds,$pooldn,$rangeentry);
+ if ($result2){
+ merge_dhcpranges($pooldn);
+ #printf("Neue dynamische IP Range %s - %s erfolgreich in Subnetz %s0 eingetragen!
",$addrange1[$i],$addrange2[$i],$net);
+ return 1;
+ }else{
+ # echo "
Fehler beim eintragen des dynamischen DHCP Pools!
";
+ # Range wieder in FIPBs aufnehmen.
+ $entry2 ['FreeIPBlock'] = $newrange;
+ ldap_mod_add($ds,$auDN,$entry2);
+ merge_ipranges($auDN);
+ return 0;
+ }
+ }else{
+ echo "
Fehler beim eintragen der FIPBs!
";
+ return 0;
+ }
+ }else{
+ printf("
IP Range %s ist nicht im verfuegbaren Bereich!
", $range );
+ return 0;
+ }
+}
+
+
/**
* delete_ip_host($hostDN,$auDN)
* Löscht die IP Adresse eines Hosts, und passt die FreeIPBlocks der AU an.
--
cgit v1.2.3-55-g7522