#include #include #include #include #include #include #include "dns.h" enum { Maxpath= 128 }; char *logfile = "dns"; char *dbfile; int debug; int cachedb = 1; int testing; int traceactivity; int needrefresh; int resolver; char mntpt[Maxpath]; ulong now; int maxage; uchar ipaddr[IPaddrlen]; /* my ip address */ char *LOG; char *zonerefreshprogram; char *tcpaddr; char *udpaddr; void usage(void) { fprint(2, "usage: dnstcp [-dr] [-f dbfile]\n"); threadexitsall("usage"); } void threadmain(int argc, char *argv[]) { ARGBEGIN{ default: usage(); case 'd': debug++; break; case 'f': dbfile = EARGF(usage()); break; case 'r': resolver = 1; break; }ARGEND if(argc) usage(); if(debug < 2) debug = 0; dninit(); db2cache(1); tcpproc(0); } /* * the following varies between dnsdebug and dns */ void logreply(int id, uchar *addr, DNSmsg *mp) { RR *rp; syslog(0, LOG, "%d: rcvd %I flags:%s%s%s%s%s", id, addr, mp->flags & Fauth ? " auth" : "", mp->flags & Ftrunc ? " trunc" : "", mp->flags & Frecurse ? " rd" : "", mp->flags & Fcanrec ? " ra" : "", mp->flags & (Fauth|Rname) == (Fauth|Rname) ? " nx" : ""); for(rp = mp->qd; rp != nil; rp = rp->next) syslog(0, LOG, "%d: rcvd %I qd %s", id, addr, rp->owner->name); for(rp = mp->an; rp != nil; rp = rp->next) syslog(0, LOG, "%d: rcvd %I an %R", id, addr, rp); for(rp = mp->ns; rp != nil; rp = rp->next) syslog(0, LOG, "%d: rcvd %I ns %R", id, addr, rp); for(rp = mp->ar; rp != nil; rp = rp->next) syslog(0, LOG, "%d: rcvd %I ar %R", id, addr, rp); } void logsend(int id, int subid, uchar *addr, char *sname, char *rname, int type) { char buf[12]; syslog(0, LOG, "%d.%d: sending to %I/%s %s %s", id, subid, addr, sname, rname, rrname(type, buf, sizeof buf)); } RR* getdnsservers(int class) { return dnsservers(class); }