192 lines
6.1 KiB
PHP
192 lines
6.1 KiB
PHP
<?php
|
|
/*
|
|
* commit.php
|
|
*
|
|
* Copyright 2015 Péter Szládovics <peti@szladovics.hu>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
* MA 02110-1301, USA.
|
|
*
|
|
**********************************************************************
|
|
*
|
|
* Applies the zone/record changes to the system
|
|
*
|
|
*/
|
|
|
|
require_once "include.php";
|
|
|
|
$dslave = array();
|
|
$dmaster = array();
|
|
|
|
$dslave = $user->getDeletedZones('slave');
|
|
$dmaster = $user->getDeletedZones('master');
|
|
$cslave = $user->getCommitableZones('slave');
|
|
$cmaster = $user->getCommitableZones('master');
|
|
$allz = count($dmaster) + count($dslave) + count($cmaster) + count($cslave);
|
|
$done = 0;
|
|
|
|
if (isset($_SERVER['HTTP_REFERER']) &&
|
|
(preg_replace('/https?:\/\/[^\/]+/', '', $_SERVER['HTTP_REFERER']) != $_SERVER['PHP_SELF']) &&
|
|
(!isset($_GET['commit'])) &&
|
|
($allz >0)) {
|
|
$smarty->assign("pagetitle", "Commit changes");
|
|
$smarty->assign("template", "commit.tpl");
|
|
$smarty->assign("help", help("precommit"));
|
|
$smarty->assign("menu_button", menu_buttons());
|
|
$smarty->display("main.tpl");
|
|
die();
|
|
} elseif ((isset($_GET['commit'])) && ($_GET['commit'] != 'y')) {
|
|
problem();
|
|
} elseif (count($dmaster) +
|
|
count($dslave) +
|
|
count($cmaster) +
|
|
count($cslave) == 0) {
|
|
problem("nocommit");
|
|
}
|
|
|
|
$bind = new bindConfig($conf->conf);
|
|
|
|
$deleted = '';
|
|
$commited = '';
|
|
$error = '';
|
|
|
|
$delm = (count($dmaster) > 0) ? "<strong>" . "Deleting master records" . "</strong>\n\n" : '';
|
|
|
|
foreach ($dmaster as $master) {
|
|
$dmz = new masterZone(intval($master['id']));
|
|
$dmz->loadZoneHead();
|
|
$hd = $dmz->getZoneHead();
|
|
$hdr = $dmz->getZoneHeadRaw();
|
|
$dmz->eraseZone();
|
|
$err = $dmz->getErr();
|
|
if ($err > '') {
|
|
$error .= "<u>" . $hd['name'] . ":</u> " . "Error in deleting" . "\n" . $err . '\n\n';
|
|
} else {
|
|
$deleted .= "<u>" . $hd['name'] . ":</u> Deleting success.\n\n";
|
|
$bind->eraseConfig($hdr['name']);
|
|
$done++;
|
|
}
|
|
}
|
|
|
|
$error = ($error > '') ? $delm . $error : '';
|
|
$deleted = ($deleted > '') ? $delm . $deleted : '';
|
|
|
|
$errors = '';
|
|
$deleteds = '';
|
|
$delm .= (count($dslave) > 0) ? "<strong>" . "Deleting slave records" . "</strong>\n\n" : '';
|
|
$delm = ($deleted > '') ? "\n" . $delm : $delm;
|
|
|
|
foreach ($dslave as $slave) {
|
|
$dsz = new slaveZone(intval($slave['id']));
|
|
$dsz->loadZoneHead();
|
|
$hd = $dsz->getZoneHead();
|
|
$hdr = $dsz->getZoneHeadRaw();
|
|
$dsz->eraseZone();
|
|
$err = $dsz->getErr();
|
|
if ($err > '') {
|
|
$errors .= "<u>" . $hd['name'] . ":</u> Error in deleting\n" . $err . '\n\n';
|
|
} else {
|
|
$deleteds .= "<u>" . $hd['name'] . "</u>: Deleting success.\n\n";
|
|
$bind->eraseConfig($hdr['name']);
|
|
$done++;
|
|
}
|
|
}
|
|
|
|
$error .= ($errors > '') ? $delm . $errors : '';
|
|
$deleted .= ($deleteds > '') ? $delm . $deleteds : '';
|
|
$errors = '';
|
|
|
|
$comm = (count($cmaster) > 0) ? "<strong>" . "Committing master records" . "</strong>\n\n" : '';
|
|
$mcomm = '';
|
|
|
|
foreach ($cmaster as $master) {
|
|
$cmz = new masterZone(intval($master['id']));
|
|
$cmz->loadZoneHead();
|
|
$hd = $cmz->getZoneHead();
|
|
$hdr = $cmz->getZoneHeadRaw();
|
|
$cmz->writeZone($conf->path . $hdr['name'], $conf->hostMaster);
|
|
$zarray = array(
|
|
'type' => 'master',
|
|
'file' => $hdr['name'],
|
|
);
|
|
$zarray['file'] .= (($hd['secured'] == 'yes') && ($cmz->doSecure($conf->path, $conf->zoneSigner, $conf->rollInit, $conf->rollerConf))) ? ".signed" : "";
|
|
$cmz->doCommit();
|
|
$err = $cmz->getErr();
|
|
if ($err > '') {
|
|
$errors .= "<u>" . $hd['name'] . ":</u> Error in committing\n" . $err . '\n\n';
|
|
} else {
|
|
$mcomm .= "<u>" . $hd['name'] . "</u>: Committing success.\n" . $cmz->getMsg() . "\n";
|
|
$bind->addConfig($hdr['name'], $zarray);
|
|
$done++;
|
|
}
|
|
}
|
|
|
|
$error .= ($errors > '') ? $comm . $errors : '';
|
|
$commited .= ($mcomm > '') ? $comm . $mcomm: '';
|
|
$errors = '';
|
|
|
|
$comm = (count($cslave) > 0) ? "<strong>" . "Committing slave records" . "</strong>\n\n" : '';
|
|
$commited .= ($comm > '') ? "\n" : '';
|
|
$scomm = '';
|
|
|
|
foreach ($cslave as $slave) {
|
|
$csz = new slaveZone(intval($slave['id']));
|
|
$csz->loadZoneHead();
|
|
$hd = $csz->getZoneHead();
|
|
$hdr = $csz->getZoneHeadRaw();
|
|
$err = $csz->getErr();
|
|
if ($err > '') {
|
|
$errors .= "<u>" . $hd['name'] . ":</u> Error in committing\n" . $err . '\n\n';
|
|
} else {
|
|
$csz->doCommit();
|
|
$scomm .= "<u>" . $hd['name'] . "</u>: Committing success.\n\n";
|
|
$bind->addConfig($hdr['name'], array (
|
|
'type' => 'slave',
|
|
'masters' => $hdr['master'],
|
|
'file' => $hdr['name'],
|
|
));
|
|
$done++;
|
|
}
|
|
}
|
|
|
|
$error .= ($errors > '') ? $comm . $errors : '';
|
|
$commited .= ($scomm > '') ? $comm . $scomm : '';
|
|
$bind->saveConfig($conf->conf);
|
|
|
|
if ($done > 0) {
|
|
$cmd = $conf->rndc . " reload 2> /dev/stdout";
|
|
unset($coutput);
|
|
exec($cmd, $coutput, $exit);
|
|
if ($exit != 0) {
|
|
$error .= "Rndc error(" . $exit . "):\n" . implode("\n", $coutput);
|
|
} else {
|
|
$multi = ($done > 1) ? "zones" : "zone";
|
|
$commited .= "<b>" . $done . " " . $multi . " has been commited and reloaded:" . "</b>\n " . implode("\n ", $coutput) . "\n";
|
|
}
|
|
} else {
|
|
$commited .= "<b>" . "There wasn't commited zone" . "</b>";
|
|
}
|
|
|
|
$error = implode("<br />", explode("\n", $error));
|
|
|
|
$smarty->assign("popuperror", $error);
|
|
$smarty->assign("success", $deleted . $commited);
|
|
$smarty->assign("pagetitle", "Commit changes");
|
|
$smarty->assign("template", "commitdone.tpl");
|
|
$smarty->assign("help", help("commit"));
|
|
$smarty->assign("menu_button", menu_buttons());
|
|
$smarty->display("main.tpl");
|
|
?>
|