try {
#if HAVE_FIBER_SANITIZER
// Asan needs more stack
- ::arg().set("stack-size", "stack size per mthread") = "400000";
+ ::arg().set("stack-size", "stack size per mthread") = "600000";
#else
::arg().set("stack-size", "stack size per mthread") = "200000";
#endif
// Case 5: unexpected answer
QLOG("Step5: other rcode, last effort final resolve");
setQNameMinimization(false);
+ setQMFallbackMode(true);
+
// We might have hit a depth level check, but we still want to allow some recursion levels in the fallback
// no-qname-minimization case. This has the effect that a qname minimization fallback case might reach 150% of
// maxdepth.
vState state = vState::Indeterminate;
const bool oldCacheOnly = setCacheOnly(false);
- const bool oldQM = setQNameMinimization(true);
+ const bool oldQM = setQNameMinimization(!getQMFallbackMode());
int rcode = doResolve(zone, QType::DS, dsrecords, depth + 1, beenthere, state);
setCacheOnly(oldCacheOnly);
setQNameMinimization(oldQM);
return old;
}
+ bool setQMFallbackMode(bool state = true)
+ {
+ auto old = d_qNameMinimizationFallbackMode;
+ d_qNameMinimizationFallbackMode = state;
+ return old;
+ }
+
+ bool getQMFallbackMode() const
+ {
+ return d_qNameMinimizationFallbackMode;
+ }
+
void setDoEDNS0(bool state=true)
{
d_doEDNS0=state;
bool d_wasOutOfBand{false};
bool d_wasVariable{false};
bool d_qNameMinimization{false};
+ bool d_qNameMinimizationFallbackMode{false};
bool d_queryReceivedOverTCP{false};
bool d_followCNAME{true};
bool d_refresh{false};