]> granicus.if.org Git - pdns/commitdiff
treat an initial Refused or NotImp as an indication of not supporting EDNS-PING.
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 16 May 2009 15:28:01 +0000 (15:28 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 16 May 2009 15:28:01 +0000 (15:28 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1355 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/syncres.cc

index 51369b42e8d6a2348565357009cb08d61b27b18c..ac319f73ec01e44d868fea847a817affbf96f7c2 100644 (file)
@@ -270,7 +270,7 @@ int SyncRes::asyncresolveWrapper(const ComboAddress& ip, const string& domain, i
     if(mode== EDNSStatus::CONFIRMEDPINGER) {  // confirmed pinger!
       if(!res->d_pingCorrect) {
        L<<Logger::Error<<"Confirmed EDNS-PING enabled host "<<ip.toString()<<" did not send back correct ping"<<endl;
-       // perhaps lower some kind of count here, don't want to punnish a downgrader too long!
+       //      perhaps lower some kind of count here, don't want to punnish a downgrader too long!
        ret = 0;
        res->d_rcode = RCode::ServFail;
        g_stats.ednsPingMismatches++;
@@ -282,7 +282,12 @@ int SyncRes::asyncresolveWrapper(const ComboAddress& ip, const string& domain, i
     }
     else if(mode==EDNSStatus::UNKNOWN || mode==EDNSStatus::EDNSPINGOK || mode == EDNSStatus::EDNSIGNORANT ) {
       if(res->d_rcode == RCode::FormErr)  {
-       // cerr<<"Downgrading to EDNSNOPING because of FORMERR!"<<endl;
+       //      cerr<<"Downgrading to EDNSNOPING because of FORMERR!"<<endl;
+       mode = EDNSStatus::EDNSNOPING;
+       continue;
+      }
+      else if(mode==EDNSStatus::UNKNOWN && (res->d_rcode == RCode::Refused || res->d_rcode == RCode::NotImp) ) { // this "fixes" F5
+       //      cerr<<"Downgrading an unknown status to EDNSNOPING because of RCODE="<<res->d_rcode<<endl;
        mode = EDNSStatus::EDNSNOPING;
        continue;
       }
@@ -302,7 +307,7 @@ int SyncRes::asyncresolveWrapper(const ComboAddress& ip, const string& domain, i
     }
     else if(mode==EDNSStatus::EDNSNOPING) {
       if(res->d_rcode == RCode::FormErr) {
-       //      cerr<<"Downgrading to mode 4, FORMERR!"<<endl;
+       //              cerr<<"Downgrading to mode 4, FORMERR!"<<endl;
        mode = EDNSStatus::NOEDNS;
        continue;
       }
@@ -316,7 +321,7 @@ int SyncRes::asyncresolveWrapper(const ComboAddress& ip, const string& domain, i
     }
     if(oldmode != mode)
       ednsstatus.modeSetAt=d_now.tv_sec;
-    //    cerr<<"Result: ret="<<ret<<", EDNS-level: "<<EDNSLevel<<", haveEDNS: "<<res->d_haveEDNS<<", EDNS-PING correct: "<<res->d_pingCorrect<<", new mode: "<<mode<<endl;  
+    //        cerr<<"Result: ret="<<ret<<", EDNS-level: "<<EDNSLevel<<", haveEDNS: "<<res->d_haveEDNS<<", EDNS-PING correct: "<<res->d_pingCorrect<<", new mode: "<<mode<<endl;  
     
     return ret;
   }