]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3283. [bug] Raw zones with with more than 512 records in a RRset
authorMark Andrews <marka@isc.org>
Mon, 13 Feb 2012 23:51:51 +0000 (23:51 +0000)
committerMark Andrews <marka@isc.org>
Mon, 13 Feb 2012 23:51:51 +0000 (23:51 +0000)
                        failed to load. [RT #27863]

CHANGES
bin/tests/system/masterformat/clean.sh
bin/tests/system/masterformat/ns1/compile.sh
bin/tests/system/masterformat/ns1/large.db.in [new file with mode: 0644]
bin/tests/system/masterformat/ns1/named.conf
bin/tests/system/masterformat/ns2/named.conf
bin/tests/system/masterformat/setup.sh
bin/tests/system/masterformat/tests.sh
lib/dns/master.c

diff --git a/CHANGES b/CHANGES
index dbf57e2858ec69fb213aaac09ae814c2e1fa7cab..ded4d3f82e4f8009bf060d41db2368701d208750 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3283.  [bug]           Raw zones with with more than 512 records in a RRset
+                       failed to load. [RT #27863]
+
 3282.  [bug]           Restrict the TTL of NS RRset to no more than that
                        of the old NS RRset when replacing it. [RT #27792]
 
index 5c2f13d939ce7a9574d6f3d6393d2b0445642ef5..4091e5f4782f47caf9570b3f0fac53addcc92dad 100755 (executable)
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: clean.sh,v 1.10 2011/12/22 07:32:40 each Exp $
+# $Id: clean.sh,v 1.10.20.1 2012/02/13 23:51:50 marka Exp $
 
 rm -f named-compilezone
 rm -f ns1/example.db.raw*
 rm -f ns1/example.db.compat
 rm -f ns1/example.db.serial.raw
-rm -f ns2/example.db
+rm -f ns1/large.db ns1/large.db.raw
 rm -f dig.out.*
+rm -f dig.out
 rm -f */named.memstats
+rm -f ns2/example.db
 rm -f ns2/transfer.db.*
 rm -f ns2/formerly-text.db
 rm -f ns2/db-*
+rm -f ns2/large.bk
index e778997b21a7fa194643a435a94e86fedb0304a3..de3ce122f27dd2d4fa7afeadb1b9ec2a5794e01d 100755 (executable)
@@ -12,7 +12,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: compile.sh,v 1.9 2011/12/22 07:32:40 each Exp $
+# $Id: compile.sh,v 1.9.20.1 2012/02/13 23:51:51 marka Exp $
 
 ../named-compilezone -D -F raw -o example.db.raw example \
         example.db > /dev/null 2>&1
@@ -22,3 +22,4 @@
         example.db > /dev/null 2>&1
 ../named-compilezone -D -F raw -L 3333 -o example.db.serial.raw example \
         example.db > /dev/null 2>&1
+../named-compilezone -D -F raw -o large.db.raw large large.db > /dev/null 2>&1
diff --git a/bin/tests/system/masterformat/ns1/large.db.in b/bin/tests/system/masterformat/ns1/large.db.in
new file mode 100644 (file)
index 0000000..19c076d
--- /dev/null
@@ -0,0 +1,27 @@
+; Copyright (C) 2005, 2007  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: large.db.in,v 1.2.2.2 2012/02/13 23:51:51 marka Exp $
+
+$TTL 1D
+
+@                      IN SOA  ns hostmaster (
+                               1
+                               3600
+                               1800
+                               1814400
+                               3
+                               )
+                       NS      ns
+ns                     A       10.53.0.1
index b16c7000bacae2dd3a6eddb6324c10de320d3231..0b57454385fc5eaef1f55649c72e57f4c9468367 100644 (file)
@@ -14,7 +14,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: named.conf,v 1.7 2011/12/08 16:07:20 each Exp $ */
+/* $Id: named.conf,v 1.7.36.1 2012/02/13 23:51:51 marka Exp $ */
 
 // NS1
 
@@ -59,3 +59,10 @@ zone "transfer3" {
         file "example.db";
         allow-transfer { any; };
 };
+
+zone "large" {
+        type master;
+        file "large.db.raw";
+       masterfile-format raw;
+        allow-transfer { any; };
+};
index 6f2c0d2756a345605cd115c9a3e0e70773f32865..b1c5d1fbd7c81e58de196e38af73cd41f74f1f53 100644 (file)
@@ -14,7 +14,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: named.conf,v 1.6 2011/10/26 23:46:15 tbox Exp $ */
+/* $Id: named.conf,v 1.6.98.1 2012/02/13 23:51:51 marka Exp $ */
 
 // NS2
 
@@ -53,3 +53,10 @@ zone "transfer3" {
         masters { 10.53.0.1; };
         file "formerly-text.db";
 };
+
+zone "large" {
+        type slave;
+        masters { 10.53.0.1; };
+        masterfile-format raw;
+        file "large.bk";
+};
index ba014a20b1d25e315344e8c38470db940e373e25..d056a4e2cd81d045200e762f6f19b746b844bec1 100755 (executable)
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: setup.sh,v 1.9 2011/12/08 16:07:20 each Exp $
+# $Id: setup.sh,v 1.9.36.1 2012/02/13 23:51:50 marka Exp $
 
 rm -f named-compilezone
 ln -s $CHECKZONE named-compilezone
 rm -f ns1/example.db.raw
 cp ns1/example.db ns2/
 cp ns2/formerly-text.db.in ns2/formerly-text.db
+cp ns1/large.db.in ns1/large.db
+awk 'END {
+        for (i = 0; i < 512; i++ ) { print "a TXT", i; }
+        for (i = 0; i < 1024; i++ ) { print "b TXT", i; }
+        for (i = 0; i < 2000; i++ ) { print "c TXT", i; }
+}' < /dev/null >> ns1/large.db
 cd ns1 && sh compile.sh
index b14920ba3a94bf939fa9f728abd134418809a68a..410ffe088fae7e152a47d89881c7b977a2cdb19f 100755 (executable)
@@ -14,7 +14,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: tests.sh,v 1.10.20.2 2012/02/01 23:46:23 tbox Exp $
+# $Id: tests.sh,v 1.10.20.3 2012/02/13 23:51:51 marka Exp $
 
 SYSTEMTESTTOP=..
 . $SYSTEMTESTTOP/conf.sh
@@ -88,7 +88,7 @@ status=`expr $status + $ret`
 echo "I:waiting for transfers to complete"
 for i in 0 1 2 3 4 5 6 7 8 9
 do
-       test -f ns2/transfer.db.raw -a -f ns2/transfer.db.txt  && break
+       test -f ns2/transfer.db.raw -a -f ns2/transfer.db.txt && break
        sleep 1
 done
 
@@ -116,5 +116,15 @@ done
 [ $ret -eq 0 ] || echo "I:failed"
 status=`expr $status + $ret`
 
+echo "I:checking that large rdatasets loaded"
+ret=0
+for a in a b c
+do
+       $DIG +tcp txt ${a}.large @10.53.0.2 -p 5300 > dig.out
+       grep "status: NOERROR" dig.out > /dev/null || ret=1
+done
+[ $ret -eq 0 ] || echo "I:failed"
+status=`expr $status + $ret`
+
 echo "I:exit status: $status"
 exit $status
index a3e5b4eb4b404118e514c50f5fa7e940c5fba030..a136636fa56880e7ceb583ceabaa1f163449a959 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: master.c,v 1.181 2011/12/08 16:07:20 each Exp $ */
+/* $Id: master.c,v 1.181.36.1 2012/02/13 23:51:51 marka Exp $ */
 
 /*! \file */
 
@@ -2283,14 +2283,14 @@ load_raw(dns_loadctx_t *lctx) {
                if (rdcount > rdata_size) {
                        dns_rdata_t *new_rdata = NULL;
 
-                       new_rdata = grow_rdata(rdata_size + RDSZ, rdata,
+                       new_rdata = grow_rdata(rdcount + RDSZ, rdata,
                                               rdata_size, &head,
                                               &dummy, mctx);
                        if (new_rdata == NULL) {
                                result = ISC_R_NOMEMORY;
                                goto cleanup;
                        }
-                       rdata_size += RDSZ;
+                       rdata_size = rdcount + RDSZ;
                        rdata = new_rdata;
                }
 
@@ -2716,6 +2716,7 @@ grow_rdatalist(int new_len, dns_rdatalist_t *old, int old_len,
        }
        while ((this = ISC_LIST_HEAD(save)) != NULL) {
                ISC_LIST_UNLINK(save, this, link);
+               INSIST(rdlcount < new_len);
                new[rdlcount] = *this;
                ISC_LIST_APPEND(*current, &new[rdlcount], link);
                rdlcount++;
@@ -2728,6 +2729,7 @@ grow_rdatalist(int new_len, dns_rdatalist_t *old, int old_len,
        }
        while ((this = ISC_LIST_HEAD(save)) != NULL) {
                ISC_LIST_UNLINK(save, this, link);
+               INSIST(rdlcount < new_len);
                new[rdlcount] = *this;
                ISC_LIST_APPEND(*glue, &new[rdlcount], link);
                rdlcount++;
@@ -2771,6 +2773,7 @@ grow_rdata(int new_len, dns_rdata_t *old, int old_len,
                }
                while ((rdata = ISC_LIST_HEAD(save)) != NULL) {
                        ISC_LIST_UNLINK(save, rdata, link);
+                       INSIST(rdcount < new_len);
                        new[rdcount] = *rdata;
                        ISC_LIST_APPEND(this->rdata, &new[rdcount], link);
                        rdcount++;
@@ -2790,13 +2793,14 @@ grow_rdata(int new_len, dns_rdata_t *old, int old_len,
                }
                while ((rdata = ISC_LIST_HEAD(save)) != NULL) {
                        ISC_LIST_UNLINK(save, rdata, link);
+                       INSIST(rdcount < new_len);
                        new[rdcount] = *rdata;
                        ISC_LIST_APPEND(this->rdata, &new[rdcount], link);
                        rdcount++;
                }
                this = ISC_LIST_NEXT(this, link);
        }
-       INSIST(rdcount == old_len);
+       INSIST(rdcount == old_len || rdcount == 0);
        if (old != NULL)
                isc_mem_put(mctx, old, old_len * sizeof(*old));
        return (new);