tdnstcp.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tdnstcp.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 }