2970. [security] Adding a NO DATA negative cache entry failed to clear
any matching RRSIG records. A subsequent lookup of
of NO DATA cache entry could trigger a INSIST when the
unexpected RRSIG was also returned with the NO DATA
cache entry. [RT #22288]
This commit is contained in:
6
CHANGES
6
CHANGES
@@ -1,3 +1,9 @@
|
||||
2970. [security] Adding a NO DATA negative cache entry failed to clear
|
||||
any matching RRSIG records. A subsequent lookup of
|
||||
of NO DATA cache entry could trigger a INSIST when the
|
||||
unexpected RRSIG was also returned with the NO DATA
|
||||
cache entry. [RT #22288]
|
||||
|
||||
2969. [security] Fix acl type processing so that allow-query works
|
||||
in options and view statements. Also add a new
|
||||
set of tests to verify proper functioning.
|
||||
|
||||
@@ -14,10 +14,12 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: clean.sh,v 1.3 2009/05/29 23:47:49 tbox Exp $
|
||||
# $Id: clean.sh,v 1.4 2010/11/16 06:46:43 marka Exp $
|
||||
|
||||
#
|
||||
# Clean up after resolver tests.
|
||||
#
|
||||
rm -f */named.memstats
|
||||
rm -f dig.out
|
||||
rm -f ns6/K*
|
||||
rm -f ns6/example.net.db.signed ns6/example.net.db
|
||||
|
||||
6
bin/tests/system/resolver/ns6/example.net.db.in
Normal file
6
bin/tests/system/resolver/ns6/example.net.db.in
Normal file
@@ -0,0 +1,6 @@
|
||||
$TTL 600
|
||||
@ IN SOA ns hostmaster 1 1800 900 604800 600
|
||||
@ IN NS ns
|
||||
@ IN MX 0 mail
|
||||
ns IN A 10.53.0.6
|
||||
mail IN A 10.53.0.6
|
||||
31
bin/tests/system/resolver/ns6/keygen.sh
Normal file
31
bin/tests/system/resolver/ns6/keygen.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: keygen.sh,v 1.2 2010/11/16 06:46:44 marka Exp $
|
||||
|
||||
SYSTEMTESTTOP=../..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
|
||||
RANDFILE=../random.data
|
||||
|
||||
zone=example.net
|
||||
zonefile="${zone}.db"
|
||||
infile="${zonefile}.in"
|
||||
cp $infile $zonefile
|
||||
ksk=`$KEYGEN -q -3 -r $RANDFILE -fk $zone`
|
||||
zsk=`$KEYGEN -q -3 -r $RANDFILE $zone`
|
||||
cat $ksk.key $zsk.key >> $zonefile
|
||||
$SIGNER -P -r $RANDFILE -o $zone $zonefile > /dev/null 2>&1
|
||||
44
bin/tests/system/resolver/ns6/named.conf
Normal file
44
bin/tests/system/resolver/ns6/named.conf
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: named.conf,v 1.2 2010/11/16 06:46:44 marka Exp $ */
|
||||
|
||||
// NS4
|
||||
|
||||
controls { /* empty */ };
|
||||
|
||||
options {
|
||||
query-source address 10.53.0.6;
|
||||
notify-source 10.53.0.6;
|
||||
transfer-source 10.53.0.6;
|
||||
port 5300;
|
||||
pid-file "named.pid";
|
||||
listen-on { 10.53.0.6; };
|
||||
listen-on-v6 { none; };
|
||||
recursion no;
|
||||
// minimal-responses yes;
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type master;
|
||||
file "root.db";
|
||||
};
|
||||
|
||||
zone "example.net" {
|
||||
type master;
|
||||
file "example.net.db.signed";
|
||||
allow-update { any; };
|
||||
};
|
||||
26
bin/tests/system/resolver/ns6/root.db
Normal file
26
bin/tests/system/resolver/ns6/root.db
Normal file
@@ -0,0 +1,26 @@
|
||||
; Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
||||
;
|
||||
; Permission to use, copy, modify, and/or distribute this software for any
|
||||
; purpose with or without fee is hereby granted, provided that the above
|
||||
; copyright notice and this permission notice appear in all copies.
|
||||
;
|
||||
; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
; PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
; $Id: root.db,v 1.2 2010/11/16 06:46:44 marka Exp $
|
||||
|
||||
$TTL 300
|
||||
. IN SOA marka.isc.org. a.root.servers.nil. (
|
||||
2010 ; serial
|
||||
600 ; refresh
|
||||
600 ; retry
|
||||
1200 ; expire
|
||||
600 ; minimum
|
||||
)
|
||||
. NS a.root-servers.nil.
|
||||
a.root-servers.nil. A 10.53.0.6
|
||||
37
bin/tests/system/resolver/ns7/named.conf
Normal file
37
bin/tests/system/resolver/ns7/named.conf
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: named.conf,v 1.2 2010/11/16 06:46:44 marka Exp $ */
|
||||
|
||||
// NS4
|
||||
|
||||
controls { /* empty */ };
|
||||
|
||||
options {
|
||||
query-source address 10.53.0.7;
|
||||
notify-source 10.53.0.7;
|
||||
transfer-source 10.53.0.7;
|
||||
port 5300;
|
||||
pid-file "named.pid";
|
||||
listen-on { 10.53.0.7; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type hint;
|
||||
file "root.hint";
|
||||
};
|
||||
19
bin/tests/system/resolver/ns7/root.hint
Normal file
19
bin/tests/system/resolver/ns7/root.hint
Normal file
@@ -0,0 +1,19 @@
|
||||
; Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
|
||||
;
|
||||
; Permission to use, copy, modify, and/or distribute this software for any
|
||||
; purpose with or without fee is hereby granted, provided that the above
|
||||
; copyright notice and this permission notice appear in all copies.
|
||||
;
|
||||
; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
; PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
; $Id: root.hint,v 1.2 2010/11/16 06:46:44 marka Exp $
|
||||
|
||||
$TTL 999999
|
||||
. IN NS a.root-servers.nil.
|
||||
a.root-servers.nil. IN A 10.53.0.6
|
||||
22
bin/tests/system/resolver/setup.sh
Normal file
22
bin/tests/system/resolver/setup.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# Copyright (C) 2004, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
|
||||
# Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: setup.sh,v 1.2 2010/11/16 06:46:44 marka Exp $
|
||||
|
||||
../../../tools/genrandom 400 random.data
|
||||
|
||||
(cd ns6 && sh keygen.sh)
|
||||
@@ -15,7 +15,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: tests.sh,v 1.16 2010/09/15 23:22:02 marka Exp $
|
||||
# $Id: tests.sh,v 1.17 2010/11/16 06:46:44 marka Exp $
|
||||
|
||||
SYSTEMTESTTOP=..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
@@ -156,5 +156,30 @@ grep "status: NXDOMAIN" dig.ns5.out.${n} > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo "I:check that replacement of additional data by a negative cache no data entry clears the additional RRSIGs ($n)"
|
||||
ret=0
|
||||
$DIG +tcp mx example.net @10.53.0.7 -p 5300 > dig.ns7.out.${n} || ret=1
|
||||
grep "status: NOERROR" dig.ns7.out.${n} > /dev/null || ret=1
|
||||
if [ $ret = 1 ]; then echo "I:mx priming failed"; fi
|
||||
$NSUPDATE << EOF
|
||||
server 10.53.0.6 5300
|
||||
zone example.net
|
||||
update delete mail.example.net A
|
||||
update add mail.example.net 0 AAAA ::1
|
||||
send
|
||||
EOF
|
||||
$DIG +tcp a mail.example.net @10.53.0.7 -p 5300 > dig.ns7.out.${n} || ret=2
|
||||
grep "status: NOERROR" dig.ns7.out.${n} > /dev/null || ret=2
|
||||
grep "ANSWER: 0" dig.ns7.out.${n} > /dev/null || ret=2
|
||||
if [ $ret = 2 ]; then echo "I:ncache priming failed"; fi
|
||||
$DIG +tcp mx example.net @10.53.0.7 -p 5300 > dig.ns7.out.${n} || ret=3
|
||||
grep "status: NOERROR" dig.ns7.out.${n} > /dev/null || ret=3
|
||||
$DIG +tcp rrsig mail.example.net +norec @10.53.0.7 -p 5300 > dig.ns7.out.${n} || ret=4
|
||||
grep "status: NOERROR" dig.ns7.out.${n} > /dev/null || ret=4
|
||||
grep "ANSWER: 0" dig.ns7.out.${n} > /dev/null || ret=4
|
||||
if [ $ret != 0 ]; then echo "I:failed"; ret=1; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo "I:exit status: $status"
|
||||
exit $status
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rbtdb.c,v 1.305 2010/09/07 00:58:36 marka Exp $ */
|
||||
/* $Id: rbtdb.c,v 1.306 2010/11/16 06:46:44 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
@@ -5616,14 +5616,14 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
|
||||
dns_rdataset_t *addedrdataset, isc_stdtime_t now)
|
||||
{
|
||||
rbtdb_changed_t *changed = NULL;
|
||||
rdatasetheader_t *topheader, *topheader_prev, *header;
|
||||
rdatasetheader_t *topheader, *topheader_prev, *header, *sigheader;
|
||||
unsigned char *merged;
|
||||
isc_result_t result;
|
||||
isc_boolean_t header_nx;
|
||||
isc_boolean_t newheader_nx;
|
||||
isc_boolean_t merge;
|
||||
dns_rdatatype_t rdtype, covers;
|
||||
rbtdb_rdatatype_t negtype;
|
||||
rbtdb_rdatatype_t negtype, sigtype;
|
||||
dns_trust_t trust;
|
||||
int idx;
|
||||
|
||||
@@ -5661,7 +5661,7 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
|
||||
|
||||
newheader_nx = NONEXISTENT(newheader) ? ISC_TRUE : ISC_FALSE;
|
||||
topheader_prev = NULL;
|
||||
|
||||
sigheader = NULL;
|
||||
negtype = 0;
|
||||
if (rbtversion == NULL && !newheader_nx) {
|
||||
rdtype = RBTDB_RDATATYPE_BASE(newheader->type);
|
||||
@@ -5670,26 +5670,34 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
|
||||
* We're adding a negative cache entry.
|
||||
*/
|
||||
covers = RBTDB_RDATATYPE_EXT(newheader->type);
|
||||
if (covers == dns_rdatatype_any) {
|
||||
sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig,
|
||||
covers);
|
||||
for (topheader = rbtnode->data;
|
||||
topheader != NULL;
|
||||
topheader = topheader->next) {
|
||||
/*
|
||||
* We're adding an negative cache entry
|
||||
* If we're adding an negative cache entry
|
||||
* which covers all types (NXDOMAIN,
|
||||
* NODATA(QTYPE=ANY)).
|
||||
*
|
||||
* We make all other data stale so that the
|
||||
* only rdataset that can be found at this
|
||||
* node is the negative cache entry.
|
||||
*
|
||||
* Otherwise look for any RRSIGs of the
|
||||
* given type so they can be marked stale
|
||||
* later.
|
||||
*/
|
||||
for (topheader = rbtnode->data;
|
||||
topheader != NULL;
|
||||
topheader = topheader->next) {
|
||||
if (covers == dns_rdatatype_any) {
|
||||
set_ttl(rbtdb, topheader, 0);
|
||||
topheader->attributes |=
|
||||
RDATASET_ATTR_STALE;
|
||||
}
|
||||
rbtnode->dirty = 1;
|
||||
goto find_header;
|
||||
rbtnode->dirty = 1;
|
||||
} else if (topheader->type == sigtype)
|
||||
sigheader = topheader;
|
||||
}
|
||||
if (covers == dns_rdatatype_any)
|
||||
goto find_header;
|
||||
negtype = RBTDB_RDATATYPE_VALUE(covers, 0);
|
||||
} else {
|
||||
/*
|
||||
@@ -5928,6 +5936,11 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
|
||||
if (rbtversion == NULL) {
|
||||
set_ttl(rbtdb, header, 0);
|
||||
header->attributes |= RDATASET_ATTR_STALE;
|
||||
if (sigheader != NULL) {
|
||||
set_ttl(rbtdb, sigheader, 0);
|
||||
sigheader->attributes |=
|
||||
RDATASET_ATTR_STALE;
|
||||
}
|
||||
}
|
||||
idx = newheader->node->locknum;
|
||||
if (IS_CACHE(rbtdb)) {
|
||||
|
||||
Reference in New Issue
Block a user