]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Properly handle errors for DoH cross-protocol answers
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 22 Apr 2021 12:49:22 +0000 (14:49 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 26 Aug 2021 14:30:26 +0000 (16:30 +0200)
pdns/dnsdistdist/doh.cc

index e3807871ce7cc71a8c5e93abbd61b18df971516c..c0d8688dec556bf51edcd9c67c7146c17cac71e3 100644 (file)
@@ -1103,7 +1103,6 @@ static void dnsdistclient(int qsock)
         }
       }
       else {
-        cerr<<"leaving existing EDNS in place"<<endl;
         // we leave existing EDNS in place
       }
 
@@ -1191,12 +1190,22 @@ public:
 
   void handleXFRResponse(const struct timeval& now, TCPResponse&& response) override
   {
-    throw std::runtime_error("Oops");
+    return handleResponse(now, std::move(response));
   }
 
   void notifyIOError(IDState&& query, const struct timeval& now) override
   {
-    throw std::runtime_error("Oops");
+    if (!du) {
+      return;
+    }
+
+    if (du->rsock == -1) {
+      return;
+    }
+
+    du->status_code = 502;
+    sendDoHUnitToTheMainThread(du, "cross-protocol error response");
+    du->release();
   }
 
 private: