3283. [bug] Raw zones with with more than 512 records in a RRset

failed to load. [RT #27863]
This commit is contained in:
Mark Andrews
2012-02-13 23:46:24 +00:00
parent 3f261b3f7d
commit 4c34112a69
9 changed files with 80 additions and 12 deletions

View File

@@ -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]

View File

@@ -14,15 +14,18 @@
# 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.11 2012/02/13 23:46:23 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

View File

@@ -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.10 2012/02/13 23:46:24 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

View File

@@ -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 2012/02/13 23:46:24 marka Exp $
$TTL 1D
@ IN SOA ns hostmaster (
1
3600
1800
1814400
3
)
NS ns
ns A 10.53.0.1

View 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.8 2012/02/13 23:46:24 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; };
};

View 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.7 2012/02/13 23:46:24 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";
};

View File

@@ -12,11 +12,17 @@
# 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.10 2012/02/13 23:46:23 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

View File

@@ -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.12 2012/02/01 23:46:51 tbox Exp $
# $Id: tests.sh,v 1.13 2012/02/13 23:46:23 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

View File

@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: master.c,v 1.183 2012/01/31 23:47:32 tbox Exp $ */
/* $Id: master.c,v 1.184 2012/02/13 23:46:24 marka Exp $ */
/*! \file */
@@ -2292,14 +2292,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;
}
@@ -2756,6 +2756,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++;
@@ -2768,6 +2769,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++;
@@ -2811,6 +2813,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++;
@@ -2830,13 +2833,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);