$dhcpchange = 1;
                }
            } else {
                #$mesg = "Fehler beim aendern der IP Adresse<br>";
                # oldip die schon gelöscht wurde wieder einfügen
                new_ip_host($oldipp, $hostDN[$i], $auDN);
            }
        } else {
            echo "falsche IP Syntax";
        }
        echo "<br>";
    } elseif ($oldip[$i] != "" && $newip[$i] == "") {
        echo "IP <b>{$oldip[$i]}</b> l&ouml;schen <br>";
        $newip[$i] = htmlentities($newip[$i]);
        $oldip[$i] = htmlentities($oldip[$i]);
        if (delete_ip_host($hostDN[$i], $auDN)) {
            #$mesg = "IP Adresse geloescht<br>";
            adjust_hostip_tftpserverip($oldip[$i], "");
            if ($dhcp[$i]) {
                $dhcpchange = 1;
            }
        }
        #else{$mesg = "Fehler beim loeschen der IP Adresse<br>";}
        echo "<br>";
    }
}
echo "</td><td width='33%' class='tab_d'>";
# DHCP
echo "<br><b>DHCP Dienst:</b> <br><br>";
for ($j = 0; $j < count($dhcp); $j++) {
    $entryadd = array();
                $dhcpchange = 1;
            }
            // 			# falls Host ein RBS_Server ist
            // 		   adjust_hostip_tftpserverip($oldip,$ip);
        } else {
            $mesg .= "Fehler beim aendern der IP<br><br>";
            # oldip die schon gelöscht wurde wieder einfügen
            new_ip_host($oldipp, $hostDN, $auDN);
        }
    } else {
        $mesg .= "Falsche IP Syntax<br><br>";
    }
}
if ($oldip != "" && $ip == "") {
    # IP loeschen
    if (delete_ip_host($hostDN, $auDN)) {
        $mesg .= "IP erfolgreich geloescht<br><br>";
        if ($olddhcp || $dhcp) {
            $dhcpchange = 1;
        }
        if ($fixedaddress != "") {
            $fixedaddress = "";
        }
        # falls Host ein RBS_Server ist
        adjust_hostip_tftpserverip($oldip, "");
    } else {
        $mesg .= "Fehler beim loeschen der IP<br><br>";
    }
}
#####################################
# MAC Adresse
/**
* 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("<br><br>");
    # 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("<br><br>");
    ######################
    # 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("<br><br>");
    if (count($del_objects['hostips']) != 0) {
        printf("<br>Host IP Addresses that will be deleted: <br>");
        foreach ($del_objects['hostips'] as $item) {
            printf("HostDN: %s &nbsp;&nbsp; IP Address: %s <br>", $item['dn'], $item['ip']);
        }
    }
    if (count($del_objects['dhcpranges']) != 0) {
        printf("<br>Subnet IP Ranges that will be adjusted: <br>");
        foreach ($del_objects['dhcpranges'] as $item) {
            printf("DhcpObjectDN: %s &nbsp;&nbsp; New IP Range: %s <br>", $item['dn'], $item['newrange']);
        }
    }
    # momentan wird einfach geloescht:
    if (count($del_objects['hostips']) != 0) {
        foreach ($del_objects['hostips'] as $item) {
            delete_ip_host($item['dn'], $item['auDN']);
        }
    }
    if (count($del_objects['dhcpranges']) != 0) {
        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("<br><br>");
    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("<br><br>");
    for ($i = 0; $i < count($mipb_array); $i++) {
        if ($mipb_array[$i] == false) {
            array_splice($mipb_array, $i, 1);
        }
    }
    #print_r($mipb_array);printf("<br><br>");
    if (count($mipb_array) == 0) {
        $entry['MaxIPBlock'] = array();
        #print_r($entry);printf("<br><br>");
        $results = ldap_mod_del($ds, $childauDN, $entry);
    } else {
        foreach ($mipb_array as $item) {
            $entry['MaxIPBlock'][] = $item;
        }
        #print_r($entry);printf("<br><br>");
        $results = ldap_mod_replace($ds, $childauDN, $entry);
    }
    if ($results) {
        echo "<br>MIPBs in Child-AU erfolgreich aktualisiert!<br>";
        # in Child-AU: FIPBs anpassen
        $fipb_array = get_freeipblocks_au($childauDN);
        #print_r($fipb_array);printf("<br><br>");
        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("<br><br>");
        for ($i = 0; $i < count($fipb_array); $i++) {
            if ($fipb_array[$i] == false) {
                array_splice($fipb_array, $i, 1);
            }
        }
        #print_r($fipb_array);printf("<br><br>");
        if (count($fipb_array) == 0) {
            $entry1['FreeIPBlock'] = array();
            #print_r($entry1);printf("<br><br>");
            $results = ldap_mod_del($ds, $childauDN, $entry1);
        } else {
            foreach ($fipb_array as $item) {
                $entry1['FreeIPBlock'][] = $item;
            }
            #print_r($entry1);printf("<br><br>");
            $results = ldap_mod_replace($ds, $childauDN, $entry1);
        }
        if ($results) {
            echo "FIPBs in Child-AU erfolgreich aktualisiert!<br>";
            # in AU: Geloeschte IP Bereiche als neue FIPBs aufnehmen
            foreach ($delip as $item) {
                $entry2['FreeIPBlock'][] = $item;
            }
            #print_r($entry2);printf("<br><br>");
            $results = ldap_mod_add($ds, $auDN, $entry2);
            if ($results) {
                echo "FIPBs in AU erfolgreich aktualisiert!<br>";
                # IP Bloecke aufraeumen in Child-AU und AU (Merging)
                merge_ipranges($auDN);
                merge_ipranges($childauDN);
                return 1;
            } else {
                echo "Fehler beim aktualisieren der FIPBs in AU!<br>";
                return 0;
            }
        } else {
            echo "Fehler beim aktualisieren der FIPBs in Child-AU!<br>";
            return 0;
        }
    } else {
        echo "<br>Fehler beim aktualisieren der MIPBs in Child-AU!<br>";
        return 0;
    }
}
function delete_host($hostDN)
{
    global $ds, $suffix, $auDN, $ldapError;
    $hostdata = get_node_data($hostDN, array("hwaddress", "ipaddress"));
    # IP Adresse freigeben
    if ($hostdata['ipaddress'] != "") {
        delete_ip_host($hostDN, $auDN);
    }
    if (dive_into_tree_del($hostDN, "")) {
        # alle DN Objekte in denen Rechner stand ebenfalls löschen
        # Member in Groups
        $groups = get_groups_member($auDN, array("dn", "cn"), $hostDN);
        # echo "Rechner aus den Gruppen entfernen: <br>"; print_r($groups); echo "<br>";
        if (count($groups) != 0) {
            $entrydel['member'] = $hostDN;
            foreach ($groups as $group) {
                echo "Entferne gel&ouml;schten Rechner aus Gruppe <b>" . $group['cn'] . "</b> <br>";
                $resultG = ldap_mod_del($ds, $group['dn'], $entrydel);
                # Filename in Gruppen-PXEs
                $pxes = get_pxeconfigs($group['dn'], array("dn", "cn"));
                if (count($pxes) != 0 && $hostdata['hwaddress'] != "") {
                    foreach ($pxes as $pxe) {
                        $delfilename['filename'] = "01-" . $hostdata['hwaddress'];
                        $resultP = ldap_mod_del($ds, $pxe['dn'], $delfilename);
                        echo "Entferne MAC des gel&ouml;schten Rechners aus Gruppen-PXE <b>" . $pxe['cn'] . "</b> <br>";
                    }
                }
            }
        }
        # DHCP, DNS, RBS Server ... noch todo
        # ...
        return 1;
    } else {
        return 0;
    }
}