diff options
author | mischief <mischief@offblast.org> | 2014-12-09 16:18:08 -0800 |
---|---|---|
committer | mischief <mischief@offblast.org> | 2014-12-09 16:18:08 -0800 |
commit | 230cee347fb6740900ab7295b32f378ff6c3c13a (patch) | |
tree | 0ca0f35176d135a678e259526a8f346f26ab3e14 /sys/src/cmd/ndb | |
parent | 665f0c8e3ee2b7e325a2142c284d363ff7c5aac3 (diff) |
ndb: add dnsgetip program to resolve A and AAAA records during bootstrapping
Diffstat (limited to 'sys/src/cmd/ndb')
-rw-r--r-- | sys/src/cmd/ndb/dnsgetip.c | 99 | ||||
-rw-r--r-- | sys/src/cmd/ndb/mkfile | 8 |
2 files changed, 106 insertions, 1 deletions
diff --git a/sys/src/cmd/ndb/dnsgetip.c b/sys/src/cmd/ndb/dnsgetip.c new file mode 100644 index 000000000..50c548b8b --- /dev/null +++ b/sys/src/cmd/ndb/dnsgetip.c @@ -0,0 +1,99 @@ +/* one-shot resolver */ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include <ndb.h> +#include "dns.h" + +Cfg cfg; +char *dbfile; +int debug = 0; +char *logfile = "resolve"; +int maxage = 60*60; +char mntpt[Maxpath]; +int needrefresh = 0; +ulong now = 0; +vlong nowns = 0; +int testing = 0; +int traceactivity = 0; +char *zonerefreshprogram; + +int aflag; + +void +resolve(char *name, int type) +{ + Request req; + RR *rp; + + memset(&req, 0, sizeof req); + getactivity(&req, 0); + req.isslave = 1; + req.aborttime = NS2MS(nowns) + Maxreqtm; + + rp = dnresolve(name, Cin, type, &req, 0, 0, Recurse, 0, 0); + while(rp != nil){ + if(rp->ip != nil) + print("%s\n", rp->ip->name); + if(!aflag) + exits(nil); + rp = rp->next; + } +} + +void +usage(void) +{ + fprint(2, "%s: [-adx] [-f ndb-file] domain\n", argv0); + exits("usage"); +} + +void +main(int argc, char **argv) +{ + strcpy(mntpt, "/net"); + cfg.inside = 1; + cfg.resolver = 1; + + ARGBEGIN{ + case 'a': + aflag = 1; + break; + case 'd': + debug++; + break; + case 'x': + strcpy(mntpt, "/net.alt"); + break; + case 'f': + dbfile = EARGF(usage()); + break; + default: + usage(); + }ARGEND + + if(argc != 1) + usage(); + + if(strcmp(ipattr(argv[0]), "ip") == 0){ + print("%s\n", argv[0]); + exits(nil); + } + + dninit(); + resolve(argv[0], Ta); + resolve(argv[0], Taaaa); + exits(nil); +} + +RR* +getdnsservers(int class) +{ + return dnsservers(class); +} + +/* stubs */ +void syslog(int, char*, char*, ...){} +void logreply(int, uchar*, DNSmsg*){} +void logsend(int, int, uchar*, char*, char*, int){} + diff --git a/sys/src/cmd/ndb/mkfile b/sys/src/cmd/ndb/mkfile index 2d00b81ae..803286d8b 100644 --- a/sys/src/cmd/ndb/mkfile +++ b/sys/src/cmd/ndb/mkfile @@ -12,10 +12,10 @@ TARG = \ dnsquery\ dnstcp\ dnsdebug\ + dnsgetip\ ipquery\ inform\ - DNSOBJ = dns.$O dnudpserver.$O dn.$O dnresolve.$O dblookup.$O dnserver.$O dnnotify.$O\ dnarea.$O convM2DNS.$O convDNS2M.$O idn.$O @@ -25,6 +25,9 @@ DNSTCPOBJ = dnstcp.$O dn.$O dnresolve.$O dblookup.$O dnserver.$O\ DNSDEBUGOBJ = dnsdebug.$O dn.$O dnresolve.$O dblookup.$O dnserver.$O\ dnarea.$O convM2DNS.$O convDNS2M.$O idn.$O +DNSGETIPOBJ = dnsgetip.$O dn.$O dnresolve.$O dblookup.$O dnserver.$O\ + dnarea.$O convM2DNS.$O convDNS2M.$O idn.$O + HFILES = dns.h /$objtype/lib/libndb.a BIN=/$objtype/bin/ndb @@ -40,6 +43,9 @@ $O.dnstcp: $DNSTCPOBJ $O.dnsdebug: $DNSDEBUGOBJ $LD -o $target $prereq +$O.dnsgetip: $DNSGETIPOBJ + $LD -o $target $prereq + $O.cs: cs.$O $LD -o $target $prereq |