if(!d_skipCNAMECheck && doCNAMECacheCheck(qname, qtype, ret, depth, res, state, wasAuthZone, wasForwardRecurse)) { // will reroute us if needed
d_wasOutOfBand = wasAuthZone;
+ // Do not set *fromCache; res does not reflect the final result in all cases
return res;
}
newTarget = cnameContent->getTarget();
}
+ if (qname == newTarget) {
+ LOG(prefix<<qname<<": Got a CNAME referral (from cache) to self, returning SERVFAIL"<<endl);
+ res = RCode::ServFail;
+ return true;
+ }
+
set<GetBestNSAnswer>beenthere;
vState cnameState = Indeterminate;
res = doResolve(newTarget, qtype, ret, depth+1, beenthere, cnameState);