Blame


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