Blob


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"
9 enum
10 {
11 Maxpath= 128
12 };
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;
31 void
32 usage(void)
33 {
34 fprint(2, "usage: dnstcp [-dr] [-f dbfile]\n");
35 threadexitsall("usage");
36 }
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
55 if(argc)
56 usage();
58 if(debug < 2)
59 debug = 0;
61 dninit();
63 db2cache(1);
64 tcpproc(0);
65 }
67 /*
68 * the following varies between dnsdebug and dns
69 */
70 void
71 logreply(int id, uchar *addr, DNSmsg *mp)
72 {
73 RR *rp;
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 }
92 void
93 logsend(int id, int subid, uchar *addr, char *sname, char *rname, int type)
94 {
95 char buf[12];
97 syslog(0, LOG, "%d.%d: sending to %I/%s %s %s",
98 id, subid, addr, sname, rname, rrname(type, buf, sizeof buf));
99 }
101 RR*
102 getdnsservers(int class)
104 return dnsservers(class);