Skip to content

Commit 86a7f8c

Browse files
author
A. Täffner
committed
Zone-Checking improved
Implements a colored background if bind fails to load the zone due to errors Implements a status text if errors occured Implements not removing a zone if errors occur. instead old zone stays loaded
1 parent de7d261 commit 86a7f8c

File tree

6 files changed

+54
-7
lines changed

6 files changed

+54
-7
lines changed

interface/web/dns/form/dns_soa.tform.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,20 @@
8080
'width' => '30',
8181
'maxlength' => '255'
8282
),
83+
'status' => array (
84+
'datatype' => 'VARCHAR',
85+
'formtype' => 'TEXT',
86+
'default' => 'PENDING',
87+
'value' => 'PENDING'
88+
),
89+
'status_txt' => array (
90+
'datatype' => 'VARCHAR',
91+
'formtype' => 'TEXTAREA',
92+
'default' => '',
93+
'value' => '',
94+
'width' => '30',
95+
'maxlength' => '10000'
96+
),
8397
'origin' => array (
8498
'datatype' => 'VARCHAR',
8599
'formtype' => 'TEXT',

interface/web/dns/list/dns_soa.list.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,27 @@
6161
'width' => "",
6262
'value' => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
6363

64+
65+
$liste["item"][] = array( 'field' => "status",
66+
'datatype' => "VARCHAR",
67+
'formtype' => "SELECT",
68+
'op' => "=",
69+
'prefix' => "",
70+
'suffix' => "",
71+
'width' => "",
72+
'value' => array('OK' => '', 'ERROR' => 'background-color:red', 'PENDING' => 'background-color:yellow'));
73+
74+
75+
$liste["item"][] = array( 'field' => "status_txt",
76+
'datatype' => "VARCHAR",
77+
'formtype' => "SELECT",
78+
'op' => "=",
79+
'prefix' => "",
80+
'suffix' => "",
81+
'width' => "",
82+
'value' => '');
6483

84+
6585
$liste["item"][] = array( 'field' => "server_id",
6686
'datatype' => "VARCHAR",
6787
'formtype' => "SELECT",

interface/web/dns/templates/dns_soa_admin_list.htm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ <h1><tmpl_var name="list_head_txt"></h1>
5757
<tbody>
5858
<tmpl_loop name="records">
5959
<tr>
60-
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
60+
<td style="{tmpl_var name="status"}"><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
6161
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
6262
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
6363
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>

interface/web/dns/templates/dns_soa_edit.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ <h1><tmpl_var name="list_head_txt"></h1>
55

66

77
<legend>DNS Zone</legend>
8+
<tmpl_if name="status_txt">
9+
<div class="alert alert-danger clear">
10+
<div style="white-space: pre;" class="alert-content"><tmpl_var name="status_txt"></div>
11+
</div>
12+
</tmpl_if>
813
<tmpl_if name="is_admin">
914
<div class="form-group">
1015
<tmpl_if name="edit_disabled">
@@ -137,6 +142,7 @@ <h1><tmpl_var name="list_head_txt"></h1>
137142
</div>
138143

139144
<input type="hidden" name="id" value="{tmpl_var name='id'}">
145+
<input type="hidden" name="status" value="PENDING">
140146
<input name="serial" type="hidden" value="{tmpl_var name='serial'}">
141147

142148
<div class="clear"><div class="right">

interface/web/dns/templates/dns_soa_list.htm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ <h1><tmpl_var name="list_head_txt"></h1>
5555
<tbody>
5656
<tmpl_loop name="records">
5757
<tr>
58-
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
58+
<td style="{tmpl_var name="status"}"><a href="#" title="{tmpl_var name="status_txt"}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
5959
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
6060
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
6161
<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>

server/plugins-available/bind_plugin.inc.php

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,22 +261,28 @@ function soa_update($event_name, $data) {
261261
$filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($zone['origin'], 0, -1)));
262262
}
263263

264-
file_put_contents($filename, $tpl->grab());
264+
file_put_contents($filename.'.pending', $tpl->grab());
265265
chown($filename, escapeshellcmd($dns_config['bind_user']));
266266
chgrp($filename, escapeshellcmd($dns_config['bind_group']));
267267

268268
//* Check the zonefile
269269
if(is_file($filename.'.err')) unlink($filename.'.err');
270-
exec('named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename), $out, $return_status);
270+
$out=array();
271+
exec('/usr/sbin/named-checkzone '.escapeshellarg($zone['origin']).' '.escapeshellarg($filename.'.pending').' 2>&1', $out, $return_status);
272+
$statustext='';
273+
foreach ($out as $line) $statustext .= $line."\n";
271274
if($return_status === 0) {
272275
$app->log("Writing BIND domain file: ".$filename, LOGLEVEL_DEBUG);
276+
$app->db->query('UPDATE dns_soa SET status=\'OK\', status_txt=\'\' WHERE id='.$data['new']['id']);
277+
rename($filename.'.pending', $filename);
273278
} else {
274279
if($dns_config['disable_bind_log'] === 'y') {
275280
$app->log("Writing BIND domain file failed: ".$filename." ".implode(' ', $out), LOGLEVEL_DEBUG);
276281
} else {
277282
$app->log("Writing BIND domain file failed: ".$filename." ".implode(' ', $out), LOGLEVEL_WARN);
278283
}
279-
rename($filename, $filename.'.err');
284+
$app->db->query('UPDATE dns_soa SET status=\'ERROR\', status_txt=\''.str_replace(array('"', '\''), '', $statustext).'\' WHERE id='.$data['new']['id']);
285+
rename($filename.'.pending', $filename.'.err');
280286
}
281287
unset($tpl);
282288
unset($records);
@@ -320,8 +326,9 @@ function soa_update($event_name, $data) {
320326
if(is_file($filename)) unlink($filename);
321327
if(is_file($filename.'.err')) unlink($filename.'.err');
322328
if(is_file($filename.'.signed')) unlink($filename.'.signed');
323-
}
324-
329+
if(is_file($filename.'.pending')) unlink($filename.'.pending');
330+
}
331+
325332
//* Restart bind nameserver if update_acl is not empty, otherwise reload it
326333
if($data['new']['update_acl'] != '') {
327334
$app->services->restartServiceDelayed('bind', 'restart');

0 commit comments

Comments
 (0)