Fix assertion failure during startup when the server is under load.
When we're coming back from recursion fetch_callback does not accept DNS_R_NXDOMAIN as an rcode - query_gotanswer calls query_nxdomain in which an assertion fails on qctx->is_zone. Yet, under some circumstances, qname minimization will return an DNS_R_NXDOMAIN - when root zone mirror is not yet loaded. The fix changes the DNS_R_NXDOMAIN answer to DNS_R_SERVFAIL.
This commit is contained in:
committed by
Ondřej Surý
parent
ee7bc2163f
commit
b4f3fafcff
@@ -4397,6 +4397,15 @@ resume_qmin(isc_task_t *task, isc_event_t *event) {
|
||||
fctx->now, findoptions, true, true,
|
||||
&fctx->nameservers, NULL);
|
||||
|
||||
/*
|
||||
* DNS_R_NXDOMAIN here means we have not loaded the root zone mirror
|
||||
* yet - but DNS_R_NXDOMAIN is not a valid return value when doing
|
||||
* recursion, we need to patch it.
|
||||
*/
|
||||
if (result == DNS_R_NXDOMAIN) {
|
||||
result = DNS_R_SERVFAIL;
|
||||
}
|
||||
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fctx_done(fctx, result, __LINE__);
|
||||
goto cleanup;
|
||||
|
||||
Reference in New Issue
Block a user