Commit ff3a2e35 authored by Dima Volodin's avatar Dima Volodin
Browse files

[1386] EDNS TCP fallback disabled. NB: I still think it might be

	useful in DNSSEC situation when the resolver fully supports
	DNSSEC-aware clients.
parent 7d90bbbc
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
......
......@@ -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);
}
......
......@@ -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";
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment