]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
only set FCTX_ADDRINFO_NOSIT if we don't have a existing sit
authorMark Andrews <marka@isc.org>
Wed, 19 Mar 2014 20:17:00 +0000 (07:17 +1100)
committerMark Andrews <marka@isc.org>
Wed, 19 Mar 2014 20:17:00 +0000 (07:17 +1100)
lib/dns/resolver.c

index 068d0ced4eb3593ab04074aca02729ce1db0cf1f..9af5cbbfa3043a737842c1238d007d901841ca84 100644 (file)
@@ -7505,6 +7505,9 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                } else if (message->rcode == dns_rcode_badvers) {
                        unsigned int flags, mask;
                        unsigned int version;
+#ifdef ISC_PLATFORM_USESIT
+                       unsigned char sit[64];
+#endif
 
                        inc_stats(fctx->res, dns_resstatscounter_badvers);
 
@@ -7512,11 +7515,16 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                        /*
                         * Some servers return BADVERS to unknown
                         * EDNS options.  This cannot be long term
-                        * strategy.
+                        * strategy.  Do not disable SIT if we have
+                        * already have received a SIT from this
+                        * server.
                         */
-                       dns_adb_changeflags(fctx->adb, query->addrinfo,
-                                           FCTX_ADDRINFO_NOSIT,
-                                           FCTX_ADDRINFO_NOSIT);
+                       if (dns_adb_getsit(fctx->adb, query->addrinfo,
+                                          sit, sizeof(sit)) == 0U) {
+                               dns_adb_changeflags(fctx->adb, query->addrinfo,
+                                                   FCTX_ADDRINFO_NOSIT,
+                                                   FCTX_ADDRINFO_NOSIT);
+                       }
 #endif
 
                        resend = ISC_TRUE;