mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-16 23:52:40 -04:00
Merge branch '4495-conversion-from-nsec3-to-nsec-removes-the-nsec3param-too-early-bind-9.18' into 'bind-9.18'
[9.18] Resolve "Conversion from NSEC3 to NSEC removes the NSEC3PARAM too early" !8578 See merge request isc-projects/bind9!8610
This commit is contained in:
commit
8f4e5f51fd
7 changed files with 84 additions and 9 deletions
8
CHANGES
8
CHANGES
|
|
@ -1,3 +1,11 @@
|
|||
6312. [bug] Conversion from NSEC3 signed to NSEC signed could
|
||||
temporarily put the zone into a state where it was
|
||||
treated as unsigned until the NSEC chain was built.
|
||||
Additionally conversion from one set of NSEC3 parameters
|
||||
to another could also temporarily put the zone into a
|
||||
state where it was treated as unsigned until the new
|
||||
NSEC3 chain was built. [GL #1794] [GL #4495]
|
||||
|
||||
6310. [bug] Memory leak in zone.c:sign_zone. When named signed a
|
||||
zone it could leak dst_keys due to a misplaced
|
||||
'continue'. [GL #4488]
|
||||
|
|
|
|||
|
|
@ -192,6 +192,14 @@ $KEYGEN -q -a $DEFAULT_ALGORITHM -fk $zone >kg.out 2>&1 || dumpit kg.out
|
|||
$KEYGEN -q -a $DEFAULT_ALGORITHM $zone >kg.out 2>&1 || dumpit kg.out
|
||||
$SIGNER -S -3 beef -A -o $zone -f $zonefile $infile >s.out || dumpit s.out
|
||||
|
||||
#
|
||||
# NSEC3->NSEC3 transition test zone.
|
||||
#
|
||||
setup nsec3-to-nsec3.example
|
||||
$KEYGEN -q -a $DEFAULT_ALGORITHM -fk $zone >kg.out 2>&1 || dumpit kg.out
|
||||
$KEYGEN -q -a $DEFAULT_ALGORITHM $zone >kg.out 2>&1 || dumpit kg.out
|
||||
$SIGNER -S -3 beef -A -o $zone -f $zonefile $infile >s.out || dumpit s.out
|
||||
|
||||
#
|
||||
# secure-to-insecure transition test zone; used to test removal of
|
||||
# keys via nsupdate
|
||||
|
|
|
|||
|
|
@ -186,6 +186,14 @@ zone "secure-to-insecure2.example" {
|
|||
dnssec-secure-to-insecure yes;
|
||||
};
|
||||
|
||||
zone "nsec3-to-nsec3.example" {
|
||||
type primary;
|
||||
file "nsec3-to-nsec3.example.db";
|
||||
allow-update { any; };
|
||||
inline-signing no;
|
||||
max-journal-size 10M;
|
||||
};
|
||||
|
||||
zone "oldsigs.example" {
|
||||
type primary;
|
||||
file "oldsigs.example.db";
|
||||
|
|
|
|||
26
bin/tests/system/autosign/ns3/nsec3-to-nsec3.example.db.in
Normal file
26
bin/tests/system/autosign/ns3/nsec3-to-nsec3.example.db.in
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
; Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
;
|
||||
; SPDX-License-Identifier: MPL-2.0
|
||||
;
|
||||
; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
; file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
;
|
||||
; See the COPYRIGHT file distributed with this work for additional
|
||||
; information regarding copyright ownership.
|
||||
|
||||
$TTL 300 ; 5 minutes
|
||||
@ IN SOA mname1. . (
|
||||
2009102722 ; serial
|
||||
20 ; refresh (20 seconds)
|
||||
20 ; retry (20 seconds)
|
||||
1814400 ; expire (3 weeks)
|
||||
3600 ; minimum (1 hour)
|
||||
)
|
||||
NS ns
|
||||
ns A 10.53.0.3
|
||||
|
||||
a A 10.0.0.1
|
||||
b A 10.0.0.2
|
||||
d A 10.0.0.4
|
||||
x CNAME a
|
||||
|
|
@ -177,6 +177,9 @@ status=$((status + ret))
|
|||
echo_i "Convert optout-with-ent from nsec to nsec3"
|
||||
($RNDCCMD 10.53.0.2 signing -nsec3param 1 1 1 - optout-with-ent 2>&1 | sed 's/^/ns2 /' | cat_i) || ret=1
|
||||
|
||||
echo_i "Convert nsec3-to-nsec3.example from having salt 'beef' to no salt"
|
||||
($RNDCCMD 10.53.0.3 signing -nsec3param 1 1 1 - nsec3-to-nsec3.example 2>&1 | sed 's/^/ns3 /' | cat_i) || ret=1
|
||||
|
||||
echo_i "Initial counts of RRSIG expiry fields values for auto signed zones"
|
||||
for z in .; do
|
||||
echo_i zone $z
|
||||
|
|
@ -1180,7 +1183,8 @@ checkprivate private.secure.example 10.53.0.3 2 || ret=1 # pre-signed
|
|||
checkprivate nsec3.example 10.53.0.3 || ret=1
|
||||
checkprivate nsec3.nsec3.example 10.53.0.3 || ret=1
|
||||
checkprivate nsec3.optout.example 10.53.0.3 || ret=1
|
||||
checkprivate nsec3-to-nsec.example 10.53.0.3 2 || ret=1 # automatically removed
|
||||
checkprivate nsec3-to-nsec.example 10.53.0.3 2 || ret=1 # automatically removed
|
||||
checkprivate nsec3-to-nsec3.example 10.53.0.3 2 || ret=1 # automatically removed
|
||||
if $SHELL ../testcrypto.sh -q RSASHA1; then
|
||||
checkprivate nsec-only.example 10.53.0.3 || ret=1
|
||||
fi
|
||||
|
|
@ -1806,5 +1810,32 @@ n=$((n + 1))
|
|||
if [ "$ret" -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
echo_i "check that NSEC3 to NSEC builds the NSEC chain first ($n)"
|
||||
ret=0
|
||||
$JOURNALPRINT ns3/nsec3-to-nsec.example.db.jnl \
|
||||
| awk 'BEGIN { nsec3param=0; nsec=0 }
|
||||
$1 == "del" && $5 == "SOA" { if (nsec3param || nsec) { if (nsec3param && !nsec) { exit(1); } else { exit(0); } } }
|
||||
$1 == "del" && $5 == "NSEC3PARAM" { nsec3param=1 }
|
||||
$1 == "add" && $2 == "nsec3-to-nsec.example." && $5 == "NSEC" { nsec=1 }
|
||||
END { if (nsec3param || nsec) { if (nsec3param && !nsec) { exit(1); } else { exit(0); } } else { exit(1); } }
|
||||
' || ret=1
|
||||
n=$((n + 1))
|
||||
if [ "$ret" -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
echo_i "check that NSEC3 to NSEC3 builds the new NSEC3 chain first ($n)"
|
||||
ret=0
|
||||
$JOURNALPRINT ns3/nsec3-to-nsec3.example.db.jnl \
|
||||
| awk 'BEGIN { addnsec3param=0; delnsec3param=0; nsec3=0 }
|
||||
$1 == "del" && $5 == "SOA" { if (delnsec3param || nsec3 || addnsec3param) { if (delnsec3param && (!nsec3 || !addnsec3param)) { exit(1); } else { exit(0); } } }
|
||||
$1 == "del" && $5 == "NSEC3PARAM" { delnsec3param=1 }
|
||||
$1 == "add" && $5 == "NSEC3PARAM" { addnsec3param=1 }
|
||||
$1 == "add" && $5 == "NSEC3" { nsec3=1 }
|
||||
END { if (delnsec3param || nsec3 || addnsec3param) { if (delnsec3param && (!nsec3 || !addnsec3param)) { exit(1); } else { exit(0); } } else { exit(1); } }
|
||||
' || ret=1
|
||||
n=$((n + 1))
|
||||
if [ "$ret" -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
|
|
@ -2720,7 +2720,7 @@ rndccmd 10.53.0.3 signing -nsec3param 1 0 0 auto inline.example >/dev/null 2>&1
|
|||
rndccmd 10.53.0.3 status >/dev/null || ret=1
|
||||
for i in 1 2 3 4 5 6 7 8 9 10; do
|
||||
salt=$(dig_with_opts +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}')
|
||||
[ -n "$salt" ] && [ "$salt" != "-" ] && break
|
||||
[ "$salt" != "-" ] && [ "${#salt}" -eq 16 ] && break
|
||||
echo_i "sleeping ...."
|
||||
sleep 1
|
||||
done
|
||||
|
|
@ -2737,7 +2737,7 @@ rndccmd 10.53.0.3 signing -nsec3param 1 0 0 auto inline.example >/dev/null 2>&1
|
|||
rndccmd 10.53.0.3 status >/dev/null || ret=1
|
||||
for i in 1 2 3 4 5 6 7 8 9 10; do
|
||||
salt=$(dig_with_opts +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}')
|
||||
[ -n "$salt" ] && [ "$salt" != "$oldsalt" ] && break
|
||||
[ "$salt" != "$oldsalt" ] && [ "${#salt}" -eq 16 ] && break
|
||||
echo_i "sleeping ...."
|
||||
sleep 1
|
||||
done
|
||||
|
|
|
|||
|
|
@ -1138,12 +1138,6 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
|
|||
dns_rdata_t private = DNS_RDATA_INIT;
|
||||
|
||||
dns_rdataset_current(&rdataset, &rdata);
|
||||
|
||||
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_DEL, origin,
|
||||
rdataset.ttl, &rdata, &tuple));
|
||||
CHECK(do_one_tuple(&tuple, db, ver, diff));
|
||||
INSIST(tuple == NULL);
|
||||
|
||||
dns_nsec3param_toprivate(&rdata, &private, privatetype, buf,
|
||||
sizeof(buf));
|
||||
buf[2] = DNS_NSEC3FLAG_REMOVE;
|
||||
|
|
|
|||
Loading…
Reference in a new issue