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; } }
function delete_child_domain($oldchilddomain, $assocdom, $childDN, $domDN, $delmodus) { global $ds, $suffix, $domprefix, $domsuffix, $ldapError; #print_r($domDN); echo "<br>"; # dcDNold $dcDNold = "ou=DNS," . $suffix; $dcold_array = explode('.', $oldchilddomain); $dcold_array = array_reverse($dcold_array); foreach ($dcold_array as $dc) { $dcDNold = "dc=" . $dc . "," . $dcDNold; } #print_r($dcDNold); echo "<br>"; # dcDNnew = domDN if ($delmodus == "integrate") { # associatedNames zu neuem dc-Knoten hinzufügen $assocnames = get_dc_data($dcDNold, array("associatedname")); # funkt nicht bei uni-freiburg.de # echo "<br>"; print_r($assocnames); echo "<br>"; if (count($assocnames['associatedname']) > 1) { foreach ($assocnames['associatedname'] as $aname) { #print_r($aname); echo "<br>"; $entryAN['associatedname'][] = $aname; } } else { $entryAN['associatedname'] = $assocnames['associatedname']; $assocname = $assocnames['associatedname']; $assocnames['associatedname'] = array($assocname); } #print_r($entryAN); echo "<br>"; $resultAN = ldap_mod_add($ds, $domDN, $entryAN); if ($resultAN) { # DNS Einträge verschieben und an neue Domain anpassen $zone_entries = get_zone_entries($dcDNold, array("dn", "relativedomainname")); #echo "<br>"; print_r($zone_entries); echo "<br>"; if (count($zone_entries) >= 1) { foreach ($zone_entries as $ze) { #print_r($ze['relativedomainname']); echo "<br>"; #print_r($domDN); echo "<br>"; move_subtree($ze['dn'], "relativedomainname=" . $ze['relativedomainname'] . "," . $domDN); $entryZE['zonename'] = $assocdom; print_r($entryZE); echo "<br>"; $resultZE = ldap_mod_replace($ds, "relativedomainname=" . $ze['relativedomainname'] . "," . $domDN, $entryZE); } } # Rollenmembers kopieren für jeden associatedName (ohne Duplikate zu generieren) $newdom_roles = get_roles_dns($domDN); #print_r($newdom_roles); echo "<br>"; if (count($newdom_roles['MainAdmin']) != 0) { $newmainadmins = $newdom_roles['MainAdmin']; } else { $newmainadmins = array(); } if (count($newdom_roles['HostAdmin']) != 0) { $newhostadmins = $newdom_roles['HostAdmin']; } else { $newhostadmins = array(); } if (count($newdom_roles['ZoneAdmin']) != 0) { $newzoneadmins = $newdom_roles['ZoneAdmin']; } else { $newzoneadmins = array(); } #print_r($newmainadmins); echo "<br>"; #print_r($newhostadmins); echo "<br>"; #print_r($newzoneadmins); echo "<br><br>"; foreach ($assocnames['associatedname'] as $aname) { #echo "_________________________________________<br>"; #print_r($aname); echo "<br>"; $roles = get_roles($aname); #print_r($roles); echo "<br>"; $mainadmins = $roles['MainAdmin']; #print_r($mainadmins); echo "<br>"; #print_r($newmainadmins); echo "<br>"; $mainadmins = array_diff($mainadmins, $newmainadmins); $mainadmins = array_merge($newmainadmins, $mainadmins); #print_r($mainadmins); echo "<br>"; if (count($mainadmins) > 1) { for ($i = 0; $i < count($mainadmins); $i++) { $entryRoleMain['member'][$i] = $mainadmins[$i]; } } else { $entryRoleMain['member'] = $mainadmins[0]; } #print_r($entryRoleMain); echo "<br><br>"; $resultMA = ldap_mod_replace($ds, "cn=MainAdmin,cn=roles," . $domDN, $entryRoleMain); if (count($roles['HostAdmin']) != 0) { $hostadmins = $roles['HostAdmin']; #print_r($hostadmins); echo "<br>"; #print_r($newhostadmins); echo "<br>"; $hostadmins = array_diff($hostadmins, $newhostadmins); $hostadmins = array_merge($newhostadmins, $hostadmins); #print_r($hostadmins); echo "<br>"; if (count($hostadmins) > 1) { for ($i = 0; $i < count($hostadmins); $i++) { $entryRoleHost['member'][$i] = $hostadmins[$i]; } } else { $entryRoleHost['member'] = $hostadmins[0]; } #print_r($entryRoleHost); echo "<br><br>"; $resultHA = ldap_mod_replace($ds, "cn=HostAdmin,cn=roles," . $domDN, $entryRoleHost); } if (count($roles['ZoneAdmin']) != 0) { $zoneadmins = $roles['ZoneAdmin']; #print_r($zoneadmins); echo "<br>"; #print_r($newzoneadmins); echo "<br>"; $zoneadmins = array_diff($zoneadmins, $newzoneadmins); $zoneadmins = array_merge($newzoneadmins, $zoneadmins); #print_r($zoneadmins); echo "<br>"; if (count($zoneadmins) > 1) { for ($i = 0; $i < count($zoneadmins); $i++) { $entryRoleZone['member'][$i] = $zoneadmins[$i]; } } else { $entryRoleZone['member'] = $zoneadmins[0]; } #print_r($entryRoleZone); echo "<br><br>"; $resultZA = ldap_mod_replace($ds, "cn=ZoneAdmin,cn=roles," . $domDN, $entryRoleZone); } # associatedDomain anpassen in allen AUs von $assocnames (alt) $entryAD['associateddomain'] = $assocdom; #print_r($entryAD); echo "<br>"; $resultAD = ldap_mod_replace($ds, $aname, $entryAD); #echo "_________________________________________<br>"; } # Falls alter dc-Knoten noch Subdomains, d.h. dc-Teilbäume hat, diese verschieben mit # rekursivem Anpassen aller Einträge $dcchilds = get_dc_childs($dcDNold, array("dn", "dc")); #echo "<br><br>"; print_r($dcchilds); echo "<br>"; if (count($dcchilds) != 0) { foreach ($dcchilds as $dcc) { print_r($dcc['dn']); echo " >> "; print_r("dc=" . $dcc['dc'] . "," . $domDN); echo "<br>"; if (move_subtree($dcc['dn'], "dc=" . $dcc['dc'] . "," . $domDN)) { $newdom = $dcc['dc'] . "." . $assocdom; #print_r($newdom); echo "<br><br>"; dive_into_dctree_adapt("dc=" . $dcc['dc'] . "," . $domDN, $newdom); } } } # alten dc-Knoten entfernen dive_into_tree_del($dcDNold, ""); # fixme: fehlt noch löschen der INCLUDE-Direktive in der parentdomain } else { return 0; } } if ($delmodus == "complete") { # if (dive_into_tree_del($dcDNold,"")){ $delentry['objectclass'] = "domainrelatedobject"; $delentry['associateddomain'] = $oldchilddomain . "." . $domsuffix; print_r($delentry); echo "<br>"; # $delresult = ldap_mod_del($ds,$childDN,$delentry); # if ($delresult){ # $mesg = "Domain komplett gelöscht<br>"; # }else{$mesg = "Fehler! ldap_mod_del<br>";} # }else{$mesg = "Fehler! dive_into_tree_del<br>";} } # return $mesg; }
function change_mc_timerange($mcDN, $newmcDN, $mctimerange) { global $ds, $suffix, $auDN, $ldapError; # move tree if (move_subtree($mcDN, $newmcDN)) { # timerange ändern $entrymc['timerange'] = $mctimerange; if (ldap_mod_replace($ds, $newmcDN, $entrymc)) { return 1; } else { return 0; } } else { return 0; } }
function modify_me_dn($meDN, $newmeDN) { global $ds, $suffix, $ldapError; if (move_subtree($meDN, $newmeDN)) { return 1; } else { return 0; } }
$entry_del = array(); ############################################## # RBS CN => DN => Objekt Move if ($oldrbscn != "" && $rbscn != "" && $oldrbscn != $rbscn) { $mesg .= "RBS Name aendern<br>"; # hier noch Syntaxcheck # Formulareingaben anpassen $exprbs = explode(" ", $rbscn); foreach ($exprbs as $word) { $expuc[] = ucfirst($word); } $rbscn = implode(" ", $expuc); $rbscn = preg_replace('/\\s+([0-9A-Z])/', '$1', $rbscn); $newrbsDN = "cn=" . $rbscn . "," . $nodeDN; // print_r($newrbsDN); echo "<br><br>"; if (move_subtree($rbsDN, $newrbsDN)) { adjust_rbs_dn($newrbsDN, $rbsDN); $rbsDN = $newrbsDN; $url = "rbservice.php?rbsdn=" . $newrbsDN . "&mnr=" . $mnr; $mesg .= "RBS Name erfolgreich geändert<br><br>"; } else { $mesg .= "Fehler beim ä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öschen<br><br>"; echo "Wollen Sie den RBS Dienst <b>" . $oldrbscn . "</b> wirklich lö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ö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ück' class='small_loginform_button'>\n\t\t\t</form>"; $seconds = 600; } ##################################################### # TFTP Server IP (nur aus eigenen Max-IP-Blocks)
if (count($hosts) != 0) { foreach ($hosts as $host) { $exp = explode('_', $host); $hostDN = $exp[0]; $hostname = $exp[1]; print_r($hostDN); echo "<br>"; print_r($hostname); echo "<br><br>"; # IP Adresse nicht verschieben (IPs werden später delegiert) $hoip = get_node_data($hostDN, array("ipaddress")); # print_r($hoip); echo "<br>"; if ($hoip['ipaddress'] != "") { delete_ip_host($hostDN, $auDN); } if (move_subtree($hostDN, "hostname=" . $hostname . ",cn=computers," . $childDN)) { # bestimmte Attribute loeschen ... $newhostDN = "hostname=" . $hostname . ",cn=computers," . $childDN; $dhcp = get_node_data($newhostDN, array("dhcphlpcont")); # print_r($dhcp); echo "<br>"; if ($dhcp['dhcphlpcont'] != "") { $entrydel['dhcphlpcont'] = array(); #$entrydel ['objectclass'] = "dhcpHost"; # print_r($dhcphlpcont); ldap_mod_del($ds, "hostname=" . $hostname . ",cn=computers," . $childDN, $entrydel); } } } } # Domain anlegen falls erforderlich /*if ($childdomain) {
adjust_dhcpservice_dn($dhcpdn, $changedhcpdn); } if ($oldcn != "" && $cn != "" && $oldcn != $cn) { echo "DHCP Service Name aendern<br>"; # hier noch Syntaxcheck # Formulareingaben anpassen $exp = explode(" ", $cn); foreach ($exp as $word) { $expuc[] = ucfirst($word); } $cn = implode(" ", $expuc); $cn = preg_replace('/\\s+([0-9A-Z])/', '$1', $cn); $newdhcpDN = "cn=" . $cn . "," . $nodeDN; print_r($newdhcpDN); echo "<br><br>"; if (move_subtree($dhcpDN, $newdhcpDN)) { adjust_dhcpservice_dn($newdhcpDN, $dhcpDN); $dhcpDN = $newdhcpDN; $mesg = "DHCP Service Name erfolgreich geändert<br><br>"; } else { $mesg = "Fehler beim ändern des DHCP Service Namen!<br><br>"; } } if ($oldcn != "" && $cn == "") { echo "DHCP Service Name loeschen!<br> \n\t\t\tDieser ist Teil des DN, Sie werden den DHCP Service komplett löschen<br><br>"; echo "Wollen Sie den DHCP Service <b>" . $oldcn . "</b> wirklich löschen?<br><br>\n\t\t\t<form action='dhcpservice_delete.php' method='post'>\n\t\t\t\tFalls ja:<br><br>\n\t\t\t\t<input type='hidden' name='dn' value='" . $dhcpDN . "'>\n\t\t\t\t<input type='hidden' name='name' value='" . $oldcn . "'>\n\t\t\t\t<input type='Submit' name='apply' value='lö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ück' class='small_loginform_button'>\n\t\t\t</form>"; $seconds = 600; } ############################# # Permitted Pool Clients /*if ( $pcl != $oldpcl ) {
# $mesg = "keine Aenderung<br>"; } if ($oldgbmcn != "" && $gbmcn != "" && $oldgbmcn != $gbmcn) { echo "Name Generisches Boot Menü aendern<br>"; # hier noch Syntaxcheck # Formulareingaben anpassen $expgbm = explode(" ", $gbmcn); foreach ($expgbm as $word) { $expuc[] = ucfirst($word); } $gbmcn = implode(" ", $expuc); $gbmcn = preg_replace('/\\s+([0-9A-Z])/', '$1', $gbmcn); $newgbmDN = "cn=" . $gbmcn . "," . $rbsDN; print_r($newgbmDN); echo "<br><br>"; if (move_subtree($gbmDN, $newgbmDN)) { adjust_gbm_dn($newgbmDN, $gbmDN); $mesg = "Name Generisches Bootmenü erfolgreich geändert<br><br>"; $gbmDN = $newgbmDN; } else { $mesg = "Fehler beim ändern des Namen des Generischen Bootmenüs!<br><br>"; } # newsubmenu holen... $url = "gbm.php?dn=" . $newgbmDN . "&mnr=" . $mnr . "&sbmnr=" . $sbmnr; } if ($oldgbmcn != "" && $gbmcn == "") { echo "Name Generisches Bootmenü loeschen!<br> \n\t\t\tDieses ist Teil des DN, Sie werden des Generische Boot Menü komplett löschen<br><br>"; echo "Wollen Sie das Generische Boot Menü <b>" . $oldgbmcn . "</b> wirklich löschen?<br><br>\n\t\t\t<form action='gbm_delete.php' method='post'>\n\t\t\t\tFalls ja:<br><br>\n\t\t\t\t<input type='hidden' name='dn' value='" . $gbmDN . "'>\n\t\t\t\t<input type='hidden' name='name' value='" . $oldgbmcn . "'>\n\t\t\t\t<input type='Submit' name='apply' value='lö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ück' class='small_loginform_button'>\n\t\t\t</form>"; $seconds = 600; } ###################################