mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
3696. [bug] dig failed to handle AXFR style IXFR responses which
span multiple messages. [RT #35137]
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -1,3 +1,6 @@
|
|||||||
|
3696. [bug] dig failed to handle AXFR style IXFR responses which
|
||||||
|
span multiple messages. [RT #35137]
|
||||||
|
|
||||||
3695. [bug] Address a possible race in dispatch.c. [RT #35107]
|
3695. [bug] Address a possible race in dispatch.c. [RT #35107]
|
||||||
|
|
||||||
3694. [bug] Warn when a key-directory is configured for a zone,
|
3694. [bug] Warn when a key-directory is configured for a zone,
|
||||||
|
@@ -2330,6 +2330,7 @@ setup_lookup(dig_lookup_t *lookup) {
|
|||||||
query->rr_count = 0;
|
query->rr_count = 0;
|
||||||
query->msg_count = 0;
|
query->msg_count = 0;
|
||||||
query->byte_count = 0;
|
query->byte_count = 0;
|
||||||
|
query->ixfr_axfr = ISC_FALSE;
|
||||||
ISC_LIST_INIT(query->recvlist);
|
ISC_LIST_INIT(query->recvlist);
|
||||||
ISC_LIST_INIT(query->lengthlist);
|
ISC_LIST_INIT(query->lengthlist);
|
||||||
query->sock = NULL;
|
query->sock = NULL;
|
||||||
@@ -2982,6 +2983,9 @@ check_for_more_data(dig_query_t *query, dns_message_t *msg,
|
|||||||
isc_boolean_t ixfr = query->lookup->rdtype == dns_rdatatype_ixfr;
|
isc_boolean_t ixfr = query->lookup->rdtype == dns_rdatatype_ixfr;
|
||||||
isc_boolean_t axfr = query->lookup->rdtype == dns_rdatatype_axfr;
|
isc_boolean_t axfr = query->lookup->rdtype == dns_rdatatype_axfr;
|
||||||
|
|
||||||
|
if (ixfr)
|
||||||
|
axfr = query->ixfr_axfr;
|
||||||
|
|
||||||
debug("check_for_more_data()");
|
debug("check_for_more_data()");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3030,7 +3034,7 @@ check_for_more_data(dig_query_t *query, dns_message_t *msg,
|
|||||||
query->second_rr_rcvd = ISC_TRUE;
|
query->second_rr_rcvd = ISC_TRUE;
|
||||||
query->second_rr_serial = 0;
|
query->second_rr_serial = 0;
|
||||||
debug("got the second rr as nonsoa");
|
debug("got the second rr as nonsoa");
|
||||||
axfr = ISC_TRUE;
|
axfr = query->ixfr_axfr = ISC_TRUE;
|
||||||
goto next_rdata;
|
goto next_rdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -202,6 +202,7 @@ struct dig_query {
|
|||||||
isc_uint32_t second_rr_serial;
|
isc_uint32_t second_rr_serial;
|
||||||
isc_uint32_t msg_count;
|
isc_uint32_t msg_count;
|
||||||
isc_uint32_t rr_count;
|
isc_uint32_t rr_count;
|
||||||
|
isc_boolean_t ixfr_axfr;
|
||||||
char *servname;
|
char *servname;
|
||||||
char *userarg;
|
char *userarg;
|
||||||
isc_bufferlist_t sendlist,
|
isc_bufferlist_t sendlist,
|
||||||
|
@@ -22,3 +22,4 @@ rm -f ns3/*.jnl ns3/mytest.db ns3/subtest.db
|
|||||||
rm -f ns4/*.jnl ns4/*.db
|
rm -f ns4/*.jnl ns4/*.db
|
||||||
rm -f */named.memstats
|
rm -f */named.memstats
|
||||||
rm -f dig.out
|
rm -f dig.out
|
||||||
|
rm -f ns3/large.db
|
||||||
|
@@ -50,4 +50,8 @@ view "primary" {
|
|||||||
file "subtest.db";
|
file "subtest.db";
|
||||||
request-ixfr no;
|
request-ixfr no;
|
||||||
};
|
};
|
||||||
|
zone "large" IN {
|
||||||
|
type master;
|
||||||
|
file "large.db";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@@ -45,3 +45,5 @@ EOF
|
|||||||
# Setup initial db files for ns3
|
# Setup initial db files for ns3
|
||||||
cp ns3/mytest0.db ns3/mytest.db
|
cp ns3/mytest0.db ns3/mytest.db
|
||||||
cp ns3/subtest0.db ns3/subtest.db
|
cp ns3/subtest0.db ns3/subtest.db
|
||||||
|
sh ../genzone.sh 3 > ns3/large.db
|
||||||
|
awk 'END { for (i = 0; i < 10000; i++) printf("record%d 10 IN TXT this is record %d\n", i, i) }' < /dev/null >> ns3/large.db
|
||||||
|
@@ -237,6 +237,17 @@ else
|
|||||||
echo "I: success: IXFR it was"
|
echo "I: success: IXFR it was"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "I:testing DiG's handling of a multi message AXFR style IXFR response"
|
||||||
|
(
|
||||||
|
(sleep 10 && kill $$) 2>/dev/null &
|
||||||
|
sub=$!
|
||||||
|
$DIG ixfr=0 large -p 5300 @10.53.0.3 > dig.out
|
||||||
|
kill $sub
|
||||||
|
)
|
||||||
|
lines=`grep hostmaster.large dig.out | wc -l`
|
||||||
|
test ${lines:-0} -eq 2 || { echo "I:failed"; status=1; }
|
||||||
|
messages=`sed -n 's/^;;.*messages \([0-9]*\),.*/\1/p' dig.out`
|
||||||
|
test ${messages:-0} -gt 1 || { echo "I:failed"; status=1; }
|
||||||
|
|
||||||
echo "I:exit status: $status"
|
echo "I:exit status: $status"
|
||||||
exit $status
|
exit $status
|
||||||
|
Reference in New Issue
Block a user