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
usage(void)32 usage(void)
33 {
34 	fprint(2, "usage: dnstcp [-dr] [-f dbfile]\n");
35 	threadexitsall("usage");
36 }
37 
38 void
threadmain(int argc,char * argv[])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
logreply(int id,uchar * addr,DNSmsg * mp)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
logsend(int id,int subid,uchar * addr,char * sname,char * rname,int type)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*
getdnsservers(int class)102 getdnsservers(int class)
103 {
104 	return dnsservers(class);
105 }
106