2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-28 04:58:04 +00:00

simplify dig/host/nslookup code by using the _format() functions in

more places; fix spacing issues; make nslookup print debugging details
for all lookup results, not just those with rcode==0; add comments
This commit is contained in:
Andreas Gustafsson 2001-01-24 19:28:34 +00:00
parent 4115131757
commit b4876b6ddf
5 changed files with 78 additions and 104 deletions

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: dig.c,v 1.134 2001/01/18 05:12:39 gson Exp $ */ /* $Id: dig.c,v 1.135 2001/01/24 19:28:29 gson Exp $ */
#include <config.h> #include <config.h>
#include <stdlib.h> #include <stdlib.h>
@ -192,11 +192,14 @@ show_usage(void) {
* Callback from dighost.c to print the received message. * Callback from dighost.c to print the received message.
*/ */
void void
received(int bytes, int frmsize, char *frm, dig_query_t *query) { received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
isc_uint64_t diff; isc_uint64_t diff;
isc_time_t now; isc_time_t now;
isc_result_t result; isc_result_t result;
time_t tnow; time_t tnow;
char fromtext[ISC_SOCKADDR_FORMATSIZE];
isc_sockaddr_format(from, fromtext, sizeof(fromtext));
result = isc_time_now(&now); result = isc_time_now(&now);
check_result(result, "isc_time_now"); check_result(result, "isc_time_now");
@ -204,8 +207,7 @@ received(int bytes, int frmsize, char *frm, dig_query_t *query) {
if (query->lookup->stats) { if (query->lookup->stats) {
diff = isc_time_microdiff(&now, &query->time_sent); diff = isc_time_microdiff(&now, &query->time_sent);
printf(";; Query time: %ld msec\n", (long int)diff/1000); printf(";; Query time: %ld msec\n", (long int)diff/1000);
printf(";; SERVER: %.*s(%s)\n", frmsize, frm, printf(";; SERVER: %s(%s)\n", fromtext, query->servname);
query->servname);
time(&tnow); time(&tnow);
printf(";; WHEN: %s", ctime(&tnow)); printf(";; WHEN: %s", ctime(&tnow));
if (query->lookup->doing_xfr) { if (query->lookup->doing_xfr) {
@ -226,8 +228,8 @@ received(int bytes, int frmsize, char *frm, dig_query_t *query) {
puts(""); puts("");
} else if (query->lookup->identify && !short_form) { } else if (query->lookup->identify && !short_form) {
diff = isc_time_microdiff(&now, &query->time_sent); diff = isc_time_microdiff(&now, &query->time_sent);
printf(";; Received %u bytes from %.*s(%s) in %d ms\n\n", printf(";; Received %u bytes from %s(%s) in %d ms\n\n",
bytes, frmsize, frm, query->servname, bytes, fromtext, query->servname,
(int)diff/1000); (int)diff/1000);
} }
} }

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: dighost.c,v 1.187 2001/01/22 22:38:21 gson Exp $ */ /* $Id: dighost.c,v 1.188 2001/01/24 19:28:30 gson Exp $ */
/* /*
* Notice to programmers: Do not use this code as an example of how to * Notice to programmers: Do not use this code as an example of how to
@ -2095,8 +2095,6 @@ check_for_more_data(dig_query_t *query, dns_message_t *msg,
dns_rdata_soa_t soa; dns_rdata_soa_t soa;
isc_result_t result; isc_result_t result;
isc_buffer_t b; isc_buffer_t b;
isc_region_t r;
char abspace[MXNAME];
isc_boolean_t atlimit=ISC_FALSE; isc_boolean_t atlimit=ISC_FALSE;
debug("check_for_more_data()"); debug("check_for_more_data()");
@ -2240,13 +2238,7 @@ check_for_more_data(dig_query_t *query, dns_message_t *msg,
} while (result == ISC_R_SUCCESS); } while (result == ISC_R_SUCCESS);
if (atlimit) { if (atlimit) {
doexit: doexit:
isc_buffer_init(&b, abspace, MXNAME); received(b.used, &sevent->address, query);
result = isc_sockaddr_totext(&sevent->address, &b);
check_result(result,
"isc_sockaddr_totext");
isc_buffer_usedregion(&b, &r);
received(b.used, r.length,
(char *)r.base, query);
if (atlimit) if (atlimit)
if (exitcode < 7) if (exitcode < 7)
exitcode = 7; exitcode = 7;
@ -2267,9 +2259,6 @@ recv_done(isc_task_t *task, isc_event_t *event) {
isc_buffer_t *b = NULL; isc_buffer_t *b = NULL;
dns_message_t *msg = NULL; dns_message_t *msg = NULL;
isc_result_t result; isc_result_t result;
isc_buffer_t ab;
char abspace[MXNAME];
isc_region_t r;
dig_lookup_t *n, *l; dig_lookup_t *n, *l;
isc_boolean_t docancel = ISC_FALSE; isc_boolean_t docancel = ISC_FALSE;
unsigned int local_timeout; unsigned int local_timeout;
@ -2465,16 +2454,8 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (!next_origin(msg, query)) { if (!next_origin(msg, query)) {
printmessage(query, msg, printmessage(query, msg,
ISC_TRUE); ISC_TRUE);
isc_buffer_init(&ab, abspace, received(b->used,
MXNAME);
result = isc_sockaddr_totext(
&sevent->address, &sevent->address,
&ab);
check_result(result,
"isc_sockaddr_totext");
isc_buffer_usedregion(&ab, &r);
received(b->used, r.length,
(char *)r.base,
query); query);
} }
} else { } else {
@ -2490,15 +2471,8 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (!next_origin(msg, query)) { if (!next_origin(msg, query)) {
printmessage(query, msg, printmessage(query, msg,
ISC_TRUE); ISC_TRUE);
isc_buffer_init(&ab, abspace, MXNAME); received(b->used,
result = isc_sockaddr_totext(
&sevent->address, &sevent->address,
&ab);
check_result(result,
"isc_sockaddr_totext");
isc_buffer_usedregion(&ab, &r);
received(b->used, r.length,
(char *)r.base,
query); query);
} }
} else { } else {
@ -2535,13 +2509,8 @@ recv_done(isc_task_t *task, isc_event_t *event) {
else { else {
if ((msg->rcode == 0) || if ((msg->rcode == 0) ||
(l->origin == NULL)) { (l->origin == NULL)) {
isc_buffer_init(&ab, abspace, MXNAME); received(b->used,
result = isc_sockaddr_totext(&sevent->address, &sevent->address,
&ab);
check_result(result, "isc_sockaddr_totext");
isc_buffer_usedregion(&ab, &r);
received(b->used, r.length,
(char *)r.base,
query); query);
} }
query->lookup->pending = ISC_FALSE; query->lookup->pending = ISC_FALSE;

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: host.c,v 1.62 2001/01/18 05:12:42 gson Exp $ */ /* $Id: host.c,v 1.63 2001/01/24 19:28:32 gson Exp $ */
#include <config.h> #include <config.h>
#include <stdlib.h> #include <stdlib.h>
@ -229,17 +229,20 @@ dighost_shutdown(void) {
} }
void void
received(int bytes, int frmsize, char *frm, dig_query_t *query) { received(int bytes, isc_sockaddr_t *from, dig_query_t *query)
{
isc_time_t now; isc_time_t now;
isc_result_t result; isc_result_t result;
int diff; int diff;
if (!short_form) { if (!short_form) {
char fromtext[ISC_SOCKADDR_FORMATSIZE];
isc_sockaddr_format(from, fromtext, sizeof(fromtext));
result = isc_time_now(&now); result = isc_time_now(&now);
check_result(result, "isc_time_now"); check_result(result, "isc_time_now");
diff = isc_time_microdiff(&now, &query->time_sent); diff = isc_time_microdiff(&now, &query->time_sent);
printf("Received %u bytes from %.*s in %d ms\n", printf("Received %u bytes from %s in %d ms\n",
bytes, frmsize, frm, diff/1000); bytes, fromtext, diff/1000);
} }
} }

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: dig.h,v 1.62 2001/01/18 05:12:44 gson Exp $ */ /* $Id: dig.h,v 1.63 2001/01/24 19:28:34 gson Exp $ */
#ifndef DIG_H #ifndef DIG_H
#define DIG_H #define DIG_H
@ -243,13 +243,22 @@ void
set_search_domain(char *domain); set_search_domain(char *domain);
/* /*
* Routines needed in dig.c and host.c. * Routines to be defined in dig.c, host.c, and nslookup.c.
*/ */
isc_result_t isc_result_t
printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers); printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers);
/*
* Print the final result of the lookup.
*/
void void
received(int bytes, int frmsize, char *frm, dig_query_t *query); received(int bytes, isc_sockaddr_t *from, dig_query_t *query);
/*
* Print a message about where and when the response
* was received from, like the final comment in the
* output of "dig".
*/
void void
trying(int frmsize, char *frm, dig_lookup_t *lookup); trying(int frmsize, char *frm, dig_lookup_t *lookup);

View File

@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: nslookup.c,v 1.79 2001/01/22 23:22:09 gson Exp $ */ /* $Id: nslookup.c,v 1.80 2001/01/24 19:28:33 gson Exp $ */
#include <config.h> #include <config.h>
@ -169,22 +169,6 @@ dighost_shutdown(void) {
isc_task_send(global_task, &event); isc_task_send(global_task, &event);
} }
void
received(int bytes, int frmsize, char *frm, dig_query_t *query) {
UNUSED(bytes);
UNUSED(frmsize);
UNUSED(frm);
UNUSED(query);
}
void
trying(int frmsize, char *frm, dig_lookup_t *lookup) {
UNUSED(frmsize);
UNUSED(frm);
UNUSED(lookup);
}
static void static void
printsoa(dns_rdata_t *rdata) { printsoa(dns_rdata_t *rdata) {
dns_rdata_soa_t soa; dns_rdata_soa_t soa;
@ -398,39 +382,36 @@ detailsection(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers,
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
void
received(int bytes, isc_sockaddr_t *from, dig_query_t *query)
{
UNUSED(bytes);
UNUSED(from);
UNUSED(query);
}
void
trying(int frmsize, char *frm, dig_lookup_t *lookup) {
UNUSED(frmsize);
UNUSED(frm);
UNUSED(lookup);
}
isc_result_t isc_result_t
printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
isc_buffer_t *b = NULL; char servtext[ISC_SOCKADDR_FORMATSIZE];
isc_region_t r;
isc_result_t result;
debug("printmessage()"); debug("printmessage()");
debug("continuing on with rcode != 0");
result = isc_buffer_allocate(mctx, &b, MXNAME); isc_sockaddr_format(&query->sockaddr, servtext, sizeof(servtext));
check_result(result, "isc_buffer_allocate");
printf("Server:\t\t%s\n", query->servname); printf("Server:\t\t%s\n", query->servname);
result = isc_sockaddr_totext(&query->sockaddr, b); printf("Address:\t%s\n", servtext);
check_result(result, "isc_sockaddr_totext");
printf("Address:\t%.*s\n", (int)isc_buffer_usedlength(b),
(char*)isc_buffer_base(b));
isc_buffer_free(&b);
puts(""); puts("");
if (msg->rcode != 0) {
result = isc_buffer_allocate(mctx, &b, MXNAME);
check_result(result, "isc_buffer_allocate");
result = dns_name_totext(query->lookup->name, ISC_FALSE,
b);
check_result(result, "dns_name_totext");
isc_buffer_usedregion(b, &r);
printf("** server can't find %.*s: %s\n",
(int)r.length, (char*)r.base,
rcodetext[msg->rcode]);
isc_buffer_free(&b);
debug("returning with rcode == 0");
return (ISC_R_SUCCESS);
}
if (!short_form) { if (!short_form) {
isc_boolean_t headers = ISC_TRUE;
puts("------------"); puts("------------");
/* detailheader(query, msg);*/ /* detailheader(query, msg);*/
detailsection(query, msg, headers, DNS_SECTION_QUESTION); detailsection(query, msg, headers, DNS_SECTION_QUESTION);
@ -440,6 +421,16 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
puts("------------"); puts("------------");
} }
if (msg->rcode != 0) {
char nametext[DNS_NAME_FORMATSIZE];
dns_name_format(query->lookup->name,
nametext, sizeof(nametext));
printf("** server can't find %s: %s\n", nametext,
rcodetext[msg->rcode]);
debug("returning with rcode == 0");
return (ISC_R_SUCCESS);
}
if ((msg->flags & DNS_MESSAGEFLAG_AA) == 0) if ((msg->flags & DNS_MESSAGEFLAG_AA) == 0)
puts("Non-authoritative answer:"); puts("Non-authoritative answer:");
if (!ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ANSWER])) if (!ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ANSWER]))