--- toys/net/host.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/toys/net/host.c b/toys/net/host.c index 933f4fb7..cefac7e2 100644 --- a/toys/net/host.c +++ b/toys/net/host.c @@ -7,7 +7,7 @@ * See https://www.ietf.org/rfc/rfc3596.txt USE_HOST(NEWTOY(host, "<1>2avt:", TOYFLAG_USR|TOYFLAG_BIN)) -USE_NSLOOKUP(NEWTOY(nslookup, "<1>2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NSLOOKUP(NEWTOY(nslookup, "<0>2", TOYFLAG_USR|TOYFLAG_BIN)) config HOST bool "host" @@ -79,11 +79,11 @@ static void get_nsname(char **pline, long len) } } -void lookup(int verbose, unsigned *ttl, char* t2, int t2len, int* type, int* rcode) +void lookup(int verbose, unsigned *ttl, char* t2, int t2len, int* type, int* rcode, char* name) { int i, j, sec, qlen, alen QUIET, pllen = 0, abuf_len = 65536; //Largest TCP response unsigned count; - char *abuf = xmalloc(abuf_len), *name = *toys.optargs, *p, *ss; + char *abuf = xmalloc(abuf_len), *p, *ss; struct addrinfo *ai; // What kind of query are we doing? @@ -194,13 +194,13 @@ void host_main(void) { int verbose = FLAG(a)||FLAG(v), t2len=2048, type,rcode,i=0; unsigned ttl; - char *t2 = toybuf+t2len; + char *t2 = toybuf+t2len,*name = *toys.optargs; // Grab nameservers if (toys.optargs[1]) TT.nsname = toys.optargs+1; else do_lines(xopen("/etc/resolv.conf", O_RDONLY), '\n', get_nsname); if (!TT.nsname) error_exit("No nameservers"); if (verbose) printf("Using domain server %s:\n", *TT.nsname); - lookup(verbose,&ttl,t2,t2len,&type,&rcode); + lookup(verbose,&ttl,t2,t2len,&type,&rcode,name); for (i = 0; rrt[i].type != type; i++); if (verbose) printf("%s\t%u\tIN %s\t%s\n", toybuf, ttl, rrt[i].name, t2); else printf("%s %s %s\n", toybuf, rrt[type].msg, t2); @@ -211,14 +211,27 @@ void host_main(void) #include "generated/flags.h" void nslookup_main(void){ - int t2len=2048, type,rcode; + int t2len=2048, type,rcode; unsigned ttl; - char *t2 = toybuf+t2len; + char *t2 = toybuf+t2len, *name = *toys.optargs; if (toys.optargs[1]) TT.nsname = toys.optargs+1; else do_lines(xopen("/etc/resolv.conf", O_RDONLY), '\n', get_nsname); if (!TT.nsname) error_exit("No nameservers"); - printf("Server:\t %s:\nAddress: %s#53\n\n", *TT.nsname, *TT.nsname);//TODO:Not sure if static port is a good idea here - lookup(0,&ttl,t2,t2len,&type,&rcode); - printf("Non-authorative answer:\nName: %s\nAddress: %s\n", toybuf, t2);//TODO: Autherative answers + if(!name){ + size_t size; + do{ + printf(">"); + ssize_t ssize=getline(&name,&size,stdin); + name[ssize-1]='\0'; + if (strcmp("exit",name)==0) break; + printf("Server:\t %s:\nAddress: %s#53\n\n", *TT.nsname, *TT.nsname);//TODO:Not sure if static port is a good idea here + lookup(0,&ttl,t2,t2len,&type,&rcode,name); + printf("Non-authorative answer:\nName: %s\nAddress: %s\n", toybuf, t2);//TODO: Autherative answers + } while (rcode==0); + }else{ + printf("Server:\t %s:\nAddress: %s#53\n\n", *TT.nsname, *TT.nsname);//TODO:Not sure if static port is a good idea here + lookup(0,&ttl,t2,t2len,&type,&rcode,name); + printf("Non-authorative answer:\nName: %s\nAddress: %s\n", toybuf, t2);//TODO: Autherative answers + } toys.exitval = rcode; } -- 2.20.1 _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net