mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 22:15:20 +00:00
When retrying with AXFR after a failed IXFR, don't do a SOA query
over TCP before the AXFR request. Doing so has not been necessary since zone maintenance using UDP SOA queries was implemented in zone.c a long time ago.
This commit is contained in:
@@ -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.127 2001/09/12 20:39:36 bwelling Exp $ */
|
/* $Id: xfrin.c,v 1.128 2001/09/27 01:01:46 gson Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@@ -73,8 +73,6 @@
|
|||||||
* when the first two (2) response RRs have already been received.
|
* when the first two (2) response RRs have already been received.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
XFRST_SOAQUERY,
|
|
||||||
XFRST_GOTSOA,
|
|
||||||
XFRST_INITIALSOA,
|
XFRST_INITIALSOA,
|
||||||
XFRST_FIRSTDATA,
|
XFRST_FIRSTDATA,
|
||||||
XFRST_IXFR_DELSOA,
|
XFRST_IXFR_DELSOA,
|
||||||
@@ -418,31 +416,6 @@ xfr_rr(dns_xfrin_ctx_t *xfr, dns_name_t *name, isc_uint32_t ttl,
|
|||||||
|
|
||||||
redo:
|
redo:
|
||||||
switch (xfr->state) {
|
switch (xfr->state) {
|
||||||
case XFRST_SOAQUERY:
|
|
||||||
if (rdata->type != dns_rdatatype_soa) {
|
|
||||||
xfrin_log(xfr, ISC_LOG_ERROR,
|
|
||||||
"non-SOA response to SOA query");
|
|
||||||
FAIL(DNS_R_FORMERR);
|
|
||||||
}
|
|
||||||
xfr->end_serial = dns_soa_getserial(rdata);
|
|
||||||
if (!DNS_SERIAL_GT(xfr->end_serial,
|
|
||||||
xfr->ixfr.request_serial) &&
|
|
||||||
!dns_zone_isforced(xfr->zone)) {
|
|
||||||
xfrin_log(xfr, ISC_LOG_DEBUG(3),
|
|
||||||
"requested serial %u, "
|
|
||||||
"master has %u, not updating",
|
|
||||||
xfr->ixfr.request_serial, xfr->end_serial);
|
|
||||||
FAIL(DNS_R_UPTODATE);
|
|
||||||
}
|
|
||||||
xfr->state = XFRST_GOTSOA;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XFRST_GOTSOA:
|
|
||||||
/*
|
|
||||||
* Skip other records in the answer section.
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XFRST_INITIALSOA:
|
case XFRST_INITIALSOA:
|
||||||
if (rdata->type != dns_rdatatype_soa) {
|
if (rdata->type != dns_rdatatype_soa) {
|
||||||
xfrin_log(xfr, ISC_LOG_ERROR,
|
xfrin_log(xfr, ISC_LOG_ERROR,
|
||||||
@@ -1130,8 +1103,8 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
|
|||||||
try_axfr:
|
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_axfr;
|
||||||
xfr->state = XFRST_SOAQUERY;
|
xfr->state = XFRST_INITIALSOA;
|
||||||
xfrin_start(xfr);
|
xfrin_start(xfr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1233,11 +1206,7 @@ xfrin_recv_done(isc_task_t *task, isc_event_t *ev) {
|
|||||||
|
|
||||||
dns_message_destroy(&msg);
|
dns_message_destroy(&msg);
|
||||||
|
|
||||||
if (xfr->state == XFRST_GOTSOA) {
|
if (xfr->state == XFRST_END) {
|
||||||
xfr->reqtype = dns_rdatatype_axfr;
|
|
||||||
xfr->state = XFRST_INITIALSOA;
|
|
||||||
CHECK(xfrin_send_request(xfr));
|
|
||||||
} else if (xfr->state == XFRST_END) {
|
|
||||||
/*
|
/*
|
||||||
* Inform the caller we succeeded.
|
* Inform the caller we succeeded.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user