dnstcp.c (1884B)
1 #include <u.h> 2 #include <libc.h> 3 #include <ip.h> 4 #include <bio.h> 5 #include <ndb.h> 6 #include <thread.h> 7 #include "dns.h" 8 9 enum 10 { 11 Maxpath= 128 12 }; 13 14 char *logfile = "dns"; 15 char *dbfile; 16 int debug; 17 int cachedb = 1; 18 int testing; 19 int traceactivity; 20 int needrefresh; 21 int resolver; 22 char mntpt[Maxpath]; 23 ulong now; 24 int maxage; 25 uchar ipaddr[IPaddrlen]; /* my ip address */ 26 char *LOG; 27 char *zonerefreshprogram; 28 char *tcpaddr; 29 char *udpaddr; 30 31 void 32 usage(void) 33 { 34 fprint(2, "usage: dnstcp [-dr] [-f dbfile]\n"); 35 threadexitsall("usage"); 36 } 37 38 void 39 threadmain(int argc, char *argv[]) 40 { 41 ARGBEGIN{ 42 default: 43 usage(); 44 case 'd': 45 debug++; 46 break; 47 case 'f': 48 dbfile = EARGF(usage()); 49 break; 50 case 'r': 51 resolver = 1; 52 break; 53 }ARGEND 54 55 if(argc) 56 usage(); 57 58 if(debug < 2) 59 debug = 0; 60 61 dninit(); 62 63 db2cache(1); 64 tcpproc(0); 65 } 66 67 /* 68 * the following varies between dnsdebug and dns 69 */ 70 void 71 logreply(int id, uchar *addr, DNSmsg *mp) 72 { 73 RR *rp; 74 75 syslog(0, LOG, "%d: rcvd %I flags:%s%s%s%s%s", id, addr, 76 mp->flags & Fauth ? " auth" : "", 77 mp->flags & Ftrunc ? " trunc" : "", 78 mp->flags & Frecurse ? " rd" : "", 79 mp->flags & Fcanrec ? " ra" : "", 80 mp->flags & (Fauth|Rname) == (Fauth|Rname) ? 81 " nx" : ""); 82 for(rp = mp->qd; rp != nil; rp = rp->next) 83 syslog(0, LOG, "%d: rcvd %I qd %s", id, addr, rp->owner->name); 84 for(rp = mp->an; rp != nil; rp = rp->next) 85 syslog(0, LOG, "%d: rcvd %I an %R", id, addr, rp); 86 for(rp = mp->ns; rp != nil; rp = rp->next) 87 syslog(0, LOG, "%d: rcvd %I ns %R", id, addr, rp); 88 for(rp = mp->ar; rp != nil; rp = rp->next) 89 syslog(0, LOG, "%d: rcvd %I ar %R", id, addr, rp); 90 } 91 92 void 93 logsend(int id, int subid, uchar *addr, char *sname, char *rname, int type) 94 { 95 char buf[12]; 96 97 syslog(0, LOG, "%d.%d: sending to %I/%s %s %s", 98 id, subid, addr, sname, rname, rrname(type, buf, sizeof buf)); 99 } 100 101 RR* 102 getdnsservers(int class) 103 { 104 return dnsservers(class); 105 }