mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 22:45:39 +00:00
851. [bug] Handle responses from servers which do not know
about IXFR.
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -1,3 +1,6 @@
|
|||||||
|
851. [bug] Handle responses from servers which do not know
|
||||||
|
about IXFR.
|
||||||
|
|
||||||
851. [cleanup] support-ixfr is obsolete, use request-ixfr.
|
851. [cleanup] support-ixfr is obsolete, use request-ixfr.
|
||||||
|
|
||||||
850. [bug] dns_rbt_findnode() would not find nodes that were
|
850. [bug] dns_rbt_findnode() would not find nodes that were
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: xfrin.c,v 1.119 2001/05/31 10:38:01 tale Exp $ */
|
/* $Id: xfrin.c,v 1.120 2001/06/01 15:22:56 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@@ -1114,6 +1114,7 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
|
|||||||
FAIL(result);
|
FAIL(result);
|
||||||
xfrin_log(xfr, ISC_LOG_DEBUG(3), "got %s, retrying with AXFR",
|
xfrin_log(xfr, ISC_LOG_DEBUG(3), "got %s, retrying with AXFR",
|
||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
|
try_axfr:
|
||||||
dns_message_destroy(&msg);
|
dns_message_destroy(&msg);
|
||||||
xfrin_reset(xfr);
|
xfrin_reset(xfr);
|
||||||
xfr->reqtype = dns_rdatatype_soa;
|
xfr->reqtype = dns_rdatatype_soa;
|
||||||
@@ -1122,6 +1123,21 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Does the server know about IXFR? If it doesn't we will get
|
||||||
|
* a message with a empty answer section or a potentially a CNAME /
|
||||||
|
* DNAME, the later is handled by xfr_rr() which will return FORMERR
|
||||||
|
* if the first RR in the answer section is not a SOA record.
|
||||||
|
*/
|
||||||
|
if (xfr->reqtype == dns_rdatatype_ixfr &&
|
||||||
|
xfr->state == XFRST_INITIALSOA &&
|
||||||
|
msg->counts[DNS_SECTION_ANSWER] == 0) {
|
||||||
|
xfrin_log(xfr, ISC_LOG_DEBUG(3),
|
||||||
|
"empty answer section, retrying with AXFR");
|
||||||
|
goto try_axfr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
result = dns_message_checksig(msg, dns_zone_getview(xfr->zone));
|
result = dns_message_checksig(msg, dns_zone_getview(xfr->zone));
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
xfrin_log(xfr, ISC_LOG_DEBUG(3), "TSIG check failed: %s",
|
xfrin_log(xfr, ISC_LOG_DEBUG(3), "TSIG check failed: %s",
|
||||||
|
Reference in New Issue
Block a user