diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-26 21:56:03 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-26 21:56:03 +0200 |
commit | 40d5dce459e88241cdf4014e455951d041ecddf3 (patch) | |
tree | cbc2ba13d4bfab91cd5f2001686710ca6446c98e /sys/src/cmd/ndb/dns.c | |
parent | 25070f33fbef3a7f9ada2a6488fd89fe3b555f86 (diff) |
dns: fix rr->srv memory leak in rrcopy, mark rr->sig->signer, dn aging, cleanup
Diffstat (limited to 'sys/src/cmd/ndb/dns.c')
-rw-r--r-- | sys/src/cmd/ndb/dns.c | 40 |
1 files changed, 9 insertions, 31 deletions
diff --git a/sys/src/cmd/ndb/dns.c b/sys/src/cmd/ndb/dns.c index c0e814b95..e21c3ab88 100644 --- a/sys/src/cmd/ndb/dns.c +++ b/sys/src/cmd/ndb/dns.c @@ -101,8 +101,7 @@ void rwstat(Job*, Mfile*); void sendmsg(Job*, char*); void setext(char*, int, char*); -static char *lookupqueryold(Job*, Mfile*, Request*, char*, char*, int, int); -static char *lookupquerynew(Job*, Mfile*, Request*, char*, char*, int, int); +static char *lookupquery(Job*, Mfile*, Request*, char*, char*, int, int); static char *respond(Job*, Mfile*, RR*, char*, int, int); void @@ -731,6 +730,8 @@ rwrite(Job *job, Mfile *mf, Request *req) dndump("/lib/ndb/dnsdump2"); } else if(strcmp(job->request.data, "debug")==0) debug ^= 1; + else if(strcmp(job->request.data, "testing")==0) + testing ^= 1; else if(strcmp(job->request.data, "dump")==0) dndump("/lib/ndb/dnsdump"); else if(strcmp(job->request.data, "poolcheck")==0) @@ -803,7 +804,7 @@ rwrite(Job *job, Mfile *mf, Request *req) } else wantsav = 0; - err = lookupqueryold(job, mf, req, errbuf, p, wantsav, rooted); + err = lookupquery(job, mf, req, errbuf, p, wantsav, rooted); send: dncheck(0, 1); job->reply.count = cnt; @@ -821,7 +822,7 @@ send: * but here we just call dnresolve directly. */ static char * -lookupqueryold(Job *job, Mfile *mf, Request *req, char *errbuf, char *p, +lookupquery(Job *job, Mfile *mf, Request *req, char *errbuf, char *p, int wantsav, int rooted) { int status; @@ -878,35 +879,12 @@ respond(Job *job, Mfile *mf, RR *rp, char *errbuf, int status, int wantsav) mf->rr[mf->nrr] = n; } unlock(&joblock); - rrfreelist(rp); - return nil; -} - -/* simulate what dnsudpserver does */ -static char * -lookupquerynew(Job *job, Mfile *mf, Request *req, char *errbuf, char *p, - int wantsav, int) -{ - char *err; - uchar buf[Udphdrsize + Maxudp + 1024]; - DNSmsg *mp; - DNSmsg repmsg; - RR *rp; - dncheck(0, 1); - - memset(&repmsg, 0, sizeof repmsg); - rp = rralloc(mf->type); - rp->owner = dnlookup(p, Cin, 1); - mp = newdnsmsg(rp, Frecurse|Oquery, (ushort)rand()); - - dnserver(mp, &repmsg, req, buf, Rok); + lock(&dnlock); + rrfreelist(rp); + unlock(&dnlock); - freeanswers(mp); - err = respond(job, mf, repmsg.an, errbuf, Rok, wantsav); - repmsg.an = nil; /* freed above */ - freeanswers(&repmsg); - return err; + return nil; } void |