]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Recurse to find the root server list with 'dig +trace'.
authorMark Andrews <marka@isc.org>
Tue, 14 May 2019 01:38:13 +0000 (11:38 +1000)
committerMark Andrews <marka@isc.org>
Wed, 22 May 2019 03:02:15 +0000 (13:02 +1000)
CHANGES
bin/dig/dig.c
bin/dig/dig.docbook
bin/dig/dighost.c

diff --git a/CHANGES b/CHANGES
index 535669948b21e85cba64c9a790f56082408208b8..53bf0b65f4074e908a010df5a37b04e660f9e328 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+5237.  [bug]           Recurse to find the root server list with 'dig +trace'.
+                       [GL #1028]
+
 5236.  [func]          Add SipHash 2-4 implementation in lib/isc/siphash.c
                        and switch isc_hash_function() to use SipHash 2-4.
                        [GL #605]
index afaf3e76d3450b80a72d728ac12f3054621c513e..8b11e035b6535f440f56fe29a52bc74f09290547 100644 (file)
@@ -1462,7 +1462,7 @@ plus_option(char *option, bool is_batchfile,
                                lookup->trace = state;
                                lookup->trace_root = state;
                                if (state) {
-                                       lookup->recurse = false;
+                                       lookup->recurse = true;
                                        lookup->identify = true;
                                        lookup->comments = false;
                                        lookup->rrcomments = 0;
index e4014427168e61eda848844009c9c088bc258fa7..0e5e374a0dc816fa374b6ff53a3801a41645c603 100644 (file)
              in the query.  This bit is set by default, which means
              <command>dig</command> normally sends recursive
              queries.  Recursion is automatically disabled when
-             the <parameter>+nssearch</parameter> or
-             <parameter>+trace</parameter> query options are used.
+             using the <parameter>+nssearch</parameter> option, and
+             when using <parameter>+trace</parameter> except for
+             an initial recursive query to get the list of root
+             servers.
            </para>
          </listitem>
        </varlistentry>
index a7ea34267031b32b7233dd4bd39f424dcb6c2242..c3e553b7abc2f1432349e53053227a5a8ab4f663 100644 (file)
@@ -2191,12 +2191,14 @@ setup_lookup(dig_lookup_t *lookup) {
        lookup->sendmsg->id = (dns_messageid_t)isc_random16();
        lookup->sendmsg->opcode = lookup->opcode;
        lookup->msgcounter = 0;
+
        /*
-        * If this is a trace request, completely disallow recursion, since
-        * it's meaningless for traces.
+        * If this is a trace request, completely disallow recursion after
+        * looking up the root name servers, since it's meaningless for traces.
         */
-       if (lookup->trace || (lookup->ns_search_only && !lookup->trace_root))
+       if ((lookup->trace || lookup->ns_search_only) && !lookup->trace_root) {
                lookup->recurse = false;
+       }
 
        if (lookup->recurse &&
            lookup->rdtype != dns_rdatatype_axfr &&