diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-06-27 17:27:28 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-10-27 17:02:08 +0100 |
commit | 8c3b520d4f937b1d1856898dec5f634b12d9cc36 (patch) | |
tree | 3567d74bdf6f3bacef0468347d932f97babc9349 | |
parent | caf5ee0dd9250a4ca913691bcdc247f8fe814e22 (diff) | |
download | busybox-w32-8c3b520d4f937b1d1856898dec5f634b12d9cc36.tar.gz busybox-w32-8c3b520d4f937b1d1856898dec5f634b12d9cc36.tar.bz2 busybox-w32-8c3b520d4f937b1d1856898dec5f634b12d9cc36.zip |
nslookup: handle replies without RRs
Under some circumstances, a DNS reply might contain no resource records,
e.g. when a valid domain is queried that does not have records of the
requested type.
Example with nslookup from BIND dnsutils:
$ nslookup -q=SRV example.org
Server: 10.11.12.13
Address: 10.11.12.13#53
Non-authoritative answer:
*** Can't find example.org: No answer
Currently the busybox nslookup applet simply prints nothing after the
"Non-authoritative answer:" line in the same situation.
This change modifies nslookup to either print "Parse error" or "No answer"
diagnostics, depending on the parse_reply() return value.
function old new delta
send_queries 1676 1711 +35
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/nslookup.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/networking/nslookup.c b/networking/nslookup.c index 8adde14b8..a7dd823f0 100644 --- a/networking/nslookup.c +++ b/networking/nslookup.c | |||
@@ -615,9 +615,15 @@ static int send_queries(struct ns *ns) | |||
615 | G.query[qn].name, rcodes[rcode]); | 615 | G.query[qn].name, rcodes[rcode]); |
616 | G.exitcode = EXIT_FAILURE; | 616 | G.exitcode = EXIT_FAILURE; |
617 | } else { | 617 | } else { |
618 | if (parse_reply(reply, recvlen) < 0) { | 618 | switch (parse_reply(reply, recvlen)) { |
619 | case -1: | ||
619 | printf("*** Can't find %s: Parse error\n", G.query[qn].name); | 620 | printf("*** Can't find %s: Parse error\n", G.query[qn].name); |
620 | G.exitcode = EXIT_FAILURE; | 621 | G.exitcode = EXIT_FAILURE; |
622 | break; | ||
623 | |||
624 | case 0: | ||
625 | printf("*** Can't find %s: No answer\n", G.query[qn].name); | ||
626 | break; | ||
621 | } | 627 | } |
622 | } | 628 | } |
623 | bb_putchar('\n'); | 629 | bb_putchar('\n'); |