In rctx_answer return DNS_R_DELEGATION on NOFOLLOW

When DNS_FETCHOPT_NOFOLLOW is set DNS_R_DELEGATION needs to be
returned to restart the resolution process rather than converting
it to ISC_R_SUCCESS.

(cherry picked from commit ea11650376)
This commit is contained in:
Mark Andrews 2023-05-19 12:22:51 +10:00 committed by Ondřej Surý
parent 7f2eeb60ee
commit 5739b4817a
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41

View file

@ -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);