From a3cee5460d00a1e95dcb6064277b644458b82e9f Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 29 Aug 2016 11:56:56 -0700 Subject: [PATCH] Plug a geoip leak and some cleanup [RT #43106] (cherry picked from commit a26a62cef2adba0520c5955d740fc75fa7f2c7f5) (cherry picked from commit af326c2e3f90d86a8966a1298d7aa157667f97cd) --- bin/dig/dighost.c | 6 ++++++ bin/named/client.c | 22 +++++++++++++++------- bin/named/geoip.c | 4 +++- bin/tests/system/cacheclean/tests.sh | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 86c5bbffaa..1eae256530 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -4595,27 +4595,33 @@ chase_scanname(dns_name_t *name, dns_rdatatype_t type, dns_rdatatype_t covers) msg = ISC_LIST_NEXT(msg, link)) { if (dns_message_firstname(msg->msg, DNS_SECTION_ANSWER) == ISC_R_SUCCESS) + { rdataset = chase_scanname_section(msg->msg, name, type, covers, DNS_SECTION_ANSWER); if (rdataset != NULL) return (rdataset); + } if (dns_message_firstname(msg->msg, DNS_SECTION_AUTHORITY) == ISC_R_SUCCESS) + { rdataset = chase_scanname_section(msg->msg, name, type, covers, DNS_SECTION_AUTHORITY); if (rdataset != NULL) return (rdataset); + } if (dns_message_firstname(msg->msg, DNS_SECTION_ADDITIONAL) == ISC_R_SUCCESS) + { rdataset = chase_scanname_section(msg->msg, name, type, covers, DNS_SECTION_ADDITIONAL); if (rdataset != NULL) return (rdataset); + } } return (NULL); diff --git a/bin/named/client.c b/bin/named/client.c index 065ec65d78..7d45528c7d 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -3171,7 +3171,6 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t *category, isc_logmodule_t *module, int level, const char *fmt, va_list ap) { char msgbuf[4096]; - char peerbuf[ISC_SOCKADDR_FORMATSIZE]; char signerbuf[DNS_NAME_FORMATSIZE], qnamebuf[DNS_NAME_FORMATSIZE]; const char *viewname = ""; const char *sep1 = "", *sep2 = "", *sep3 = "", *sep4 = ""; @@ -3180,8 +3179,6 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t *category, vsnprintf(msgbuf, sizeof(msgbuf), fmt, ap); - ns_client_name(client, peerbuf, sizeof(peerbuf)); - if (client->signer != NULL) { dns_name_format(client->signer, signerbuf, sizeof(signerbuf)); sep1 = "/key "; @@ -3203,10 +3200,21 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t *category, viewname = client->view->name; } - isc_log_write(ns_g_lctx, category, module, level, - "client %s%s%s%s%s%s%s%s: %s", - peerbuf, sep1, signer, sep2, qname, sep3, - sep4, viewname, msgbuf); + if (client->peeraddr_valid) { + char peerbuf[ISC_SOCKADDR_FORMATSIZE]; + + isc_sockaddr_format(&client->peeraddr, + peerbuf, sizeof(peerbuf)); + isc_log_write(ns_g_lctx, category, module, level, + "client @%p %s%s%s%s%s%s%s%s: %s", + client, peerbuf, sep1, signer, sep2, qname, sep3, + sep4, viewname, msgbuf); + } else { + isc_log_write(ns_g_lctx, category, module, level, + "client @%p%s%s%s%s%s%s%s: %s", + client, sep1, signer, sep2, qname, sep3, + sep4, viewname, msgbuf); + } } void diff --git a/bin/named/geoip.c b/bin/named/geoip.c index 11fc96efed..02042ab0a0 100644 --- a/bin/named/geoip.c +++ b/bin/named/geoip.c @@ -68,10 +68,12 @@ init_geoip_db(GeoIP **dbp, GeoIPDBTypes edition, GeoIPDBTypes fallback, } info = GeoIP_database_info(db); - if (info != NULL) + if (info != NULL) { isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_INFO, "%s", info); + free(info); + } *dbp = db; return; diff --git a/bin/tests/system/cacheclean/tests.sh b/bin/tests/system/cacheclean/tests.sh index 29516366ee..57586d686e 100644 --- a/bin/tests/system/cacheclean/tests.sh +++ b/bin/tests/system/cacheclean/tests.sh @@ -91,7 +91,7 @@ grep ";" dig.out.ns2 $PERL ../digcomp.pl --lc dig.out.ns2 knowngood.dig.out || status=1 echo "I:only one tcp socket was used" -tcpclients=`grep "client 10.53.0.7#[0-9]*:" ns2/named.run | awk '{print $4}' | sort | uniq -c | wc -l` +tcpclients=`awk '$3 == "client" && $5 ~ /10.53.0.7#[0-9]*:/ {print $5}' ns2/named.run | sort | uniq -c | wc -l` test $tcpclients -eq 1 || { status=1; echo "I:failed"; }