d_tcbit=mdp.d_header.tc;
d_rcode=mdp.d_header.rcode;
- if(d_domain != mdp.d_qname) {
+ if(strcasecmp(d_domain.c_str(), mdp.d_qname.c_str())) {
L<<Logger::Error<<"Packet purporting to come from remote server "<<U32ToIP(d_ip)<<" contained wrong answer: '" << d_domain << "' != '" << mdp.d_qname << "'" << endl;
g_stats.spoofedCount++;
goto out;
normalizeTV(ret);
return ret;
}
+
+pair<string, string> splitField(const string& inp, char sepa)
+{
+ pair<string, string> ret;
+ string::size_type cpos=inp.find(sepa);
+ if(cpos==string::npos)
+ ret.first=inp;
+ else {
+ ret.first=inp.substr(0, cpos);
+ ret.second=inp.substr(cpos+1);
+ }
+ return ret;
+}
LOG<<d_prefix<<qname<<": record '"<<k->content<<"|"<<k->qtype.getName()<<"' needs IP for additional processing"<<endl;
set<GetBestNSAnswer>beenthere;
if(k->qtype==QType(QType::MX)) {
- string::size_type pos=k->content.find_first_not_of(" \t0123456789"); // chop off the priority
- if(pos!=string::npos) {
- doResolve(k->content.substr(pos), QType(QType::A),addit,1,beenthere);
+ pair<string,string> prioServer=splitField(k->content,' ');
+ doResolve(prioServer.second, QType(QType::A), addit, 1, beenthere);
if(*l_doIPv6AP)
- doResolve(k->content.substr(pos), QType(QType::AAAA),addit,1,beenthere);
- }
- else {
- doResolve(k->content, QType(QType::A),addit,1,beenthere);
- if(*l_doIPv6AP)
- doResolve(k->content.substr(pos), QType(QType::AAAA),addit,1,beenthere);
- }
+ doResolve(prioServer.second, QType(QType::AAAA), addit, 1, beenthere);
}
else {
doResolve(k->content,QType(QType::A),addit,1,beenthere);