function check_tftpip_in_mipb($tftpserverip) { global $ds, $suffix, $auDN, $rootAU, $ldapError; // echo " $auDN == $rootAU <br><br>"; if ($auDN == $rootAU) { return 1; } else { $mipb_array = get_maxipblocks_au($auDN); if ($mipb_array[0] != "") { $new_tftpip = $tftpserverip . '_' . $tftpserverip; for ($i = 0; $i < count($mipb_array); $i++) { if (split_iprange($new_tftpip, $mipb_array[$i]) != 0) { return 1; break; } } } } return 0; }
if ($modresult = ldap_mod_replace($ds, $pooldn, $modentry)) { $new_fipbs = array(); #if (count($diffrange > 1) { foreach ($diffrange as $dr) { $new_fipbs['freeipblock'][] = $dr; } $result = ldap_mod_add($ds, $poolaudn, $new_fipbs); merge_ipranges($poolaudn); printf("IP Range erfolgreich verkleinert auf {$range1} - {$range2}"); } else { printf("Fehler beim Löschen von "); print_r($delentry); } } elseif (($nr1 < $or1 || $nr2 > $or2) && !($nr1 > $or1 || $nr2 < $or2)) { # Range vergrößern $expandrange_array = split_iprange($oldrange, $range); printf("vergroessern - addrange: "); print_r($expandrange_array); echo "<br>"; foreach ($expandrange_array as $addrange) { $result = add_dhcprange($addrange, $pooldn); if ($result) { $dhcpchange = 1; printf("Dynamische IP Range erfolgreich auf %s - %s erweitert!<br>", $range1, $range2); } else { echo "<br>Fehler beim erweitern der dynamischen DHCP Pools!<br>"; } } } } else { printf("Neue IP Range nicht korrekt: %s sollte kleiner sein als %s<br>", $range1[$i], $range2[$i]);
/** * 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; } }
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ä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($auDN); echo "<br>FIPBs erfolgreich angepasst!<br>"; return 1; } else { echo "<br>Fehler beim Anpassen der FIPBs!<br>"; } } else { echo "<br>Fehler beim ändern des Subnet Namens (IP)!<br>"; } } else { printf("<br>Neues Subnet %s nicht im verfuegbaren IP Bereich!<br>", $newcn[0]); return 0; } }
print_r($newrange2[$i]); echo "</b><br>"; if ($syntax->check_ip_syntax($newrange1[$i]) && $syntax->check_ip_syntax($newrange2[$i])) { #echo "korrekte IP Syntax<br>"; $newrange1[$i] = htmlentities($newrange1[$i]); $newrange2[$i] = htmlentities($newrange2[$i]); $newrange_array = array($newrange1[$i], $newrange2[$i]); $newrange = implode('_', $newrange_array); #print_r($newrange); $oldrange1[$i] = htmlentities($oldrange1[$i]); $oldrange2[$i] = htmlentities($oldrange2[$i]); $oldip_array = array($oldrange1[$i], $oldrange2[$i]); $oldrange = implode('_', $oldip_array); #print_r($oldrange); # DNS Lookup Test für neue IPs $diffrange = split_iprange($oldrange, $newrange); # expand momentan nur für das erste element aus Diffrange-Array #print_r($diffrange); $drexp = explode("_", $diffrange[0]); #if ( check_iprange_zone($drexp[0],$drexp[1],$childzone,$childau) ){ if (expand_ip_delegation($oldrange, $newrange, $childauDN, $auDN)) { $mesg = "<br>IP Range erweitert<br>"; } else { $mesg = "<br>Fehler beim erweitern der IP Range<br>"; } #}else{ # echo "IP Bereich <b>$drexp[0] - $drexp[1]</b> konnte nicht an <b>$childau</b> delegiert werden<br>"; #} } else { echo "falsche IP Syntax<br>"; }
} else { printf("falsche IP Syntax der neuen Range %s - %s<br>", $range1[$i], $range2[$i]); } } elseif (($nr1 < $or1 || $nr2 > $or2) && !($nr1 > $or1 || $nr2 < $or2)) { if ($syntax->check_ip_syntax($range1[$i]) && $syntax->check_ip_syntax($range2[$i])) { # Range vergrößern $addrange = split_iprange($oldrange, $range); echo "addrange: "; print_r($addrange); echo "<br>"; $mod_dhcpranges[$rangepooldn[$i]] = $poolranges[$rangepooldn[$i]]; foreach ($addrange as $ar) { $test = 0; for ($c = 0; $c < count($new_fipbs['freeipblock']); $c++) { if (split_iprange($ar, $new_fipbs['freeipblock'][$c]) != 0) { $ipranges = split_iprange($ar, $new_fipbs['freeipblock'][$c]); array_splice($new_fipbs['freeipblock'], $c, 1, $ipranges); $test = 1; break; } } if ($test) { $poolranges[$rangepooldn[$i]][] = $ar; $mod_dhcpranges[$rangepooldn[$i]][] = $ar; # Subnet-AU auf DHCP-Modify setzen $au_to_update[] = $subnetau[$i]; } } } else { printf("falsche IP Syntax der neuen Range %s - %s<br>", $range1[$i], $range2[$i]); }
$subnetdn = $result[0]['dn']; $subnetau = get_audn_of_objectdn($subnetdn); $subnet_data = get_node_data($subnetdn, array("dhcpoptdomain-name")); if ($subnet_data['dhcpoptdomain-name'] != $assocdom) { $poolopt_domain = $assocdom; echo "Pool spezifische Option <b>domain-name</b> auf <b>" . $assocdom . "</b> gesetzt<br>"; } # Range zusammenstellen $range = implode("_", array($range1, $range2)); # Freie IP Bereiche testen $ipmatch = 0; $fipb_array = get_freeipblocks_au($auDN); #echo "<br>FIPB: <br>";print_r($fipb_array);echo "<br>"; for ($i = 0; $i < count($fipb_array); $i++) { if (split_iprange($range, $fipb_array[$i]) != 0) { $ipranges = split_iprange($range, $fipb_array[$i]); array_splice($fipb_array, $i, 1, $ipranges); $ipmatch = 1; break; } } #echo "<br>FIPB: <br>";print_r($fipb_array);echo "<br>"; if ($ipmatch) { if ($fipb_array) { foreach ($fipb_array as $item) { $entry['FreeIPBlock'][] = $item; } } else { $entry['FreeIPBlock'] = array(); } # poolaudn .vs. auDN