]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2079. [bug] The lame cache was not handling multiple types
authorMark Andrews <marka@isc.org>
Wed, 30 Aug 2006 23:09:18 +0000 (23:09 +0000)
committerMark Andrews <marka@isc.org>
Wed, 30 Aug 2006 23:09:18 +0000 (23:09 +0000)
                        correctly. [RT #16361]

CHANGES
lib/dns/adb.c
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index d7dceb51b8bb945c568d60cfb4858f87ec357dc1..96696962959b75b2212bc6709b98c2ddd23c0c67 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2079.  [bug]           The lame cache was not handling multiple types
+                       correctly. [RT #16361]
+
 2078.  [bug]           dnssec-checkzone output style "default" was badly
                        named.  It is now called "relative". [RT #16326]
 
index 1ef2c837561934ded65c70ff74bb9d17ca5a2e90..eb39266c867b7693b7ba6e45f22408b0f214c5e1 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: adb.c,v 1.226 2005/11/30 03:33:48 marka Exp $ */
+/* $Id: adb.c,v 1.227 2006/08/30 23:09:18 marka Exp $ */
 
 /*! \file 
  *
@@ -1675,12 +1675,13 @@ entry_is_lame(dns_adb_t *adb, dns_adbentry_t *entry, dns_name_t *qname,
 
                /*
                 * Order tests from least to most expensive.
+                *
+                * We do not break out of the main loop here as
+                * we use the loop for house keeping.
                 */
-               if (li != NULL && !is_bad) {
-                       if (li->qtype == qtype &&
-                           dns_name_equal(qname, &li->qname))
-                               is_bad = ISC_TRUE;
-               }
+               if (li != NULL && !is_bad && li->qtype == qtype &&
+                   dns_name_equal(qname, &li->qname))
+                       is_bad = ISC_TRUE;
 
                li = next_li;
        }
@@ -3356,8 +3357,8 @@ dns_adb_marklame(dns_adb_t *adb, dns_adbaddrinfo_t *addr, dns_name_t *qname,
        bucket = addr->entry->lock_bucket;
        LOCK(&adb->entrylocks[bucket]);
        li = ISC_LIST_HEAD(addr->entry->lameinfo);
-       while (li != NULL && li->qtype != qtype &&
-              !dns_name_equal(qname, &li->qname))
+       while (li != NULL &&
+              (li->qtype != qtype || !dns_name_equal(qname, &li->qname)))
                li = ISC_LIST_NEXT(li, plink);
        if (li != NULL) {
                if (expire_time > li->lame_timer)
index 5eeca8d7f8e506feed3d42668f313305e016d597..af7a59ac3eadcc66965c4e90d03daa9278573453 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.333 2006/08/22 06:11:19 marka Exp $ */
+/* $Id: resolver.c,v 1.334 2006/08/30 23:09:18 marka Exp $ */
 
 /*! \file */
 
@@ -5593,7 +5593,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
            is_lame(fctx)) {
                log_lame(fctx, query->addrinfo);
                result = dns_adb_marklame(fctx->adb, query->addrinfo,
-                                         &fctx->domain, fctx->type,
+                                         &fctx->name, fctx->type,
                                          now + fctx->res->lame_ttl);
                if (result != ISC_R_SUCCESS)
                        isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,