make +trace and +nssearch work together

This commit is contained in:
Brian Wellington
2001-07-29 23:23:42 +00:00
parent 9729bb1e46
commit ecc38edf79
2 changed files with 32 additions and 41 deletions
+1 -14
View File
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dig.c,v 1.155 2001/07/28 01:41:28 bwelling Exp $ */
/* $Id: dig.c,v 1.156 2001/07/29 23:23:41 bwelling Exp $ */
#include <config.h>
#include <stdlib.h>
@@ -748,12 +748,6 @@ plus_option(char *option, isc_boolean_t is_batchfile,
ndots = 0;
break;
case 's': /* nssearch */
if (lookup->trace && state) {
fprintf(stderr,
"+trace and +nssearch cannot both be "
"specified. Ignoring +nssearch\n");
return;
}
lookup->ns_search_only = state;
if (state) {
lookup->trace_root = ISC_TRUE;
@@ -831,13 +825,6 @@ plus_option(char *option, isc_boolean_t is_batchfile,
case 'r':
switch (cmd[2]) {
case 'a': /* trace */
if (lookup->ns_search_only && state) {
fprintf(stderr,
"+trace and +nssearch cannot "
"both be specified. Ignoring "
"+trace\n");
return;
}
lookup->trace = state;
lookup->trace_root = state;
if (state) {
+31 -27
View File
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dighost.c,v 1.217 2001/07/28 00:55:14 bwelling Exp $ */
/* $Id: dighost.c,v 1.218 2001/07/29 23:23:42 bwelling Exp $ */
/*
* Notice to programmers: Do not use this code as an example of how to
@@ -1052,7 +1052,11 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
lookup = requeue_lookup(query->lookup,
ISC_FALSE);
lookup->doing_xfr = ISC_FALSE;
lookup->trace = query->lookup->trace;
if (!lookup->trace_root &&
section == DNS_SECTION_ANSWER)
lookup->trace = ISC_FALSE;
else
lookup->trace = query->lookup->trace;
lookup->ns_search_only =
query->lookup->ns_search_only;
lookup->trace_root = ISC_FALSE;
@@ -2366,10 +2370,30 @@ recv_done(isc_task_t *task, isc_event_t *event) {
printmessage(query, msg, ISC_TRUE);
received(b->used, &sevent->address, query);
}
}
else if (!l->trace && !l->ns_search_only) {
} else if (!l->trace && !l->ns_search_only) {
printmessage(query, msg, ISC_TRUE);
} else if (l->ns_search_only) {
} else if (l->trace) {
int n = 0;
int count = msg->counts[DNS_SECTION_ANSWER];
debug("in TRACE code");
if (!l->ns_search_only)
printmessage(query, msg, ISC_TRUE);
l->rdtype = l->qrdtype;
if (l->trace_root || (l->ns_search_only && count > 0))
{
if (!l->trace_root)
l->rdtype = dns_rdatatype_soa;
n = followup_lookup(msg, query,
DNS_SECTION_ANSWER);
l->trace_root = ISC_FALSE;
} else if (count == 0)
n = followup_lookup(msg, query,
DNS_SECTION_AUTHORITY);
if (n == 0)
docancel = ISC_TRUE;
} else {
debug("in NSSEARCH code");
if (l->trace_root) {
@@ -2378,36 +2402,16 @@ recv_done(isc_task_t *task, isc_event_t *event) {
*/
int n;
l->trace_root = ISC_FALSE;
l->rdtype = dns_rdatatype_soa;
n = followup_lookup(msg, query,
DNS_SECTION_ANSWER);
if (n == 0)
docancel = ISC_TRUE;
l->trace_root = ISC_FALSE;
} else
printmessage(query, msg, ISC_TRUE);
} else {
int n = 0;
int count = msg->counts[DNS_SECTION_ANSWER];
debug("in TRACE code");
printmessage(query, msg, ISC_TRUE);
l->rdtype = l->qrdtype;
if (l->trace_root) {
l->trace_root = ISC_FALSE;
n = followup_lookup(msg, query,
DNS_SECTION_ANSWER);
} else if (count == 0)
n = followup_lookup(msg, query,
DNS_SECTION_AUTHORITY);
if (n == 0)
docancel = ISC_TRUE;
}
} else if (msg->counts[DNS_SECTION_ANSWER] > 0 &&
l->ns_search_only &&
!l->trace_root)
printmessage(query, msg, ISC_TRUE);
}
if (l->pending)
debug("still pending.");