diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index a1cf3c7fbf..25e402408e 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -8005,7 +8005,8 @@ resquery_response(isc_result_t eresult, isc_region_t *region, void *arg) { break; case DNS_R_DELEGATION: /* - * With NOFOLLOW we want to pass the result code. + * With NOFOLLOW we want to pass return + * DNS_R_DELEGATION to resume_qmin. */ if ((fctx->options & DNS_FETCHOPT_NOFOLLOW) == 0) { result = ISC_R_SUCCESS; @@ -8549,6 +8550,14 @@ rctx_answer(respctx_t *rctx) { } if (result == DNS_R_DELEGATION) { + /* + * With NOFOLLOW we want to return DNS_R_DELEGATION to + * resume_qmin. + */ + if ((rctx->fctx->options & DNS_FETCHOPT_NOFOLLOW) != 0) + { + return (result); + } result = ISC_R_SUCCESS; } else { /* @@ -8590,7 +8599,7 @@ rctx_answer_positive(respctx_t *rctx) { isc_result_t result; fetchctx_t *fctx = rctx->fctx; - FCTXTRACE("rctx_answer"); + FCTXTRACE("rctx_answer_positive"); rctx_answer_init(rctx); rctx_answer_scan(rctx);