Skip to content

Commit 606a2d9

Browse files
author
A. Täffner
committed
DNSSEC-Switch: Implementation finished, tested
And found a small bug (privkeys were not deleted on zone deletion) which is now fixed Testing successful. Doing last test then if everything goes well this will be the new merge request
1 parent ab1bb38 commit 606a2d9

File tree

6 files changed

+15
-13
lines changed

6 files changed

+15
-13
lines changed

install/tpl/dnssec-delete.sh.master

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ if [ "$mysqlcheck" = 0 ];then
1717
fi
1818

1919
rm $bindpath/K$pardomain.+*.key
20+
rm $bindpath/K$pardomain.+*.private
2021
rm "$bindpath/$filespre$pardomain.signed"
2122
rm "$bindpath/dsset-$pardomain."
2223

install/tpl/dnssec-update.sh.master

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
#!/bin/bash
22
source {dnssec_conffile}
33
pardomain="${1::-1}"
4+
cd $bindpath
45

56
if [ ! -d $backuppath ]; then mkdir -p $backuppath; fi
67
#connect to database for testing
78
mysqlcheck=`mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; show tables;" | wc -c`
89
if [ "$mysqlcheck" = 0 ];then
910
echo "$0 could not connect to database"
10-
cd $curdir
11+
cd $curpath
1112
exit 0
1213
fi
1314

