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&ouml;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&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($auDN);
                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;
    }
}
 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]);
     }
Ejemplo n.º 7
0
 $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