// 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.
Context context;
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, context);
setCacheOnly(oldCacheOnly);
setQNameMinimization(oldQM);
return old;
}
+ bool setQMFallbackMode(bool state = true)
+ {
+ auto old = d_qNameMinimizationFalbackMode;
+ d_qNameMinimizationFalbackMode = state;
+ return old;
+ }
+
+ bool getQMFallbackMode() const
+ {
+ return d_qNameMinimizationFalbackMode;
+ }
+
void setDoEDNS0(bool state = true)
{
d_doEDNS0 = state;
bool d_wasOutOfBand{false};
bool d_wasVariable{false};
bool d_qNameMinimization{false};
+ bool d_qNameMinimizationFalbackMode{false};
bool d_queryReceivedOverTCP{false};
bool d_followCNAME{true};
bool d_refresh{false};