diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 05e915740c9dd69467680148c307109ccaad5c08..d765782860cc9d0b0549b4fff78e515380eb5a27 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -80,6 +80,20 @@ $form["tabs"]['dns_soa'] = array (
'width' => '30',
'maxlength' => '255'
),
+ 'status' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => 'PENDING',
+ 'value' => 'PENDING'
+ ),
+ 'status_txt' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXTAREA',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '10000'
+ ),
'origin' => array (
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
diff --git a/interface/web/dns/list/dns_soa.list.php b/interface/web/dns/list/dns_soa.list.php
index 2f4233e066ad6b37478095bbd382806029cb50b3..0b76b27fccedd335e81f48fb0b084ddf0152c483 100644
--- a/interface/web/dns/list/dns_soa.list.php
+++ b/interface/web/dns/list/dns_soa.list.php
@@ -61,7 +61,27 @@ $liste["item"][] = array( 'field' => "active",
'width' => "",
'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "".$app->lng('no_txt')."
"));
+
+$liste["item"][] = array( 'field' => "status",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "SELECT",
+ 'op' => "=",
+ 'prefix' => "",
+ 'suffix' => "",
+ 'width' => "",
+ 'value' => array('OK' => '', 'ERROR' => 'background-color:red', 'PENDING' => 'background-color:yellow'));
+
+
+$liste["item"][] = array( 'field' => "status_txt",
+ 'datatype' => "VARCHAR",
+ 'formtype' => "SELECT",
+ 'op' => "=",
+ 'prefix' => "",
+ 'suffix' => "",
+ 'width' => "",
+ 'value' => '');
+
$liste["item"][] = array( 'field' => "server_id",
'datatype' => "VARCHAR",
'formtype' => "SELECT",
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index 0f14534c536b829778d1d835014887457d7e5ec4..19c074c4022b822c0cb5ddf9f948387911bc8953 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -57,7 +57,7 @@
- {tmpl_var name="active"} |
+ {tmpl_var name="active"} |
{tmpl_var name="sys_groupid"} |
{tmpl_var name="server_id"} |
{tmpl_var name="origin"} |
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm
index be2e7fa831367c4e0eb9abadceb5eb3c0bde479c..d18b840181e540c7d6645960315dcfed4914ca15 100644
--- a/interface/web/dns/templates/dns_soa_edit.htm
+++ b/interface/web/dns/templates/dns_soa_edit.htm
@@ -5,6 +5,11 @@
+
+
+
@@ -137,6 +142,7 @@
+
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index 5162119900ca21c5cc5234c0a1a36409c62cb16f..d151d4b8959ad169749245429643141ea7e8bf01 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -55,7 +55,7 @@
- {tmpl_var name="active"} |
+ {tmpl_var name="active"} |
{tmpl_var name="server_id"} |
{tmpl_var name="origin"} |
{tmpl_var name="ns"} |
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index cede1cb82c2395c1cc077ab19c571ca80bcdcbc6..4abd53b477e4fb95218fa101063e270c95e62a31 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -261,22 +261,28 @@ class bind_plugin {
$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
}
- file_put_contents($filename, $tpl->grab());
+ file_put_contents($filename.'.pending', $tpl->grab());
chown($filename, escapeshellcmd($dns_config['bind_user']));
chgrp($filename, escapeshellcmd($dns_config['bind_group']));
//* Check the zonefile
if(is_file($filename.'.err')) unlink($filename.'.err');
- exec('named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename), $out, $return_status);
+ $out=array();
+ exec('/usr/sbin/named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename.'.pending').' 2>&1', $out, $return_status);
+ $statustext='';
+ foreach ($out as $line) $statustext .= $line."\n";
if($return_status === 0) {
$app->log("Writing BIND domain file: ".$filename, LOGLEVEL_DEBUG);
+ $app->db->query('UPDATE dns_soa SET status=\'OK\', status_txt=\'\' WHERE id='.$data['new']['id']);
+ rename($filename.'.pending', $filename);
} else {
if($dns_config['disable_bind_log'] === 'y') {
$app->log("Writing BIND domain file failed: ".$filename." ".implode(' ', $out), LOGLEVEL_DEBUG);
} else {
$app->log("Writing BIND domain file failed: ".$filename." ".implode(' ', $out), LOGLEVEL_WARN);
}
- rename($filename, $filename.'.err');
+ $app->db->query('UPDATE dns_soa SET status=\'ERROR\', status_txt=\''.str_replace(array('"', '\''), '', $statustext).'\' WHERE id='.$data['new']['id']);
+ rename($filename.'.pending', $filename.'.err');
}
unset($tpl);
unset($records);
@@ -319,9 +325,9 @@ class bind_plugin {
if(is_file($filename)) unlink($filename);
if(is_file($filename.'.err')) unlink($filename.'.err');
+ if(is_file($filename.'.pending')) unlink($filename.'.pending');
if(is_file($filename.'.signed')) unlink($filename.'.signed');
- }
-
+
//* Restart bind nameserver if update_acl is not empty, otherwise reload it
if($data['new']['update_acl'] != '') {
$app->services->restartServiceDelayed('bind', 'restart');