]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4193. [bug] Handle broken servers that return BADVERS incorrectly.
authorMark Andrews <marka@isc.org>
Tue, 25 Aug 2015 06:55:19 +0000 (16:55 +1000)
committerMark Andrews <marka@isc.org>
Tue, 25 Aug 2015 06:55:19 +0000 (16:55 +1000)
                        [RT #40427]

CHANGES
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index 772a8151a4f7d954780a115297db9b3e6aad032f..283da2e1a1234513518ce4f94bdbb291d82427f1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4193.  [bug]           Handle broken servers that return BADVERS incorrectly.
+                       [RT #40427]
+
 4192.  [bug]           The default rrset-order of random was not always being
                        applied. [RT #40456]
 
index b4448aa0f33c07bf19c6649d5957d632b3ba88dd..1aaca2b0620a8701c7099c09b1478b726bf83266 100644 (file)
@@ -7636,38 +7636,13 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                         */
                        result = DNS_R_YXDOMAIN;
                } else if (message->rcode == dns_rcode_badvers) {
-                       unsigned int flags, mask;
-                       unsigned int version;
-
-                       resend = ISC_TRUE;
-                       INSIST(opt != NULL);
-                       version = (opt->ttl >> 16) & 0xff;
-                       flags = (version << DNS_FETCHOPT_EDNSVERSIONSHIFT) |
-                               DNS_FETCHOPT_EDNSVERSIONSET;
-                       mask = DNS_FETCHOPT_EDNSVERSIONMASK |
-                              DNS_FETCHOPT_EDNSVERSIONSET;
-                       /*
-                        * Record that we got a good EDNS response.
-                        */
-                       if (query->ednsversion > (int)version &&
-                           !EDNSOK(query->addrinfo)) {
-                               dns_adb_changeflags(fctx->adb, query->addrinfo,
-                                                   FCTX_ADDRINFO_EDNSOK,
-                                                   FCTX_ADDRINFO_EDNSOK);
-                       }
                        /*
-                        * Record the supported EDNS version.
+                        * This should be impossible as we only send EDNS
+                        * version 0 requests and to return BADVERS you
+                        * need to support EDNS as it is a extended rcode.
                         */
-                       switch (version) {
-                       case 0:
-                               dns_adb_changeflags(fctx->adb, query->addrinfo,
-                                                   flags, mask);
-                               break;
-                       default:
-                               broken_server = DNS_R_BADVERS;
-                               keep_trying = ISC_TRUE;
-                               break;
-                       }
+                       broken_server = DNS_R_BADVERS;
+                       keep_trying = ISC_TRUE;
                } else {
                        /*
                         * XXXRTH log.