From 2113dfd6e20a9ca16000ed226517b4660087c1f2 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 30 Aug 2006 23:09:18 +0000 Subject: [PATCH] 2079. [bug] The lame cache was not handling multiple types correctly. [RT #16361] --- CHANGES | 3 +++ lib/dns/adb.c | 17 +++++++++-------- lib/dns/resolver.c | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index d7dceb51b8..9669696295 100644 --- 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] diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 1ef2c83756..eb39266c86 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -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) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 5eeca8d7f8..af7a59ac3e 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -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,