if(!dq.followupFunction.empty()) {
if(dq.followupFunction=="followCNAMERecords") {
- ret = followCNAMERecords(dq.records, QType(dq.qtype));
+ ret = followCNAMERecords(dq.records, QType(dq.qtype), ret);
}
else if(dq.followupFunction=="getFakeAAAARecords") {
ret=getFakeAAAARecords(dq.followupName, ComboAddress(dq.followupPrefix), dq.records);
}
#endif /* NOD_ENABLED */
-int followCNAMERecords(vector<DNSRecord>& ret, const QType& qtype)
+int followCNAMERecords(vector<DNSRecord>& ret, const QType& qtype, int rcode)
{
vector<DNSRecord> resolved;
DNSName target;
}
if(target.empty()) {
- return 0;
+ return rcode;
}
- int rcode = directResolve(target, qtype, QClass::IN, resolved);
+ rcode = directResolve(target, qtype, QClass::IN, resolved);
for(DNSRecord& rr : resolved) {
ret.push_back(std::move(rr));
ret = std::move(dc->d_records);
res = *dc->d_rcode;
if (res == RCode::NoError && dc->d_followCNAMERecords) {
- res = followCNAMERecords(ret, QType(dc->d_mdp.d_qtype));
+ res = followCNAMERecords(ret, QType(dc->d_mdp.d_qtype), res);
}
goto haveAnswer;
}
void distributeAsyncFunction(const std::string& question, const pipefunc_t& func);
int directResolve(const DNSName& qname, const QType& qtype, int qclass, vector<DNSRecord>& ret);
-int followCNAMERecords(std::vector<DNSRecord>& ret, const QType& qtype);
+int followCNAMERecords(std::vector<DNSRecord>& ret, const QType& qtype, int oldret);
int getFakeAAAARecords(const DNSName& qname, ComboAddress prefix, vector<DNSRecord>& ret);
int getFakePTRRecords(const DNSName& qname, vector<DNSRecord>& ret);