plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }