do {
dnameName.prependRawLabel(labels.back());
labels.pop_back();
+ if (dnameName == qname && qtype != QType::DNAME) { // The client does not want a DNAME, but we've reached the QNAME already. So there is no match
+ break;
+ }
LOG(prefix<<qname<<": Looking for DNAME cache hit of '"<<dnameName<<"|DNAME"<<"'"<<endl);
if (t_RC->get(d_now.tv_sec, dnameName, QType(QType::DNAME), !wasForwardRecurse && d_requireAuthData, &cset, d_cacheRemote, d_doDNSSEC ? &signatures : nullptr, d_doDNSSEC ? &authorityRecs : nullptr, &d_wasVariable, &state, &wasAuth) > 0) {
- if (dnameName != qname && qtype != QType::DNAME) {
- foundName = dnameName;
- foundQT = QType(QType::DNAME);
- break;
- }
+ foundName = dnameName;
+ foundQT = QType(QType::DNAME);
+ break;
}
} while(!labels.empty());
}