aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-06-27 17:27:28 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2019-10-27 17:02:08 +0100
commit8c3b520d4f937b1d1856898dec5f634b12d9cc36 (patch)
tree3567d74bdf6f3bacef0468347d932f97babc9349
parentcaf5ee0dd9250a4ca913691bcdc247f8fe814e22 (diff)
downloadbusybox-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.c8
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');