+ 827. [bug] When an IXFR protocol error occurs, the slave
+ should retry with AXFR.
+
+ 826. [bug] Some IXFR protocol errors were not detected.
825. [bug] zone.c:ns_query() detached from the wrong zone
reference. [RT #1264]
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.h,v 1.76.2.2 2001/03/01 20:58:19 bwelling Exp $ */
+/* $Id: result.h,v 1.76.2.3 2001/05/14 03:22:08 marka Exp $ */
#ifndef DNS_RESULT_H
#define DNS_RESULT_H 1
#define DNS_R_SINGLETON (ISC_RESULTCLASS_DNS + 72)
#define DNS_R_HINTNXRRSET (ISC_RESULTCLASS_DNS + 73)
#define DNS_R_NOMASTERFILE (ISC_RESULTCLASS_DNS + 74)
+#define DNS_R_UNKNOWNPROTO (ISC_RESULTCLASS_DNS + 75)
+#define DNS_R_CLOCKSKEW (ISC_RESULTCLASS_DNS + 76)
+#define DNS_R_BADIXFR (ISC_RESULTCLASS_DNS + 77)
-#define DNS_R_NRESULTS 75 /* Number of results */
+#define DNS_R_NRESULTS 78 /* Number of results */
/*
* DNS wire format rcodes.
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbtdb.c,v 1.139.4.6 2001/03/27 00:12:30 bwelling Exp $ */
+/* $Id: rbtdb.c,v 1.139.4.7 2001/05/14 03:22:02 marka Exp $ */
/*
* Principal Author: Bob Halley
* to satisfy the deletion request.
*/
free_rdataset(rbtdb->common.mctx, newheader);
- result = DNS_R_UNCHANGED;
+ if ((options & DNS_DBSUB_EXACT) != 0)
+ result = DNS_R_NOTEXACT;
+ else
+ result = DNS_R_UNCHANGED;
}
if (result == ISC_R_SUCCESS && newrdataset != NULL)
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.c,v 1.84.2.2 2001/03/01 20:58:16 bwelling Exp $ */
+/* $Id: result.c,v 1.84.2.3 2001/05/14 03:22:04 marka Exp $ */
#include <config.h>
"not exact", /* 67 DNS_R_NOTEXACT */
"address blackholed", /* 68 DNS_R_BLACKHOLED */
"bad algorithm", /* 69 DNS_R_BADALG */
- "invalid use of a meta type", /* 70 DNS_R_METATYPE */
+ "invalid use of a meta type", /* 70 DNS_R_METATYPE */
"CNAME and other data", /* 71 DNS_R_CNAMEANDOTHER */
"multiple RRs of singleton type", /* 72 DNS_R_SINGLETON */
"hint nxrrset", /* 73 DNS_R_HINTNXRRSET */
- "no master file configured" /* 74 DNS_R_NOMASTERFILE */
+ "no master file configured", /* 74 DNS_R_NOMASTERFILE */
+
+ "unknown protocol", /* 75 DNS_R_UNKNOWNPROTO */
+ "clocks are unsynchronized", /* 76 DNS_R_CLOCKSKEW */
+ "IXFR failed" /* 77 DNS_R_BADIXFR */
};
static const char *rcode_text[DNS_R_NRCODERESULTS] = {
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: xfrin.c,v 1.109.2.2 2001/04/11 19:21:32 gson Exp $ */
+/* $Id: xfrin.c,v 1.109.2.3 2001/05/14 03:22:05 marka Exp $ */
#include <config.h>
ixfr_commit(dns_xfrin_ctx_t *xfr) {
isc_result_t result;
- ixfr_apply(xfr);
+ CHECK(ixfr_apply(xfr));
if (xfr->ver != NULL) {
/* XXX enter ready-to-commit state here */
if (xfr->ixfr.journal != NULL)
if (result != DNS_R_UPTODATE) {
xfrin_log(xfr, ISC_LOG_ERROR, "%s: %s",
msg, isc_result_totext(result));
+ if (xfr->is_ixfr)
+ /* Pass special result code to force AXFR retry */
+ result = DNS_R_BADIXFR;
}
xfrin_cancelio(xfr);
if (xfr->done != NULL) {
xfr->lasttsig = NULL;
xfr->tsigctx = NULL;
xfr->sincetsig = 0;
-
- /* is_ixfr */
+ xfr->is_ixfr = ISC_FALSE;
/* ixfr.request_serial */
/* ixfr.end_serial */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.c,v 1.283.2.10 2001/05/10 21:52:01 gson Exp $ */
+/* $Id: zone.c,v 1.283.2.11 2001/05/14 03:22:06 marka Exp $ */
#include <config.h>
#define DNS_ZONEFLG_DIALNOTIFY 0x00020000U
#define DNS_ZONEFLG_DIALREFRESH 0x00040000U
#define DNS_ZONEFLG_SHUTDOWN 0x00080000U
+#define DNS_ZONEFLAG_NOIXFR 0x00100000U /* IXFR failed, force AXFR */
#define DNS_ZONE_OPTION(z,o) (((z)->options & (o)) != 0)
break;
+ case DNS_R_BADIXFR:
+ /* Force retry with AXFR. */
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLAG_NOIXFR);
+ goto same_master;
+
default:
zone->curmaster++;
same_master:
"forced reload, requesting AXFR of "
"initial version from %s", mastertext);
xfrtype = dns_rdatatype_axfr;
+ } else if (DNS_ZONE_FLAG(zone, DNS_ZONEFLAG_NOIXFR)) {
+ zone_log(zone, me, ISC_LOG_DEBUG(3),
+ "retrying with AXFR from %s due to "
+ "previous IXFR failure", mastertext);
+ xfrtype = dns_rdatatype_axfr;
+ LOCK_ZONE(zone);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLAG_NOIXFR);
+ UNLOCK_ZONE(zone);
} else {
isc_boolean_t use_ixfr = ISC_TRUE;
if (peer != NULL &&
dns_zone_detach(&zone); /* XXXAG */
return;
-
}
/*