<?php
include('../standard_header.inc.php');
$pxecn = "PXE_".$_POST['pxecn'];
$pxeday = $_POST['pxeday'];
$pxebeg = $_POST['pxebeg'];
$pxeend = $_POST['pxeend'];
foreach (array_keys($pxeday) as $key){
$pxeday[$key] = htmlentities($pxeday[$key]);
}
foreach (array_keys($pxebeg) as $key){
$pxebeg[$key] = htmlentities($pxebeg[$key]);
}
foreach (array_keys($pxeend) as $key){
$pxeend[$key] = htmlentities($pxeend[$key]);
}
$deltr = $_POST['deltr'];
$newpxeday = $_POST['newpxeday']; $newpxeday = htmlentities($newpxeday);
$newpxebeg = $_POST['newpxebeg']; $newpxebeg = htmlentities($newpxebeg);
$newpxeend = $_POST['newpxeend']; $newpxeend = htmlentities($newpxeend);
$oldpxeday = $_POST['oldpxeday'];
$oldpxebeg = $_POST['oldpxebeg'];
$oldpxeend = $_POST['oldpxeend'];
$pxeDN = $_POST['pxedn'];
$oldpxecn = "PXE_".$_POST['oldpxecn'];
$rbs = $_POST['rbs'];
$filename = $_POST['filename'];
if (count($filename) != 0){
foreach (array_keys($filename) as $key){
$file[$key] = htmlentities($filename[$key]);
}
}
$oldfilename = $_POST['oldfilename'];
if (count($oldfilename) != 0){
foreach (array_keys($oldfilename) as $key){
$oldfile[$key] = htmlentities($oldfilename[$key]);
}
}
$newfilename = $_POST['newfilename']; $newfilename = htmlentities($newfilename);
$nodeDN = $_POST['nodedn'];
$mnr = $_POST['mnr'];
$sbmnr = $_POST['sbmnr'];
$mcnr = $_POST['mcnr'];
# sonstige Attribute
$attribs = $_POST['attribs'];
if (count($attribs) != 0){
foreach (array_keys($attribs) as $key){
$atts[$key] = htmlentities($attribs[$key]);
}
}
#print_r($atts); echo "<br><br>";
$oldattribs = $_POST['oldattribs'];
if (count($oldattribs) != 0){
foreach (array_keys($oldattribs) as $key){
$oldatts[$key] = htmlentities($oldattribs[$key]);
}
}
#print_r($oldatts); echo "<br><br>";
$seconds = 2;
$url = "pxe.php?dn=".$pxeDN."&mnr=".$mnr."&sbmnr=".$sbmnr."&mcnr=".$mcnr;
echo "
<html>
<head>
<title>Computers Management</title>
<link rel='stylesheet' href='../styles.css' type='text/css'>
</head>
<body>
<table border='0' cellpadding='30' cellspacing='0'>
<tr><td>";
##############################################
# PXE CN (DN)
if ( $oldpxecn == $pxecn ){
# $mesg = "keine Aenderung<br>";
}
if ( $oldpxecn != "" && $pxecn != "" && $oldpxecn != $pxecn ){
echo "PXE Name aendern<br>";
# hier noch Syntaxcheck
# Formulareingaben anpassen
$exppxe = explode(" ",$pxecn);
foreach ($exppxe as $word){$expuc[] = ucfirst($word);}
$pxecn = implode(" ",$expuc);
$pxecn = preg_replace ( '/\s+([0-9A-Z])/', '$1', $pxecn);
$newpxeDN = "cn=".$pxecn.",".$nodeDN;
print_r($newpxeDN); echo "<br><br>";
if(modify_pxe_dn($pxeDN, $newpxeDN)){
$mesg = "PXE Name erfolgreich geändert<br><br>";
$pxeDN = $newpxeDN;
}else{
$mesg = "Fehler beim ändern des PXE Namen!<br><br>";
}
# newsubmenu holen...
$url = "pxe.php?dn=".$newpxeDN."&mnr=".$mnr."&sbmnr=".$sbmnr."&mcnr=".$mcnr;
}
if ( $oldpxecn != "" && $pxecn == "" ){
echo "PXE Name loeschen!<br>
Dieses ist Teil des DN, Sie werden das PXE Boot Menü komplett löschen<br><br>";
echo "Wollen Sie das PXE Boot Menü <b>".$oldpxecn."</b> wirklich löschen?<br><br>
<form action='pxe_delete.php' method='post'>
Falls ja:<br><br>
<input type='hidden' name='dn' value='".$pxeDN."'>
<input type='hidden' name='name' value='".$oldpxecn."'>
<input type='Submit' name='apply' value='löschen' class='small_loginform_button'><br><br>
</form>
<form action='".$url."' method='post'>
Falls, nein:<br><br>
<input type='Submit' name='apply' value='zurück' class='small_loginform_button'>
</form>";
$seconds = 600;
}
##########################################
# Remote Boot Dienst
if ($rbs != "none"){
$exp = explode(',',$rbs);
$exprbscn = explode('=',$exp[0]);
$rbscn = $exprbscn[1];
$exprbsau = explode('=',$exp[2]);
$rbsau = $exprbsau[1];
$entryrbs ['rbservicedn'] = $rbs;
if ($result = ldap_mod_replace($ds,$pxeDN,$entryrbs)){
$mesg = "Remote Boot Service erfolgreich zu <b>".$rbscn."[Abt.: ".$rbsau."]</b> geändert<br><br>";
}else{
$mesg = "Fehler beim ändern des Remote Boot Services zu <b>".$rbscn."</b>!<br><br>";
}
}
##########################################
# bereits vorhandene TimeRange(s) bearbeiten
$entrymodtr = array();
$modtr = 0;
# TimeRanges zusammensetzen
# $t = 0; # Laufvariable für $entrymodtr, da nicht jede Timerange ok sein muss
for ($i=0; $i<count($pxeday); $i++){
$oldpxetimerange = $oldpxeday[$i]."_".$oldpxebeg[$i]."_".$oldpxeend[$i];
if ( ($pxebeg[$i] <= $pxeend[$i]) && ( ($pxeday[$i] != $oldpxeday[$i] && $pxeday[$i] != "") || ($pxebeg[$i] != $oldpxebeg[$i] && $pxebeg[$i] != "") || ($pxeend[$i] != $oldpxeend[$i] && $pxeend[$i] != "")) ){
# TimeRange Syntax checken
$syntax = new Syntaxcheck;
if ($syntax->check_timerange_syntax($pxeday[$i],$pxebeg[$i],$pxeend[$i])){
# in Grossbuchstaben
if (preg_match("/([a-z]+)/",$pxeday[$i])){$pxeday[$i] = strtoupper($pxeday[$i]);}
if (preg_match("/([a-z]+)/",$pxebeg[$i])){$pxebeg[$i] = strtoupper($pxebeg[$i]);}
if (preg_match("/([a-z]+)/",$pxeend[$i])){$pxeend[$i] = strtoupper($pxeend[$i]);}
# führende Nullen weg
$pxebeg[$i] = preg_replace ( '/0([0-9])/', '$1', $pxebeg[$i]);
$pxeend[$i] = preg_replace ( '/0([0-9])/', '$1', $pxeend[$i]);
# TimeRange auf Überschneidung mit vorhandenen checken außer mit eigener alter TR da diese
# ja geändert werden soll
if(check_timerange_pxe($pxeday[$i],$pxebeg[$i],$pxeend[$i],$nodeDN,$oldpxetimerange)){
$pxetimerange = $pxeday[$i]."_".$pxebeg[$i]."_".$pxeend[$i];
$entrymodtr ['timerange'][$i] = $pxetimerange;
$modtr = 1;
}
else{
$mesg = "Es existiert bereits ein PXE Boot Menü, das sich mit der eingegebenen Time Range
überschneidet!<br>
Bitte geben Sie eine andere Time Range ein.<br><br>";
$entrymodtr ['timerange'][$i] = $oldpxetimerange;
}
}
else{
$mesg = "Falsche Syntax in der Timerange-Eingabe!<br>
Bitte geben Sie die erneut Time Range ein.<br><br>";
$entrymodtr ['timerange'][$i] = $oldpxetimerange;
}
}
elseif ( $pxeday[$i] == "" || $pxebeg[$i] == "" || $pxeend[$i] == "" || $pxebeg[$i] > $pxeend[$i]){
$mesg = "Sie haben die Time Range <b>Nr.".$i."</b> nicht vollständig angegeben. Diese ist aber ein notwendiges Attribut.<br>
Diese Time Range wird nicht bearbeitet.<br><br>";
$entrymodtr ['timerange'][$i] = $oldpxetimerange;
}
else{$entrymodtr ['timerange'][$i] = $oldpxetimerange;}
} # Ende for-Schleife für jede Timerange
# jetzt noch alle gesammelten Änderungen Durchführen ...
if ($modtr == 1){
# erst ändern
echo "Ändern: "; print_r($entrymodtr); echo "<br>";
if($result = ldap_mod_replace($ds,$pxeDN,$entrymodtr)){
$mesg = "TimeRanges erfolgreich geändert<br><br>";
}else{
$mesg = "Fehler beim ändern der TimeRanges!<br><br>";
}
}
if ( count($deltr) != 0 && $modtr == 0 ){
# Time Range löschen
$j = 0;
foreach ($deltr as $delrange){
$entrydeltr ['timerange'][$j] = $delrange;
$j++;
}
# dann löschen
echo "Löschen: "; print_r($entrydeltr); echo "<br>";
if($result = ldap_mod_del($ds,$pxeDN,$entrydeltr)){
$mesg = "TimeRanges erfolgreich gelöscht<br><br>";
}else{
$mesg = "Fehler beim löschen der TimeRanges!<br><br>";
}
}elseif(count($deltr) != 0 && $modtr == 1){
echo "Nur Ändern (gleichzeitig Löschen und Ändern geht nicht)";
}
#####################################
# TimeRange hinzufügen
if ( $newpxeday != "" && $newpxebeg != "" && $newpxeend != "" && $newpxebeg <= $newpxeend ){
# TimeRange Syntax checken
$syntax = new Syntaxcheck;
if ($syntax->check_timerange_syntax($newpxeday,$newpxebeg,$newpxeend)){
# in Grossbuchstaben
if (preg_match("/([a-z]+)/",$newpxeday)){$newpxeday = strtoupper($newpxeday);}
if (preg_match("/([a-z]+)/",$newpxebeg)){$newpxebeg = strtoupper($newpxebeg);}
if (preg_match("/([a-z]+)/",$newpxeend)){$newpxeend = strtoupper($newpxeend);}
# führende Nullen weg
$newpxebeg = preg_replace ( '/0([0-9])/', '$1', $newpxebeg);
$newpxeend = preg_replace ( '/0([0-9])/', '$1', $newpxeend);
# TimeRange auf Überschneidung mit vorhandenen checken
if(check_timerange_pxe($newpxeday,$newpxebeg,$newpxeend,$nodeDN,"")){
$newpxetimerange = $newpxeday."_".$newpxebeg."_".$newpxeend;
$entrytr ['timerange'] = $newpxetimerange;
if($result = ldap_mod_add($ds,$pxeDN,$entrytr)){
$mesg = "Zusätzliche TimeRange erfolgreich eingetragen<br><br>";
}else{
$mesg = "Fehler beim eintragen der zusätzlichen TimeRange!<br><br>";
}
}else{
$mesg = "Es existiert bereits ein PXE Boot Menü, das sich mit der eingegebenen Time Range
überschneidet!<br>
Bitte geben Sie eine andere Time Range ein.<br><br>";
}
}else{
$mesg = "Falsche Syntax in der Timerange-Eingabe!<br>
Bitte geben Sie die erneut Time Range ein.<br><br>";
}
}
#####################################
# PXE Filename(s)
$filemod = array();
$modfi = 0;
$filedel = array();
$delfi = 0;
$j = 0;
if (count($file) != 0){
for ($i=0; $i<count($file); $i++){
if ( $oldfile[$i] == $file[$i] ){
$filemod ['filename'][$i] = $oldfile[$i];
# $mesg = "keine Aenderung<br>";
}
if ( $oldfile[$i] != "" && $file[$i] != "" && $oldfile[$i] != $file[$i] ){
echo "PXE Dateinamen aendern<br>
Vorsicht dies kann eine nicht verwendbare PXE Datei zur Folge haben!<br><br>";
# hier noch Syntaxcheck
$filemod ['filename'][$i] = $file[$i];
$modfi = 1;
}
if ( $oldfile[$i] != "" && $file[$i] == "" ){
echo "PXE Dateinamen loeschen!<br>
Achtung: aus ihren PXE Daten wird keine PXE Datei mehr generiert.<br>
Sie sind solange nicht mehr für den PXE Bootvorgang verwendbar bis Sie einen neuen Dateinamen anlegen!<br><br>";
$filemod ['filename'][$i] = $oldfile[$i];
$filedel ['filename'][$j] = $oldfile[$i];
$j++;
$delfi = 1;
$seconds = 4;
}
}
#erst ändern
if ($modfi == 1){
echo "Ändern: "; print_r($filemod); echo "<br>";
if(ldap_mod_replace($ds,$pxeDN,$filemod)){
$mesg = "PXE Dateiname(n) erfolgreich geändert<br><br>";
}else{
$mesg = "Fehler beim ändern des(r) PXE Dateinamens!<br><br>";
}
$modfi = 0;
}
# dann löschen
if ($delfi == 1){
echo "Löschen: "; print_r($filedel); echo "<br>";
if(ldap_mod_del($ds,$pxeDN,$filedel)){
$mesg = "PXE Dateiname(n) erfolgreich gelöscht<br><br>";
}else{
$mesg = "Fehler beim löschen des PXE Dateinamens !<br><br>";
}
$delfi = 0;
}
}
# PXE Dateiname neu anlegen
if ($newfilename == ""){
}
if ($newfilename != ""){
echo "PXE Dateiname hinzufügen";
$fileadd ['filename'] = $newfilename;
if(ldap_mod_add($ds,$pxeDN,$fileadd)){
$mesg = "PXE Dateiname <b>".$newfilename."</b> erfolgreich angelegt<br><br>";
}else{
$mesg = "Fehler beim anlegen des PXE Dateinamens ".$newfilename." !<br><br>";
}
}
##################################################################
# Restliche Attribute
$entryadd = array();
$entrymod = array();
$entrydel = array();
foreach (array_keys($atts) as $key){
if ( $oldatts[$key] == $atts[$key] ){
}
if ( $oldatts[$key] == "" && $atts[$key] != "" ){
# hier noch Syntaxcheck
$entryadd[$key] = $atts[$key];
}
if ( $oldatts[$key] != "" && $atts[$key] != "" && $oldatts[$key] != $atts[$key] ){
# hier noch Syntaxcheck
$entrymod[$key] = $atts[$key];
}
if ( $oldatts[$key] != "" && $atts[$key] == "" ){
# hier noch Syntaxcheck
$entrydel[$key] = $oldatts[$key];
}
}
#print_r($entryadd); echo "<br>";
#print_r($entrymod); echo "<br>";
#print_r($entrydel); echo "<br>";
if (count($entryadd) != 0 ){
#print_r($entryadd); echo "<br>";
#echo "neu anlegen<br>";
foreach (array_keys($entryadd) as $key){
$addatts .= "<b>".$key."</b>,";
}
if(ldap_mod_add($ds,$pxeDN,$entryadd)){
$mesg = "Attribute ".$addatts." erfolgreich eingetragen<br><br>";
}else{
$mesg = "Fehler beim eintragen der Attribute ".$addatts."<br><br>";
}
}
if (count($entrymod) != 0 ){
#print_r($entrymod); echo "<br>";
#echo "ändern<br>";
foreach (array_keys($entrymod) as $key){
$modatts .= "<b>".$key."</b>,";
}
if(ldap_mod_replace($ds,$pxeDN,$entrymod)){
$mesg = "Attribute ".$modatts." erfolgreich geaendert<br><br>";
}else{
$mesg = "Fehler beim aendern der Attribute ".$modatts."<br><br>";
}
}
if (count($entrydel) != 0 ){
#print_r($entrydel); echo "<br>";
#echo "löschen<br>";
foreach (array_keys($entrydel) as $key){
$delatts .= "<b>".$key."</b>,";
}
if(ldap_mod_del($ds,$pxeDN,$entrydel)){
$mesg = "Attribute ".$delatts." erfolgreich geloescht<br><br>";
}else{
$mesg = "Fehler beim loeschen der Attribute ".$delatts."<br><br>";
}
}
$mesg .= "<br>Sie werden automatisch auf die vorherige Seite zurückgeleitet. <br>
Falls nicht, klicken Sie hier <a href=".$url." style='publink'>back</a>";
redirect($seconds, $url, $mesg, $addSessionId = TRUE);
echo "</td></tr></table></body>
</html>";
?>