$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ö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 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 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ö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öschten Rechners aus Gruppen-PXE <b>" . $pxe['cn'] . "</b> <br>"; } } } } # DHCP, DNS, RBS Server ... noch todo # ... return 1; } else { return 0; } }