diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-12-31 01:39:44 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-12-31 01:39:44 +0100 |
commit | 49fd1d69babc6945175068e8fe4c85713fe5fcdb (patch) | |
tree | 013d7a396ad7bc40509c2e3aa1fc7c59a0e9ad8f | |
parent | 3c13da3dab539eac948de48640d8862857d0c8d0 (diff) | |
download | busybox-w32-49fd1d69babc6945175068e8fe4c85713fe5fcdb.tar.gz busybox-w32-49fd1d69babc6945175068e8fe4c85713fe5fcdb.tar.bz2 busybox-w32-49fd1d69babc6945175068e8fe4c85713fe5fcdb.zip |
nslookup: do not print "No answer" for NODATA replies, closes 13006
Only print when there was no answer at all.
function old new delta
send_queries 1834 1813 -21
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/nslookup.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/networking/nslookup.c b/networking/nslookup.c index 5aa2b35d2..c43ad46f3 100644 --- a/networking/nslookup.c +++ b/networking/nslookup.c | |||
@@ -349,6 +349,8 @@ static int parse_reply(const unsigned char *msg, size_t len) | |||
349 | header = (HEADER *)msg; | 349 | header = (HEADER *)msg; |
350 | if (!header->aa) | 350 | if (!header->aa) |
351 | printf("Non-authoritative answer:\n"); | 351 | printf("Non-authoritative answer:\n"); |
352 | else if (option_mask32 & OPT_debug) | ||
353 | printf("Non-authoritative answer:\n" + 4); | ||
352 | 354 | ||
353 | if (ns_initparse(msg, len, &handle) != 0) { | 355 | if (ns_initparse(msg, len, &handle) != 0) { |
354 | //printf("Unable to parse reply: %s\n", strerror(errno)); | 356 | //printf("Unable to parse reply: %s\n", strerror(errno)); |
@@ -381,7 +383,7 @@ static int parse_reply(const unsigned char *msg, size_t len) | |||
381 | return -1; | 383 | return -1; |
382 | } | 384 | } |
383 | inet_ntop(AF_INET6, ns_rr_rdata(rr), astr, sizeof(astr)); | 385 | inet_ntop(AF_INET6, ns_rr_rdata(rr), astr, sizeof(astr)); |
384 | /* bind-utils-9.11.3 uses the same format for A and AAAA answers */ | 386 | /* bind-utils 9.11.3 uses the same format for A and AAAA answers */ |
385 | printf("Name:\t%s\nAddress: %s\n", ns_rr_name(rr), astr); | 387 | printf("Name:\t%s\nAddress: %s\n", ns_rr_name(rr), astr); |
386 | break; | 388 | break; |
387 | #endif | 389 | #endif |
@@ -580,7 +582,7 @@ static int send_queries(struct ns *ns) | |||
580 | printf("Address:\t%s\n\n", | 582 | printf("Address:\t%s\n\n", |
581 | auto_string(xmalloc_sockaddr2dotted(&ns->lsa->u.sa)) | 583 | auto_string(xmalloc_sockaddr2dotted(&ns->lsa->u.sa)) |
582 | ); | 584 | ); |
583 | /* In "Address", bind-utils-9.11.3 show port after a hash: "1.2.3.4#53" */ | 585 | /* In "Address", bind-utils 9.11.3 show port after a hash: "1.2.3.4#53" */ |
584 | /* Should we do the same? */ | 586 | /* Should we do the same? */ |
585 | } | 587 | } |
586 | 588 | ||
@@ -640,12 +642,26 @@ static int send_queries(struct ns *ns) | |||
640 | printf("*** Can't find %s: Parse error\n", G.query[qn].name); | 642 | printf("*** Can't find %s: Parse error\n", G.query[qn].name); |
641 | G.exitcode = EXIT_FAILURE; | 643 | G.exitcode = EXIT_FAILURE; |
642 | break; | 644 | break; |
643 | 645 | /* bind-utils 9.11.25 just says nothing in this case */ | |
644 | case 0: | 646 | //case 0: |
645 | printf("*** Can't find %s: No answer\n", G.query[qn].name); | 647 | // break; |
646 | break; | ||
647 | } | 648 | } |
648 | } | 649 | } |
650 | /* NB: in case of authoritative, empty answer (NODATA), IOW: one with | ||
651 | * ns_msg_count() == 0, bind-utils 9.11.25 shows no trace of this answer | ||
652 | * (unless -debug, where it says: | ||
653 | * ------------ | ||
654 | * QUESTIONS: | ||
655 | * host.com, type = AAAA, class = IN | ||
656 | * ANSWERS: | ||
657 | * AUTHORITY RECORDS: | ||
658 | * ADDITIONAL RECORDS: | ||
659 | * ------------ | ||
660 | * ). Due to printing of below '\n', we do show an additional empty line. | ||
661 | * This is better than not showing any indication of this reply at all, | ||
662 | * yet maintains "compatibility". I wonder whether it's better to break compat | ||
663 | * and emit something more meaningful, e.g. print "Empty answer (NODATA)"? | ||
664 | */ | ||
649 | bb_putchar('\n'); | 665 | bb_putchar('\n'); |
650 | n_replies++; | 666 | n_replies++; |
651 | if (n_replies >= G.query_count) | 667 | if (n_replies >= G.query_count) |