]> granicus.if.org Git - pdns/commitdiff
improve MX-record parsing for additional processing, we used to be confused by numeri...
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 13 Apr 2006 20:29:42 +0000 (20:29 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 13 Apr 2006 20:29:42 +0000 (20:29 +0000)
make answer checking case insensitive

git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@692 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/lwres.cc
pdns/misc.cc
pdns/misc.hh
pdns/syncres.cc

index dee5974671176a3ed710f9bf592cb453a5a9c966..a70a77e77040bc3d7b6ed77304d3265ec596acbc 100644 (file)
@@ -141,7 +141,7 @@ LWRes::res_t LWRes::result()
     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;
index 4fb50c940372e23f1b1c12212a8d295e854a1f7d..4b9cf0fc25835c7e7b90093eac7455b603bb8ec7 100644 (file)
@@ -460,3 +460,16 @@ const struct timeval operator-(const struct timeval& lhs, const struct timeval&
   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;
+}
index c3ae854730015a2f7c7594c5ecdf744e8c7c4d16..2b612a9c04e4aa1f30ae426f9d429058ac8b3dc1 100644 (file)
@@ -306,5 +306,5 @@ struct CIStringCompare: public binary_function<string, string, bool>
     return result < 0;
   }
 };
-
+pair<string, string> splitField(const string& inp, char sepa);
 #endif
index 375b3711d44823e992ec777e4e012d5688eda773..f3d22415b383760520c3a582688bbfcce1829781 100644 (file)
@@ -641,17 +641,10 @@ void SyncRes::addCruft(const string &qname, vector<DNSResourceRecord>& 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);