diff --git a/bin/dig/dig.c b/bin/dig/dig.c index 05455be3c0..3c5418ab17 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dig.c,v 1.137 2001/02/14 01:46:03 tamino Exp $ */ +/* $Id: dig.c,v 1.138 2001/02/15 23:44:03 tamino Exp $ */ #include #include @@ -414,7 +414,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { } } -buftoosmall: +repopulate_buffer: if (query->lookup->comments && headers && !short_form) { @@ -422,11 +422,14 @@ buftoosmall: DNS_PSEUDOSECTION_OPT, flags, buf); if (result == ISC_R_NOSPACE) { +buftoosmall: len += OUTPUTBUF; isc_buffer_free(&buf); result = isc_buffer_allocate(mctx, &buf, len); if (result == ISC_R_SUCCESS) - goto buftoosmall; + goto repopulate_buffer; + else + return (result); } check_result(result, "dns_message_pseudosectiontotext"); @@ -438,11 +441,7 @@ buftoosmall: DNS_SECTION_QUESTION, flags, buf); if (result == ISC_R_NOSPACE) { - len += OUTPUTBUF; - isc_buffer_free(&buf); - result = isc_buffer_allocate(mctx, &buf, len); - if (result == ISC_R_SUCCESS) - goto buftoosmall; + goto buftoosmall; } check_result(result, "dns_message_sectiontotext"); } @@ -453,15 +452,14 @@ buftoosmall: DNS_SECTION_ANSWER, flags, buf); if (result == ISC_R_NOSPACE) { - len += OUTPUTBUF; - isc_buffer_free(&buf); - result = isc_buffer_allocate(mctx, &buf, len); - if (result == ISC_R_SUCCESS) - goto buftoosmall; + goto buftoosmall; } check_result(result, "dns_message_sectiontotext"); } else { result = short_answer(msg, flags, buf, query); + if (result == ISC_R_NOSPACE) { + goto buftoosmall; + } check_result(result, "short_answer"); } } @@ -471,11 +469,7 @@ buftoosmall: DNS_SECTION_AUTHORITY, flags, buf); if (result == ISC_R_NOSPACE) { - len += OUTPUTBUF; - isc_buffer_free(&buf); - result = isc_buffer_allocate(mctx, &buf, len); - if (result == ISC_R_SUCCESS) - goto buftoosmall; + goto buftoosmall; } check_result(result, "dns_message_sectiontotext"); } @@ -486,11 +480,7 @@ buftoosmall: DNS_SECTION_ADDITIONAL, flags, buf); if (result == ISC_R_NOSPACE) { - len += OUTPUTBUF; - isc_buffer_free(&buf); - result = isc_buffer_allocate(mctx, &buf, len); - if (result == ISC_R_SUCCESS) - goto buftoosmall; + goto buftoosmall; } check_result(result, "dns_message_sectiontotext"); /* @@ -501,12 +491,18 @@ buftoosmall: msg, DNS_PSEUDOSECTION_TSIG, flags, buf); + if (result == ISC_R_NOSPACE) { + goto buftoosmall; + } check_result(result, "dns_message_pseudosectiontotext"); result = dns_message_pseudosectiontotext( msg, DNS_PSEUDOSECTION_SIG0, flags, buf); + if (result == ISC_R_NOSPACE) { + goto buftoosmall; + } check_result(result, "dns_message_pseudosectiontotext"); @@ -912,7 +908,9 @@ plus_option(char *option, isc_boolean_t is_batchfile, */ static isc_boolean_t dash_option(char *option, char *next, dig_lookup_t **lookup, - isc_boolean_t *open_type_class) + isc_boolean_t *open_type_class, + isc_boolean_t *firstarg, + int argc, char **argv) { char cmd, *value, *ptr; isc_result_t result; @@ -921,13 +919,6 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, dns_rdatatype_t rdtype; dns_rdataclass_t rdclass; char textname[MXNAME]; - isc_boolean_t orig_rdtypeset; - dns_rdatatype_t orig_rdtype; - isc_uint32_t orig_ixfr_serial; - isc_boolean_t orig_section_question; - isc_boolean_t orig_comments; - dns_rdataclass_t orig_rdclass; - isc_boolean_t orig_rdclassset; cmd = option[0]; if (strlen(option) > 1) { @@ -1047,13 +1038,6 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, keysecret[sizeof(keysecret)-1]=0; return (value_from_next); case 'x': - orig_rdtypeset = (*lookup)->rdtypeset; - orig_rdtype = (*lookup)->rdtype; - orig_ixfr_serial = (*lookup)->ixfr_serial; - orig_section_question = (*lookup)->section_question; - orig_comments = (*lookup)->comments; - orig_rdclassset = (*lookup)->rdclassset; - orig_rdclass = (*lookup)->rdclass; *lookup = clone_lookup(default_lookup, ISC_TRUE); if (get_reverse(textname, value, nibble) == ISC_R_SUCCESS) { strncpy((*lookup)->textname, textname, @@ -1062,24 +1046,16 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, (*lookup)->trace_root = ISC_TF((*lookup)->trace || (*lookup)->ns_search_only); (*lookup)->nibble = nibble; - if (!orig_rdtypeset) + if (!(*lookup)->rdtypeset) (*lookup)->rdtype = dns_rdatatype_ptr; - else - { - (*lookup)->rdtypeset = orig_rdtypeset; - (*lookup)->rdtype = orig_rdtype; - (*lookup)->ixfr_serial = orig_ixfr_serial; - (*lookup)->section_question = orig_section_question; - (*lookup)->comments = orig_comments; - } - if (!orig_rdclassset) + if (!(*lookup)->rdclassset) (*lookup)->rdclass = dns_rdataclass_in; - else - { - (*lookup)->rdclassset = orig_rdclassset; - (*lookup)->rdclass = orig_rdclass; - } (*lookup)->new_search = ISC_TRUE; + if (*lookup && *firstarg) + { + printgreeting(argc, argv, *lookup); + *firstarg = ISC_FALSE; + } ISC_LIST_APPEND(lookup_list, *lookup, link); } else { fprintf(stderr, "Invalid IP address %s\n", value); @@ -1212,13 +1188,15 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, } else if (rv[0][0] == '-') { if (rc <= 1) { if (dash_option(&rv[0][1], NULL, - &lookup, &open_type_class)) { + &lookup, &open_type_class, + &firstarg, argc, argv)) { rc--; rv++; } } else { if (dash_option(&rv[0][1], rv[1], - &lookup, &open_type_class)) { + &lookup, &open_type_class, + &firstarg, argc, argv)) { rc--; rv++; } @@ -1348,22 +1326,12 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, strcpy(lookup->textname, "."); lookup->rdtype = dns_rdatatype_ns; lookup->rdtypeset = ISC_TRUE; - printgreeting(argc, argv, lookup); - firstarg = ISC_FALSE; + if (firstarg) { + printgreeting(argc, argv, lookup); + firstarg = ISC_FALSE; + } ISC_LIST_APPEND(lookup_list, lookup, link); } - - /* - * If we haven't already printed a greeting, and we have a lookup - * with which to print one, do it now. The reason that we sometimes - * call it earlier than this is that we munge some of the things - * printgreeting() needs under certain circumstances. - */ - if (lookup && firstarg) - { - printgreeting(argc, argv, lookup); - firstarg = ISC_FALSE; - } } /* diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index a6619cfe81..503afcb39f 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.189 2001/02/13 23:12:14 tamino Exp $ */ +/* $Id: dighost.c,v 1.190 2001/02/15 23:44:05 tamino Exp $ */ /* * Notice to programmers: Do not use this code as an example of how to @@ -347,7 +347,7 @@ make_empty_lookup(void) { __FILE__, __LINE__); looknew->pending = ISC_TRUE; looknew->textname[0] = 0; - looknew->cmdline[0] = 0; /* Not copied in clone_lookup! */ + looknew->cmdline[0] = 0; looknew->rdtype = dns_rdatatype_a; looknew->rdclass = dns_rdataclass_in; looknew->rdtypeset = ISC_FALSE; @@ -417,6 +417,7 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) { looknew = make_empty_lookup(); INSIST(looknew != NULL); strncpy(looknew->textname, lookold-> textname, MXNAME); + strncpy(looknew->cmdline, lookold->cmdline, MXNAME); looknew->textname[MXNAME-1] = 0; looknew->rdtype = lookold->rdtype; looknew->rdclass = lookold->rdclass; @@ -2470,7 +2471,8 @@ recv_done(isc_task_t *task, isc_event_t *event) { { if ((result != ISC_R_SUCCESS) || l->trace_root) { - /* We didn't get an + /* + * We didn't get an * answer section, * or else this is * the first initial @@ -2481,12 +2483,14 @@ recv_done(isc_task_t *task, isc_event_t *event) { * be the right one). * In either case, * our next query - * should be an NS. */ + * should be an NS. + */ l->rdtype = dns_rdatatype_ns; } else { - /* We got an answer + /* + * We got an answer * section for our * NS query! Yay! * Now we shift gears, @@ -2494,7 +2498,8 @@ recv_done(isc_task_t *task, isc_event_t *event) { * and look for SOAs * in all the servers * we got back in our - * answer section. */ + * answer section. + */ l->rdtype = dns_rdatatype_soa; l->ns_search_only_leafnode = ISC_TRUE; if (followup_lookup(msg, query, @@ -2507,8 +2512,10 @@ recv_done(isc_task_t *task, isc_event_t *event) { if ((result != ISC_R_SUCCESS) || l->trace_root) { - /* This is executed regardless - * of whether we're doing * ns_search_only, but because + /* + * This is executed regardless + * of whether we're doing + * ns_search_only, but because * of the way the logic works, * it's mutually exclusive * with the other call to @@ -2523,7 +2530,8 @@ recv_done(isc_task_t *task, isc_event_t *event) { * initial root query) then * we want to take whatever is * in the authority section and - * follow up with them. */ + * follow up with them. + */ if (followup_lookup(msg, query, DNS_SECTION_AUTHORITY) == 0) diff --git a/bin/dig/host.c b/bin/dig/host.c index def51875cd..ed00461700 100644 --- a/bin/dig/host.c +++ b/bin/dig/host.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: host.c,v 1.64 2001/02/13 23:12:16 tamino Exp $ */ +/* $Id: host.c,v 1.65 2001/02/15 23:44:06 tamino Exp $ */ #include #include @@ -273,10 +273,10 @@ say_message(dns_name_t *name, const char *msg, dns_rdata_t *rdata, check_result(result, "dns_rdata_totext"); isc_buffer_usedregion(b2, &r2); if (query->lookup->identify_previous_line) { - printf("Nameserver %s:\n", + printf("Nameserver %s:\n\t", query->servname); } - printf("\t%.*s %s %.*s", (int)r.length, (char *)r.base, + printf("%.*s %s %.*s", (int)r.length, (char *)r.base, msg, (int)r2.length, (char *)r2.base); if (query->lookup->identify) { printf(" on server %s", query->servname); @@ -422,9 +422,11 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { UNUSED(headers); - /* Special case. If we're doing an ns_search_only query, but we're + /* + * Special case. If we're doing an ns_search_only query, but we're * still following pointers, haven't gotten to the real NS records - * yet, don't print anything. */ + * yet, don't print anything. + */ if (query->lookup->ns_search_only && !query->lookup->ns_search_only_leafnode) return (ISC_R_SUCCESS); diff --git a/bin/dig/include/dig/dig.h b/bin/dig/include/dig/dig.h index d444e8c835..b41c8629e4 100644 --- a/bin/dig/include/dig/dig.h +++ b/bin/dig/include/dig/dig.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dig.h,v 1.65 2001/02/14 01:34:26 gson Exp $ */ +/* $Id: dig.h,v 1.66 2001/02/15 23:44:08 tamino Exp $ */ #ifndef DIG_H #define DIG_H @@ -84,8 +84,8 @@ struct dig_lookup { doing_xfr, ns_search_only, ns_search_only_leafnode, - identify, /* Append "on " */ - identify_previous_line, /* Prepend "Nameserver " */ + identify, /* Append an "on server " message */ + identify_previous_line, /* Prepend a "Nameserver :" message, with newline and tab */ ignore, recurse, aaonly,