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;
    }
}
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&ouml;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&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)
Ejemplo n.º 6
0
 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&auml;ndert<br><br>";
    } else {
        $mesg = "Fehler beim &auml;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&ouml;schen<br><br>";
    echo "Wollen Sie den DHCP Service <b>" . $oldcn . "</b> wirklich l&ouml;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&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;
}
#############################
# Permitted Pool Clients
/*if ( $pcl != $oldpcl ) {
Ejemplo n.º 8
0
    # $mesg = "keine Aenderung<br>";
}
if ($oldgbmcn != "" && $gbmcn != "" && $oldgbmcn != $gbmcn) {
    echo "Name Generisches Boot Men&uuml; 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&uuml; erfolgreich ge&auml;ndert<br><br>";
        $gbmDN = $newgbmDN;
    } else {
        $mesg = "Fehler beim &auml;ndern des Namen des Generischen Bootmen&uuml;s!<br><br>";
    }
    # newsubmenu holen...
    $url = "gbm.php?dn=" . $newgbmDN . "&mnr=" . $mnr . "&sbmnr=" . $sbmnr;
}
if ($oldgbmcn != "" && $gbmcn == "") {
    echo "Name Generisches Bootmen&uuml; loeschen!<br> \n\t\t\tDieses ist Teil des DN, Sie werden des Generische Boot Men&uuml; komplett l&ouml;schen<br><br>";
    echo "Wollen Sie das Generische Boot Men&uuml; <b>" . $oldgbmcn . "</b> wirklich l&ouml;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&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;
}
###################################