diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 847ead38a8..ebc7fbc2cf 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 70528f448b..6f32655a18 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 "