]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Enable lame response detection even with disabled lame cache
authorOndřej Surý <ondrej@sury.org>
Fri, 24 Sep 2021 07:48:50 +0000 (09:48 +0200)
committerMichał Kępień <michal@isc.org>
Mon, 11 Oct 2021 10:50:46 +0000 (12:50 +0200)
Previously, when lame cache would be disabled by setting lame-ttl to 0,
it would also disable lame answer detection.  In this commit, we enable
the lame response detection even when the lame cache is disabled.  This
enables stopping answer processing early rather than going through the
whole answer processing flow.

lib/dns/resolver.c

index ebe45fa2061ddc0a4c20b0524d8265e68d0f02b7..0718f137f0c6fddef3d906ecd519c7baa2f6d88c 100644 (file)
@@ -10216,25 +10216,26 @@ rctx_badserver(respctx_t *rctx, isc_result_t result) {
  */
 static isc_result_t
 rctx_lameserver(respctx_t *rctx) {
-       isc_result_t result;
+       isc_result_t result = ISC_R_SUCCESS;
        fetchctx_t *fctx = rctx->fctx;
        resquery_t *query = rctx->query;
 
-       if (fctx->res->lame_ttl == 0 || ISFORWARDER(query->addrinfo) ||
-           !is_lame(fctx, query->rmessage))
-       {
+       if (ISFORWARDER(query->addrinfo) || !is_lame(fctx, query->rmessage)) {
                return (ISC_R_SUCCESS);
        }
 
        inc_stats(fctx->res, dns_resstatscounter_lame);
        log_lame(fctx, query->addrinfo);
-       result = dns_adb_marklame(fctx->adb, query->addrinfo, &fctx->name,
-                                 fctx->type, rctx->now + fctx->res->lame_ttl);
-       if (result != ISC_R_SUCCESS) {
-               isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
-                             DNS_LOGMODULE_RESOLVER, ISC_LOG_ERROR,
-                             "could not mark server as lame: %s",
-                             isc_result_totext(result));
+       if (fctx->res->lame_ttl != 0) {
+               result = dns_adb_marklame(fctx->adb, query->addrinfo,
+                                         &fctx->name, fctx->type,
+                                         rctx->now + fctx->res->lame_ttl);
+               if (result != ISC_R_SUCCESS) {
+                       isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
+                                     DNS_LOGMODULE_RESOLVER, ISC_LOG_ERROR,
+                                     "could not mark server as lame: %s",
+                                     isc_result_totext(result));
+               }
        }
        rctx->broken_server = DNS_R_LAME;
        rctx->next_server = true;