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 @@ DNS Zone + +
+
+
+
@@ -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');