From: Mark Andrews Date: Mon, 1 Feb 2021 02:05:08 +0000 (+1100) Subject: Check that there was no OPT record before falling back X-Git-Tag: v9.17.17~36^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a3fda086f7af09271a0261587563b5f36516f40d;p=thirdparty%2Fbind9.git Check that there was no OPT record before falling back to plain DNS on FORMERR. --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 847ead38a85..ebc7fbc2cfc 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -10005,7 +10005,7 @@ rctx_badserver(respctx_t *rctx, isc_result_t result) { return (ISC_R_SUCCESS); } - if ((rcode == dns_rcode_formerr) && + if ((rcode == dns_rcode_formerr) && rctx->opt == NULL && (rctx->retryopts & DNS_FETCHOPT_NOEDNS0) == 0) { /* diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 70528f448b8..6f32655a187 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -13606,7 +13606,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) { if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS) && (msg->rcode == dns_rcode_servfail || msg->rcode == dns_rcode_notimp || - msg->rcode == dns_rcode_formerr)) + (msg->rcode == dns_rcode_formerr && msg->opt == NULL))) { dns_zone_log(zone, ISC_LOG_DEBUG(1), "refreshing stub: rcode (%.*s) retrying " @@ -13995,7 +13995,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) { if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS) && (msg->rcode == dns_rcode_servfail || msg->rcode == dns_rcode_notimp || - msg->rcode == dns_rcode_formerr)) + (msg->rcode == dns_rcode_formerr && msg->opt == NULL))) { dns_zone_log(zone, ISC_LOG_DEBUG(1), "refresh: rcode (%.*s) retrying without "