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.
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;
}
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 {
/*
isc_result_t result;
fetchctx_t *fctx = rctx->fctx;
- FCTXTRACE("rctx_answer");
+ FCTXTRACE("rctx_answer_positive");
rctx_answer_init(rctx);
rctx_answer_scan(rctx);