]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3042. [bug] dig +trace could fail attempting to use IPv6
authorEvan Hunt <each@isc.org>
Fri, 25 Feb 2011 23:08:33 +0000 (23:08 +0000)
committerEvan Hunt <each@isc.org>
Fri, 25 Feb 2011 23:08:33 +0000 (23:08 +0000)
addresses on systems with only IPv4 connectivity.
[RT# 23797]

CHANGES
bin/dig/dig.c
bin/dig/dighost.c
bin/dig/include/dig/dig.h

diff --git a/CHANGES b/CHANGES
index d32d390e429c1491f3c5b668ce9f0bf47489acba..1121c36bcf223001fbee9d06582e69bad1f19183 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+3042.  [bug]           dig +trace could fail attempting to use IPv6
+                       addresses on systems with only IPv4 connectivity.
+                       [RT# 23797]
+
 3041.  [bug]           dnssec-signzone failed to generate new signatures on
                        ttl changes. [RT #23330]
 
index 59db70105ae5057066996bbd59791c10da27f72f..b16bf4d0a048da44c12f9a9c3bb2c305c9db4a63 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dig.c,v 1.237 2010/05/13 00:40:46 marka Exp $ */
+/* $Id: dig.c,v 1.237.124.1 2011/02/25 23:08:32 each Exp $ */
 
 /*! \file */
 
@@ -44,8 +44,6 @@
 #include <dns/result.h>
 #include <dns/tsig.h>
 
-#include <bind9/getaddresses.h>
-
 #include <dig/dig.h>
 
 #define ADD_STRING(b, s) {                             \
@@ -1437,30 +1435,6 @@ preparse_args(int argc, char **argv) {
        }
 }
 
-static void
-getaddresses(dig_lookup_t *lookup, const char *host) {
-       isc_result_t result;
-       isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES];
-       isc_netaddr_t netaddr;
-       int count, i;
-       dig_server_t *srv;
-       char tmp[ISC_NETADDR_FORMATSIZE];
-
-       result = bind9_getaddresses(host, 0, sockaddrs,
-                                   DIG_MAX_ADDRESSES, &count);
-       if (result != ISC_R_SUCCESS)
-       fatal("couldn't get address for '%s': %s",
-             host, isc_result_totext(result));
-
-       for (i = 0; i < count; i++) {
-               isc_netaddr_fromsockaddr(&netaddr, &sockaddrs[i]);
-               isc_netaddr_format(&netaddr, tmp, sizeof(tmp));
-               srv = make_server(tmp, host);
-               ISC_LIST_APPEND(lookup->my_server_list, srv, link);
-       }
-       addresscount = count;
-}
-
 static void
 parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
           int argc, char **argv) {
@@ -1555,7 +1529,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
                if (strncmp(rv[0], "%", 1) == 0)
                        break;
                if (strncmp(rv[0], "@", 1) == 0) {
-                       getaddresses(lookup, &rv[0][1]);
+                       addresscount = getaddresses(lookup, &rv[0][1]);
                } else if (rv[0][0] == '+') {
                        plus_option(&rv[0][1], is_batchfile,
                                    lookup);
index 09fbca9edf7dd9a08ad7e4e69a3213c73529b91f..81b4490ddf7bab455191692a424cb32e33c52f67 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dighost.c,v 1.336.22.1 2011/02/21 07:36:41 marka Exp $ */
+/* $Id: dighost.c,v 1.336.22.2 2011/02/25 23:08:32 each Exp $ */
 
 /*! \file
  *  \note
@@ -1765,8 +1765,7 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
                        dns_rdata_freestruct(&ns);
 
                        /* Initialize lookup if we've not yet */
-                       debug("found NS %d %s", numLookups, namestr);
-                       numLookups++;
+                       debug("found NS %s", namestr);
                        if (!success) {
                                success = ISC_TRUE;
                                lookup_counter++;
@@ -1788,9 +1787,8 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
                                domain = dns_fixedname_name(&lookup->fdomain);
                                dns_name_copy(name, domain, NULL);
                        }
-                       srv = make_server(namestr, namestr);
-                       debug("adding server %s", srv->servername);
-                       ISC_LIST_APPEND(lookup->my_server_list, srv, link);
+                       debug("adding server %s", namestr);
+                       numLookups += getaddresses(lookup, namestr);
                        dns_rdata_reset(&rdata);
                }
        }
@@ -3539,6 +3537,31 @@ get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
        return (ISC_R_SUCCESS);
 }
 
+int
+getaddresses(dig_lookup_t *lookup, const char *host) {
+       isc_result_t result;
+       isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES];
+       isc_netaddr_t netaddr;
+       int count, i;
+       dig_server_t *srv;
+       char tmp[ISC_NETADDR_FORMATSIZE];
+
+       result = bind9_getaddresses(host, 0, sockaddrs,
+                                   DIG_MAX_ADDRESSES, &count);
+       if (result != ISC_R_SUCCESS)
+               fatal("couldn't get address for '%s': %s",
+                     host, isc_result_totext(result));
+
+       for (i = 0; i < count; i++) {
+               isc_netaddr_fromsockaddr(&netaddr, &sockaddrs[i]);
+               isc_netaddr_format(&netaddr, tmp, sizeof(tmp));
+               srv = make_server(tmp, host);
+               ISC_LIST_APPEND(lookup->my_server_list, srv, link);
+       }
+
+       return count;
+}
+
 /*%
  * Initiate either a TCP or UDP lookup
  */
index 5ac1d30e600ac6cea4a18c9fb0a4634db2606b87..996a7a5c6522a539cad4c483af85885177a66fcd 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dig.h,v 1.111 2009/09/29 15:06:06 fdupont Exp $ */
+/* $Id: dig.h,v 1.111.306.1 2011/02/25 23:08:33 each Exp $ */
 
 #ifndef DIG_H
 #define DIG_H
@@ -288,6 +288,9 @@ extern int idnoptions;
 isc_result_t
 get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr);
 
+int
+getaddresses(dig_lookup_t *lookup, const char *host);
+
 isc_result_t
 get_reverse(char *reverse, size_t len, char *value, isc_boolean_t ip6_int,
            isc_boolean_t strict);