105 lines
1.8 KiB
C
Executable file
105 lines
1.8 KiB
C
Executable file
#include <u.h>
|
|
#include <libc.h>
|
|
#include <ip.h>
|
|
#include <bio.h>
|
|
#include <ndb.h>
|
|
#include <thread.h>
|
|
#include "dns.h"
|
|
|
|
enum
|
|
{
|
|
Maxpath= 128
|
|
};
|
|
|
|
char *logfile = "dns";
|
|
char *dbfile;
|
|
int debug;
|
|
int cachedb = 1;
|
|
int testing;
|
|
int traceactivity;
|
|
int needrefresh;
|
|
int resolver;
|
|
char mntpt[Maxpath];
|
|
ulong now;
|
|
int maxage;
|
|
uchar ipaddr[IPaddrlen]; /* my ip address */
|
|
char *LOG;
|
|
char *zonerefreshprogram;
|
|
char *tcpaddr;
|
|
char *udpaddr;
|
|
|
|
void
|
|
usage(void)
|
|
{
|
|
fprint(2, "usage: dnstcp [-dr] [-f dbfile]\n");
|
|
threadexitsall("usage");
|
|
}
|
|
|
|
void
|
|
threadmain(int argc, char *argv[])
|
|
{
|
|
ARGBEGIN{
|
|
default:
|
|
usage();
|
|
case 'd':
|
|
debug++;
|
|
break;
|
|
case 'f':
|
|
dbfile = EARGF(usage());
|
|
break;
|
|
case 'r':
|
|
resolver = 1;
|
|
break;
|
|
}ARGEND
|
|
|
|
if(argc)
|
|
usage();
|
|
|
|
if(debug < 2)
|
|
debug = 0;
|
|
|
|
dninit();
|
|
|
|
db2cache(1);
|
|
tcpproc(0);
|
|
}
|
|
|
|
/*
|
|
* the following varies between dnsdebug and dns
|
|
*/
|
|
void
|
|
logreply(int id, uchar *addr, DNSmsg *mp)
|
|
{
|
|
RR *rp;
|
|
|
|
syslog(0, LOG, "%d: rcvd %I flags:%s%s%s%s%s", id, addr,
|
|
mp->flags & Fauth ? " auth" : "",
|
|
mp->flags & Ftrunc ? " trunc" : "",
|
|
mp->flags & Frecurse ? " rd" : "",
|
|
mp->flags & Fcanrec ? " ra" : "",
|
|
mp->flags & (Fauth|Rname) == (Fauth|Rname) ?
|
|
" nx" : "");
|
|
for(rp = mp->qd; rp != nil; rp = rp->next)
|
|
syslog(0, LOG, "%d: rcvd %I qd %s", id, addr, rp->owner->name);
|
|
for(rp = mp->an; rp != nil; rp = rp->next)
|
|
syslog(0, LOG, "%d: rcvd %I an %R", id, addr, rp);
|
|
for(rp = mp->ns; rp != nil; rp = rp->next)
|
|
syslog(0, LOG, "%d: rcvd %I ns %R", id, addr, rp);
|
|
for(rp = mp->ar; rp != nil; rp = rp->next)
|
|
syslog(0, LOG, "%d: rcvd %I ar %R", id, addr, rp);
|
|
}
|
|
|
|
void
|
|
logsend(int id, int subid, uchar *addr, char *sname, char *rname, int type)
|
|
{
|
|
char buf[12];
|
|
|
|
syslog(0, LOG, "%d.%d: sending to %I/%s %s %s",
|
|
id, subid, addr, sname, rname, rrname(type, buf, sizeof buf));
|
|
}
|
|
|
|
RR*
|
|
getdnsservers(int class)
|
|
{
|
|
return dnsservers(class);
|
|
}
|