]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[1386] EDNS TCP fallback disabled. NB: I still think it might be
authorDima Volodin <dvv@isc.org>
Mon, 19 Dec 2011 16:41:31 +0000 (11:41 -0500)
committerDima Volodin <dvv@isc.org>
Mon, 19 Dec 2011 16:41:31 +0000 (11:41 -0500)
useful in DNSSEC situation when the resolver fully supports
DNSSEC-aware clients.

ChangeLog
src/lib/resolve/recursive_query.cc
src/lib/resolve/tests/recursive_query_unittest_3.cc

index 2a48f63af4abd7c3cc35adc3dd467cf262ad91d4..e918c15347ff1e787e936f00f537d4cf6c185397 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 xxx.   [bug]           dvv
-       resolver: EDNS fallback on FORMERR
+       resolver: If an upstream server responds with FORMERR to an EDNS query,
+       try querying it without EDNS.
        (Trac #1386, git TBD)
 
 342.   [bug]           stephen
index 3b339436badb88771833d0575d59877a65fcd6e2..a00f17fc342865fba376eb09e35a3d3b94c991d7 100644 (file)
@@ -558,11 +558,9 @@ private:
             // see if it's a FORMERR and a potential EDNS problem
             if (incoming.getRcode() == Rcode::FORMERR()) {
                 if (protocol_ == IOFetch::UDP && edns_) {
-                    // try EDNS over TCP
-                    send(IOFetch::TCP, true);
-                    return (false);
-                } else if (protocol_ == IOFetch::TCP && edns_) {
-                    // try UDP, no EDNS
+                    // TODO: in case we absolutely need EDNS (i.e. for DNSSEC
+                    // aware queries), we might want to try TCP before we give
+                    // up. For now, just try UDP, no EDNS
                     send(IOFetch::UDP, false);
                     return (false);
                 }
index bcf472cdeef49352b580e75373089f71edc8bd0b..3602b037447fb40ce860b4f720321cb6ec5f8443 100644 (file)
@@ -101,8 +101,7 @@ public:
     enum QueryStatus {
         NONE = 0,                   ///< Default
         EDNS_UDP = 1,               ///< EDNS query over UDP
-        EDNS_TCP = 2,               ///< EDNS query over TCP
-        NON_EDNS_UDP = 3,           ///< Non-EDNS query over UDP
+        NON_EDNS_UDP = 2,           ///< Non-EDNS query over UDP
         COMPLETE = 6                ///< Query is complete
     };
 
@@ -225,7 +224,7 @@ public:
             EXPECT_TRUE(query.getEDNS());
             // Return FORMERROR
             setFORMERR(message);
-            expected_ = EDNS_TCP;
+            expected_ = NON_EDNS_UDP;
             break;
 
         case NON_EDNS_UDP:
@@ -346,14 +345,7 @@ public:
 
         // Set up state-dependent bits:
         switch (expected_) {
-        case EDNS_TCP:
-            EXPECT_TRUE(query.getEDNS());
-            // Return FORMERROR
-            setFORMERR(message);
-            expected_ = NON_EDNS_UDP;
-            break;
-
-         default:
+        default:
             FAIL() << "TcpReceiveHandler called with unknown state";
         }