if ($maxlease) {
    $atts['dhcpoptmax-lease-time'] = htmlentities($maxlease);
}
if ($defaultlease) {
    $atts['dhcpoptdefault-lease-time'] = htmlentities($defaultlease);
}
#print_r($atts); echo "<br><br>";
$nodeDN = "cn=dhcp," . $auDN;
$mnr = $_POST['mnr'];
$sbmnr = $_POST['sbmnr'];
$get_dhcpcn = str_replace(" ", "_", $cn);
$seconds = 2;
$url = "new_dhcpsubnet.php?&mnr=2";
echo "\n<html>\n<head>\n\t<title>Computers Management</title>\n\t<link rel='stylesheet' href='../styles.css' type='text/css'>\n</head>\n<body>\n<table border='0' cellpadding='30' cellspacing='0'> \n<tr><td>";
if ($cn != "" && $cn != "Hier_Subnetz_eintragen" && $netmask != "" && $netmask != "Hier_Netzmaske_eintragen") {
    if ($syntax->check_netip_syntax($cn) && $syntax->check_ip_syntax($netmask)) {
        if (add_dhcpsubnet($cn, $dhcpservice, $netmask, $atts)) {
            $mesg .= "<br>DHCP Subnet erfolgreich angelegt<br>";
            $url = "dhcpsubnets.php?mnr=" . $mnr;
        } else {
            $mesg .= "<br>Fehler beim anlegen des DHCP Subnets!<br>";
        }
    } else {
        $mesg .= "Falsche IP Syntax! Geben Sie eine korrekte IP Adresse als Subnet Name oder Netzmaske ein.";
        $url = "new_dhcpsubnet.php?subnetcn=Hier_Subnetz_eintragen&netmask=" . $netmask . "&mnr=" . $mnr;
    }
} elseif ($cn == "" || $cn == "Hier_Subnetz_eintragen" || $netmask == "" || $netmask == "Hier_Netzmaske_eintragen") {
    if ($cn == "") {
        $cn = "Hier_Subnetz_eintragen";
    }
    if ($netmask == "") {
       if ($result1) {
       	$mesg .= "<br>IP Range $oldrange1[$i] - $oldrange2[$i] erfolgreich aus Pool gel&ouml;scht!<br>";
       	$result2 = ldap_mod_add($ds,$poolaudn,$addentry);
       	if ($result2) {
       		merge_ipranges($poolaudn);
       		$mesg .= "<br>geloeschte IP Range erfolgreich als neuer FIPB in die AU eingetragen!<br>";
       		$dhcpchange = 1;
       	}else{
       		$mesg .= "Fehler beim eintragen als neuer FIPB!";
       		ldap_mod_add($ds,$pooldn,$delentry);
       	}
       }else{
       	$mesg .= "Fehler beim l&ouml;schen der Pool IP Range $oldrange1[$i] - $oldrange2[$i]";
       }*/
} elseif ($oldrange1 != "" && $oldrange2 != "" && $range1 != "" && $range2 != "") {
    if ($syntax->check_ip_syntax($range1) && $syntax->check_ip_syntax($range2)) {
        $or1 = ip2long($oldrange1);
        $or2 = ip2long($oldrange2);
        $nr1 = ip2long($range1);
        $nr2 = ip2long($range2);
        if ($nr2 >= $nr1) {
            # korrekte IP Range
            $modentry['dhcpRange'] = $range;
            if (($nr1 > $or1 || $nr2 < $or2) && !($nr1 < $or1 || $nr2 > $or2)) {
                # Range verkleinern
                $diffrange = split_iprange($range, $oldrange);
                echo "<br>verkleinern - diffrange: ";
                print_r($diffrange);
                echo "<br>";
                if ($modresult = ldap_mod_replace($ds, $pooldn, $modentry)) {
                    $new_fipbs = array();
#print_r($olddhcp); echo "<br><br>";
#print_r($newip); echo "<br><br>";
#print_r($oldip); echo "<br><br>";
#print_r($hostDN); echo "<br><br>";
# IP Adressen
echo "<br><b>IP Adressen:</b> <br><br>";
$diff1 = array_keys(array_diff_assoc($oldip, $newip));
$diff2 = array_keys(array_diff_assoc($newip, $oldip));
$tochange = array_unique(array_merge($diff1, $diff2));
#print_r($tochange); echo "<br><br>";
foreach ($tochange as $i) {
    $hostexp = ldap_explode_dn($hostDN[$i], 1);
    echo "<b>{$hostexp['0']}</b> - ";
    if ($oldip[$i] == "" && $newip[$i] != "") {
        echo "IP <b>{$newip[$i]}</b> eintragen <br>";
        if ($syntax->check_ip_syntax($newip[$i])) {
            #echo "korrekte IP Syntax";
            $newip[$i] = htmlentities($newip[$i]);
            $newip_array = array($newip[$i], $newip[$i]);
            #print_r($newip_array);
            $newipp = implode('_', $newip_array);
            #print_r($newipp);
            $oldip[$i] = htmlentities($oldip[$i]);
            if (new_ip_host($newipp, $hostDN[$i], $auDN)) {
                #$mesg = "Neue IP Adresse eingetragen<br>";
                # falls Rechner in DHCP -> fixed-address auf IP Setzen...
                if ($dhcp[$i]) {
                    $entryfa['dhcpoptfixed-address'] = "ip";
                    if ($fixadd) {
                        if (ldap_mod_replace($ds, $hostDN[$i], $entryfa)) {
                            $mesg .= "DHCP Fixed-Address erfolgreich auf IP gesetzt.";
if ($oldhostname != "" && $hostname == "") {
    echo "Hostname l&ouml;schen!<br>>br>\n\t\t\tDies ist Teil des DN, Sie werden den Rechner komplett l&ouml;schen<br><br>";
    echo "Wollen Sie den Rechner <b>" . $oldhostname . "</b> mit seinen Hardware-Profilen (MachineConfigs) \n\t\t\tund PXE Bootmen&uuml;s wirklich l&ouml;schen?<br><br>\n\t\t\t<form action='host_delete.php' method='post'>\n\t\t\t\tFalls ja:<br><br>\n\t\t\t\t<input type='hidden' name='dn' value='" . $hostDN . "'>\n\t\t\t\t<input type='hidden' name='name' value='" . $oldhostname . "'>\n\t\t\t\t<input type='Submit' name='apply' value='l&ouml;schen' class='small_loginform_button'><br><br>\n\t\t\t</form>\n\t\t\t<form action='" . $url . "' method='post'>\n\t\t\t\tFalls, nein:<br><br>\n\t\t\t\t<input type='Submit' name='apply' value='zur&uuml;ck' class='small_loginform_button'>\n\t\t\t</form>";
    $seconds = 600;
}
#################################################
# IP Adresse, sofort ausgefuehrt, da spezielle
# Funktionen nach IP Aenderungen folgen
if ($oldip == "" && $ip != "") {
    #echo "IP neu anlegen<br>";
    # Wenn DHCP Subnet zu IP nicht existiert dann kein Eintrag DHCP
    if ($network = test_ip_dhcpsubnet($ip)) {
        $mesg .= "<b>Client bereits als dynamisch im DHCP eingetragen.<br>\n\t\t\t\tIP Adresse {$ip} kann nicht gesetzt werden, da kein Subnetz {$network}/24 im DHCP eingetragen ist</b><br><br>";
    } else {
        # Syntaxcheck
        if ($syntax->check_ip_syntax($ip)) {
            $newip_array = array($ip, $ip);
            $newip = implode('_', $newip_array);
            if (new_ip_host($newip, $hostDN, $auDN)) {
                $mesg .= "IP erfolgreich eingetragen<br><br>";
                # Falls Host in DHCP dann Fixed-Address setzen
                if ($olddhcp || $dhcp) {
                    $dhcpchange = 1;
                    if ($fixedaddress != "ip") {
                        $fixedaddress = "ip";
                    }
                }
            } else {
                $mesg .= "Fehler beim eintragen der IP<br><br>";
            }
        } else {
            $mesg = "Fehler beim &auml;ndern des DHCP Subnets!<br><br>";
        }
    } else {
        $mesg = "falsche IP Syntax<br>";
    }
}
if ($oldcn != "" && $cn == "") {
    echo "DHCP Subnet loeschen!<br> \n\t\t\tDieser ist Teil des DN, Sie werden den DHCP Subnet komplett l&ouml;schen<br><br>";
    echo "Wollen Sie den DHCP Subnet <b>" . $oldcn . "</b> wirklich l&ouml;schen?<br><br>\n\t\t\t<form action='dhcpsubnet_delete.php' method='post'>\n\t\t\t\tFalls ja:<br><br>\n\t\t\t\t<input type='hidden' name='dn' value='" . $subnetDN . "'>\n\t\t\t\t<input type='hidden' name='name' value='" . $oldcn . "'>\n\t\t\t\t<input type='Submit' name='apply' value='l&ouml;schen' class='small_loginform_button'><br><br>\n\t\t\t</form>\n\t\t\t<form action='" . $url . "' method='post'>\n\t\t\t\tFalls, nein:<br><br>\n\t\t\t\t<input type='Submit' name='apply' value='zur&uuml;ck' class='small_loginform_button'>\n\t\t\t</form>";
    $seconds = 600;
}
#####################################
# Netmask
if ($netmask != $oldnetmask) {
    if ($netmask) {
        if ($syntax->check_ip_syntax($netmask)) {
            $entry['dhcpoptnetmask'] = $netmask;
            if (ldap_mod_replace($ds, $subnetDN, $entry)) {
                $mesg = "Netzmaske erfolgreich ge&auml;ndert<br><br>";
                $dhcpchange = 1;
            } else {
                $mesg = "Fehler beim &auml;ndern der Netzmaske!<br><br>";
            }
        } else {
            $mesg = "falsche IP Syntax<br>";
        }
    } else {
        echo "Die Subnetzmaske ist ein notwendiges Attribut.<br>\n            Keine &Auml;nderung!<br>";
    }
}
#####################################
$tochange1 = array_unique(array_merge($diff1, $diff2));
$diff3 = array_keys(array_diff_assoc($oldrange2, $newrange2));
$diff4 = array_keys(array_diff_assoc($newrange2, $oldrange2));
$tochange2 = array_unique(array_merge($diff3, $diff4));
# print_r($tochange1);echo "<br><br>";
# print_r($tochange2);echo "<br><br>";
$tochange = array_unique(array_merge($tochange1, $tochange2));
#print_r($tochange);echo "<br><br>";
if ($tochange) {
    foreach ($tochange as $i) {
        if ($oldrange1[$i] == "" && $oldrange2[$i] == "" && $newrange1[$i] != "" && $newrange2[$i] != "") {
            echo "Neuen IP Bereich <b>{$newrange1[$i]} - {$newrange2[$i]}</b> an <b>{$childau}</b> delegieren:";
            echo "<br>";
            echo "<br>";
            #echo "neue IP Range: ";print_r($newrange1[$i]);echo " - ";print_r($newrange2[$i]);echo "<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]);
                # DNS Lookup Test für neue IPs
                #if ( check_iprange_zone($newrange1[$i],$newrange2[$i],$childzone,$childau) ) {
                #echo "bla";
                $newrange_array = array($newrange1[$i], $newrange2[$i]);
                #print_r($newrange_array);
                $newrange = implode('_', $newrange_array);
                #print_r($newrange);
                # $oldip[$i] = htmlentities($oldip[$i]);
                if (new_ip_delegation($newrange, $childauDN, $auDN)) {
                    echo "<br>Neuer IP Bereich erfolgreich delegiert<br>";
                } else {
                    echo "<br>Fehler beim delegieren des neuen IP Bereichs<br>";
function add_host($hostDN, $hostname, $hostdesc, $mac, $ip, $atts, $dhcp)
{
    global $ds, $suffix, $auDN, $assocdom, $ldapError;
    $syntax = new Syntaxcheck();
    $mactest = 0;
    $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 != "") {
        if ($syntax->check_mac_syntax($mac)) {
            $entryhost["hwaddress"] = $mac;
            if ($dhcp != "none" && $dhcp != "") {
                $entryhost["dhcphlpcont"] = $dhcp;
            }
        } else {
            echo "SyntaxCheck MAC Adresse <b>{$mac}</b>:<br>-> " . $syntax->ERROR;
        }
    } else {
        echo "Keine MAC Adresse angelegt. Kein DHCP Eintrag.<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 != "" && $mactest && $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 von 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<br>";
        if ($mac != "" && $mactest && $dhcp != "none" && $dhcp != "") {
            update_dhcpmtime($auDN);
        }
        return 1;
    } else {
        #echo "Fehler beim eintragen des neuen Rechners!<br>";
        return 0;
    }
}
             echo "DHCP Pool erfolgreich aus RBS gel&ouml;scht.<br>";
         }
     } else {
         echo "RBS replace ";
         print_r($oldrbs[$i]);
         echo " with ";
         print_r($entryrbs);
         echo "<br>";
         if ($result = ldap_mod_replace($ds, $pooldn[$i], $entryrbs)) {
             echo "DHCP Pool RBS Einbindung erfolgreich ge&auml;ndert.<br>";
         }
     }
 }
 # Ranges hinzufügen
 if ($addrange1[$i] != "" && $addrange2[$i] != "") {
     if ($syntax->check_ip_syntax($addrange1[$i]) && $syntax->check_ip_syntax($addrange2[$i])) {
         $net = strrev(strchr(strrev($subnet[$i]), "."));
         $add1 = strrev(strchr(strrev($addrange1[$i]), "."));
         $add2 = strrev(strchr(strrev($addrange2[$i]), "."));
         if ($net == $add1 && $net == $add2) {
             printf("Range in Pool %s hinzuf&uuml;gen<br>", $pooldn[$i]);
             # Range zusammenstellen
             $newrange = implode("_", array($addrange1[$i], $addrange2[$i]));
             $result = add_dhcprange($newrange, $pooldn[$i]);
             if ($result) {
                 # Subnet-AU auf DHCP-Modify setzen
                 $au_to_update[] = $subnetau[$i];
                 printf("Neue dynamische IP Range %s - %s erfolgreich in Subnetz %s0 eingetragen!<br>", $addrange1[$i], $addrange2[$i], $net);
             } else {
                 echo "<br>Fehler beim eintragen des dynamischen DHCP Pools!<br>";
             }
        $mesg .= "RBS Name erfolgreich ge&auml;ndert<br><br>";
    } else {
        $mesg .= "Fehler beim &auml;ndern des RBS Namen!<br><br>";
    }
}
if ($oldrbscn != "" && $rbscn == "") {
    echo "Gruppenname loeschen!<br> \n\t\t\tDieses ist Teil des DN, Sie werden den RBS komplett l&ouml;schen<br><br>";
    echo "Wollen Sie den RBS Dienst <b>" . $oldrbscn . "</b> wirklich l&ouml;schen?<br><br>\n\t\t\t<form action='rbservice_delete.php' method='post'>\n\t\t\t\tFalls ja:<br><br>\n\t\t\t\t<input type='hidden' name='dn' value='" . $pxeDN . "'>\n\t\t\t\t<input type='hidden' name='name' value='" . $oldrbscn . "'>\n\t\t\t\t<input type='Submit' name='apply' value='l&ouml;schen' class='small_loginform_button'><br><br>\n\t\t\t</form>\n\t\t\t<form action='" . $url . "' method='post'>\n\t\t\t\tFalls, nein:<br><br>\n\t\t\t\t<input type='Submit' name='apply' value='zur&uuml;ck' class='small_loginform_button'>\n\t\t\t</form>";
    $seconds = 600;
}
#####################################################
# TFTP Server IP (nur aus eigenen Max-IP-Blocks)
if ($tftpserverip != $oldtftpserverip) {
    if ($tftpserverip == "") {
        // 		$entry_del ['tftpserverip'] = array();
    } elseif ($syntax->check_ip_syntax($tftpserverip)) {
        if (check_tftpip_in_mipb($tftpserverip)) {
            if ($oldtftpserverip == "") {
                $entry_add['tftpserverip'] = $tftpserverip;
            } else {
                $entry_replace['tftpserverip'] = $tftpserverip;
            }
        } else {
            $mesg .= "Gew&auml;hlte TFTP Server IP <b>{$tftpserverip}</b> nicht aus dem eigenem IP Bereich!<br> Konnte nicht eingetragen werden.<br><br>";
        }
    }
}
#####################################
# Offer ändern
// if ( $rbsoffer != "none" && $rbsoffer == $oldrbsoffer ){
// 	$mesg = "Sie haben die gleiche Abteilung ausgew&auml;hlt<br>
include '../standard_header.inc.php';
$syntax = new Syntaxcheck();
$ipnet = $_POST['ip'];
#print_r($ipnet);
$childauDN = $_POST['childdn'];
$childzone = $_POST['childzone'];
$only_subnet = $_POST['only_subnet'];
$childaudnexp = ldap_explode_dn($childauDN, 1);
$childau = $childaudnexp[0];
#print_r($childau);
$url = "child_au.php?cau=" . $childau;
$seconds = 2;
echo "\n<html>\n<head>\n\t<title>IP Address Management</title>\n\t<link rel='stylesheet' href='../styles.css' type='text/css'>\n</head>\n<body>\n<table border='0' cellpadding='20' cellspacing='0' width='100%'>\n<tr><td>";
$net = implode(".", $ipnet) . ".0";
if ($syntax->check_ip_syntax($net) && $ipnet[0] != "0") {
    #echo "<b>$net</b><br>";
    if ($only_subnet) {
        $mipb = $net . "_" . $net;
    } else {
        $mipb = $net . "_" . implode(".", $ipnet) . ".255";
    }
    #echo "<b>$mipb</b><br>";
    if (!($ou = check_for_existing_mipbs($mipb))) {
        #echo "Netz <b>$net</b> anlegen ...<br><br>";
        # MIPB und FIPB in ChildAU eintragen
        $childau_entry['MaxIPBlock'] = $mipb;
        $childau_entry['FreeIPBlock'] = $mipb;
        if (ldap_mod_add($ds, $childauDN, $childau_entry)) {
            $seconds = 500;
            if ($only_subnet) {