]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3051. [bug] NS records obsure DS records at the bottom of the
authorMark Andrews <marka@isc.org>
Wed, 2 Mar 2011 04:27:59 +0000 (04:27 +0000)
committerMark Andrews <marka@isc.org>
Wed, 2 Mar 2011 04:27:59 +0000 (04:27 +0000)
                        zone if both are present. [RT #23035]

CHANGES
bin/tests/system/checkzone/clean.sh [new file with mode: 0644]
bin/tests/system/checkzone/tests.sh [new file with mode: 0644]
bin/tests/system/checkzone/zones/good1.db [new file with mode: 0644]
lib/dns/rbtdb.c

diff --git a/CHANGES b/CHANGES
index d557370b5f9f79558d4c3f19096c97edc08123f5..c9790e1804a7bb5ec4545f54af96bdd945b4f04a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3051.  [bug]           NS records obsure DS records at the bottom of the
+                       zone if both are present. [RT #23035]
+
 3050.  [bug]           The autosign system test was timing dependent.
                        Wait for the initial autosigning to complete
                        before running the rest of the test. [RT #23035]
diff --git a/bin/tests/system/checkzone/clean.sh b/bin/tests/system/checkzone/clean.sh
new file mode 100644 (file)
index 0000000..0e6f6b5
--- /dev/null
@@ -0,0 +1,17 @@
+# Copyright (C) 2011  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: clean.sh,v 1.2.2.2 2011/03/02 04:27:58 marka Exp $
+
+rm -f test.out.*
diff --git a/bin/tests/system/checkzone/tests.sh b/bin/tests/system/checkzone/tests.sh
new file mode 100644 (file)
index 0000000..0ef10c3
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright (C) 2011  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: tests.sh,v 1.2.2.2 2011/03/02 04:27:59 marka Exp $
+
+SYSTEMTESTTOP=..
+. $SYSTEMTESTTOP/conf.sh
+
+status=0
+n=1
+
+for db in zones/good*.db
+do
+       echo "I:checking $db ($n)"
+       ret=0
+       $CHECKZONE example $db > test.out.$n 2>&1 || ret=1
+       n=`expr $n + 1`
+       if [ $ret != 0 ]; then echo "I:failed"; fi
+       status=`expr $status + $ret`
+done
+
+exit $status
diff --git a/bin/tests/system/checkzone/zones/good1.db b/bin/tests/system/checkzone/zones/good1.db
new file mode 100644 (file)
index 0000000..a5613e7
--- /dev/null
@@ -0,0 +1,25 @@
+; Copyright (C) 2011  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: good1.db,v 1.2.2.2 2011/03/02 04:27:59 marka Exp $
+
+
+$TTL 600
+@              SOA     ns hostmaster 2011012708 3600 1200 604800 1200
+                NS      ns
+ns             A       192.0.2.1
+
+ns-and-dname   NS      ns.ns-and-dname
+               DNAME   example.com.
+ns.ns-and-dname        A       203.178.141.207
index f6d48486b0b0072bb5061d6c367fdbc42e7a4030..9ade3e911e31b1d980ed21f2120ba42c032879a8 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: rbtdb.c,v 1.310.8.1 2011/02/18 23:23:08 each Exp $ */
+/* $Id: rbtdb.c,v 1.310.8.2 2011/03/02 04:25:15 marka Exp $ */
 
 /*! \file */
 
@@ -2686,10 +2686,15 @@ zone_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) {
        /*
         * Did we find anything?
         */
-       if (dname_header != NULL) {
+       if (!IS_CACHE(search->rbtdb) && !IS_STUB(search->rbtdb) &&
+           ns_header != NULL) {
                /*
-                * Note that DNAME has precedence over NS if both exist.
+                * Note that NS has precedence over DNAME if both exist
+                * in a zone.  Otherwise DNAME take precedence over NS.
                 */
+               found = ns_header;
+               search->zonecut_sigrdataset = NULL;
+       } else if (dname_header != NULL) {
                found = dname_header;
                search->zonecut_sigrdataset = sigdname_header;
        } else if (ns_header != NULL) {