@@ -33,8 +34,8 @@ mysqlcheck=`mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; sel
3334
fi
3435

3536
/usr/sbin/dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N increment -o $domain -t $filespre$domain
36-
mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; update dns_soa set serial='$fserial' where origin='$domain.'; update dns_rr set serial='$fserial' WHERE zone=$zoneid"
37+
mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; update dns_soa set serial='$fserial', dnssec_info='`cat /tmp/.dnssec-$domain`' where origin='$domain.'; update dns_rr set serial='$fserial' WHERE zone=$zoneid"
3738

3839
echo "DNSSEC for $pardomain has been configured"
39-
cd $curdir
40+
cd $curpath
4041
exit 0

interface/web/dns/lib/lang/de_dns_soa.lng

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ $wb['xfer_txt'] = 'Zonentransfer zu diesen IP Adressen erlauben (mit Komma getre
1313
$wb['active_txt'] = 'Aktiv';
1414
$wb['dnssec_info_txt'] = 'DNSSEC DS-Daten für Registry';
1515
$wb['dnssec_wanted_txt'] = 'Zone signieren (DNSSEC)';
16+
$wb['dnssec_wanted_info'] = 'Wenn DNSSEC bereits aktiviert war und ein Key erstellt wurde, wird dieser durch deaktivieren nicht gelöscht. Die Zone wird dann jedoch nicht länger signiert ausgeliefert.';
1617
$wb['limit_dns_zone_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
1718
$wb['client_txt'] = 'Kunde';
1819
$wb['no_zone_perm'] = 'Sie haben nicht die Berechtigung, einen Eintrag zu dieser DNS Zone hinzuzufügen.';

interface/web/dns/lib/lang/en_dns_soa.lng

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ $wb["xfer_txt"] = 'Allow zone transfers to <br />these IPs (comma separated list
1313
$wb["active_txt"] = 'Active';
1414
$wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry';
1515
$wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)';
16+
$wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delievered in signed format afterwards.';
1617
$wb["limit_dns_zone_txt"] = 'The max. number of DNS zones for your account is reached.';
1718
$wb["client_txt"] = 'Client';
1819
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';

interface/web/dns/templates/dns_soa_edit.htm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ <h1><tmpl_var name="list_head_txt"></h1>
128128
<div class="form-group">
129129
<label class="col-sm-3 control-label">{tmpl_var name='dnssec_wanted_txt'}</label>
130130
<div class="col-sm-9">
131-
{tmpl_var name='dnssec_wanted'}
132-
</div>
131+
{tmpl_var name='dnssec_wanted'}<br /><small>({tmpl_var name='dnssec_wanted_info'})</small>
132+
</div>
133133
</div>
134134
<div class="form-group">
135135
<label for="update_acl" class="col-sm-3 control-label">{tmpl_var name='dnssec_info_txt'}</label>
136-
<div class="col-sm-9"><textarea readonly="true" rows="5" class="form-control">{tmpl_var name='dnssec_info'}</textarea></div>
136+
<div class="col-sm-9"><textarea readonly="true" rows="5" id="dnssec_info" name="dnssec_info" class="form-control">{tmpl_var name='dnssec_info'}</textarea></div>
137137
</div>
138138

139139
<input type="hidden" name="id" value="{tmpl_var name='id'}">

server/plugins-available/bind_plugin.inc.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,8 @@ function soa_update($event_name, $data) {
151151
if (@$data['old']['dnssec_initialized'] == 'Y' && strlen(@$data['old']['origin']) > 3) exec('/usr/local/ispconfig/server/scripts/dnssec-delete.sh '.escapeshellcmd($data['old']['origin'])); //delete old keys
152152
if ($data['new']['dnssec_wanted'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-create.sh '.escapeshellcmd($data['new']['origin'])); //Create new keys for new origin
153153
}
154-
if ($data['new']['dnssec_wanted'] == 'Y' AND $data['new']['dnssec_initialized'] == 'N') if ($data['new']['dnssec_wanted'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-create.sh '.escapeshellcmd($data['new']['origin'])); //Create new keys for new origin
155-
else if ($data['old']['dnssec_wanted'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-update.sh '.escapeshellcmd($data['new']['origin']));
156-
if($data['old']['dnssec_initialized'] == 'Y' && $data['new']['dnssec_wanted'] == 'N') { //delete old signed file if dnssec is no longer wanted
154+
else if ($data['new']['dnssec_wanted'] == 'Y' && $data['old']['dnssec_initialized'] == 'N') exec('/usr/local/ispconfig/server/scripts/dnssec-create.sh '.escapeshellcmd($data['new']['origin'])); //Create new keys for new origin
155+
else if ($data['new']['dnssec_wanted'] == 'N' && $data['old']['dnssec_initialized'] == 'Y') { //delete old signed file if dnssec is no longer wanted
157156
//TODO : change this when distribution information has been integrated into server record
158157
if (file_exists('/etc/gentoo-release')) {
159158
$filename = $dns_config['bind_zonefiles_dir'].'/pri/'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
@@ -162,7 +161,7 @@ function soa_update($event_name, $data) {
162161
$filename = $dns_config['bind_zonefiles_dir'].'/pri.'.str_replace("/", "_", substr($data['old']['origin'], 0, -1));
163162
}
164163
if(is_file($filename.'.signed')) unlink($filename.'.signed');
165-
}
164+
} else if ($data['new']['dnssec_wanted'] == 'Y') exec('/usr/local/ispconfig/server/scripts/dnssec-update.sh '.escapeshellcmd($data['new']['origin']));
166165
// END DNSSEC
167166

168167
//* rebuild the named.conf file if the origin has changed or when the origin is inserted.
@@ -346,7 +345,7 @@ function write_named_conf($data, $dns_config) {
346345
global $app, $conf;
347346

348347
//* Only write the master file for the current server
349-
$tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify, update_acl, dnssec_initialized FROM dns_soa WHERE active = 'Y' AND server_id=?", $conf["server_id"]);
348+
$tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify, update_acl, dnssec_wanted FROM dns_soa WHERE active = 'Y' AND server_id=?", $conf["server_id"]);
350349
$zones = array();
351350

352351
//* Check if the current zone that triggered this function has at least one NS record
@@ -364,9 +363,8 @@ function write_named_conf($data, $dns_config) {
364363

365364
//* Loop trough zones
366365
foreach($tmps as $tmp) {
367-
368366
$zone_file = $pri_zonefiles_path.str_replace("/", "_", substr($tmp['origin'], 0, -1));
369-
if ($tmp['dnssec_initialized'] == 'Y') $zone_file .= '.signed' //.signed is for DNSSEC-Implementation
367+
if ($tmp['dnssec_wanted'] == 'Y') $zone_file .= '.signed'; //.signed is for DNSSEC-Implementation
370368

371369
$options = '';
372370
if(trim($tmp['xfer']) != '') {

0 commit comments

Comments
 (0)