]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2144. [cleanup] Suppress logging of SERVFAIL from forwarders.
authorMark Andrews <marka@isc.org>
Mon, 26 Feb 2007 01:07:49 +0000 (01:07 +0000)
committerMark Andrews <marka@isc.org>
Mon, 26 Feb 2007 01:07:49 +0000 (01:07 +0000)
                        [RT #16619]

CHANGES
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index af49a9081afd285d53655772b118606fbb3f5c10..adda5fcfe3a08229ef2514f6c53589b12ca8e6b6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2144.  [cleanup]       Suppress logging of SERVFAIL from forwarders.
+                       [RT #16619]
+
 2143.  [bug]           We failed to restart the IPv6 client when the
                        kernel failed to return the destination the
                        packet was sent to. [RT #16613]
index 491270d9d63bbfd91e7e242f24c53d229d9a34da..1a0b40c9165dea648aee314b4da665e7d07910d0 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.343 2007/02/14 23:40:01 marka Exp $ */
+/* $Id: resolver.c,v 1.344 2007/02/26 01:07:49 marka Exp $ */
 
 /*! \file */
 
@@ -1896,7 +1896,7 @@ mark_bad(fetchctx_t *fctx) {
 }
 
 static void
-add_bad(fetchctx_t *fctx, isc_sockaddr_t *address, isc_result_t reason) {
+add_bad(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, isc_result_t reason) {
        char namebuf[DNS_NAME_FORMATSIZE];
        char addrbuf[ISC_SOCKADDR_FORMATSIZE];
        char classbuf[64];
@@ -1905,6 +1905,7 @@ add_bad(fetchctx_t *fctx, isc_sockaddr_t *address, isc_result_t reason) {
        isc_buffer_t b;
        isc_sockaddr_t *sa;
        const char *sep1, *sep2;
+       isc_sockaddr_t *address = &addrinfo->sockaddr;
 
        if (bad_server(fctx, address)) {
                /*
@@ -1925,6 +1926,11 @@ add_bad(fetchctx_t *fctx, isc_sockaddr_t *address, isc_result_t reason) {
        if (reason == DNS_R_LAME)       /* already logged */
                return;
 
+       if (reason == DNS_R_UNEXPECTEDRCODE && 
+           fctx->rmessage->opcode == dns_rcode_servfail &&
+           ISFORWARDER(addrinfo))
+               return;
+
        if (reason == DNS_R_UNEXPECTEDRCODE) {
                isc_buffer_init(&b, code, sizeof(code) - 1);
                dns_rcode_totext(fctx->rmessage->rcode, &b);
@@ -3496,7 +3502,7 @@ validated(isc_task_t *task, isc_event_t *event) {
                if (result == ISC_R_SUCCESS)
                        dns_db_detachnode(fctx->cache, &node);
                result = vevent->result;
-               add_bad(fctx, &addrinfo->sockaddr, result);
+               add_bad(fctx, addrinfo, result);
                isc_event_free(&event);
                UNLOCK(&fctx->res->buckets[fctx->bucketnum].lock);
                if (!ISC_LIST_EMPTY(fctx->validators))
@@ -5885,7 +5891,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                         * Add this server to the list of bad servers for
                         * this fctx.
                         */
-                       add_bad(fctx, &addrinfo->sockaddr, broken_server);
+                       add_bad(fctx, addrinfo, broken_server);
                }
 
                if (get_nameservers) {
@@ -5967,7 +5973,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                        fctx_done(fctx, result);
        } else if (result == DNS_R_CHASEDSSERVERS) {
                unsigned int n;
-               add_bad(fctx, &addrinfo->sockaddr, result);
+               add_bad(fctx, addrinfo, result);
                fctx_cancelqueries(fctx, ISC_TRUE);
                fctx_cleanupfinds(fctx);
                fctx_cleanupforwaddrs(fctx);