]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/ndb/dnserver.c
abaco: cleanup, handle image/x-icon, don't use backspace as a hotkey, and remove...
[plan9front.git] / sys / src / cmd / ndb / dnserver.c
old mode 100755 (executable)
new mode 100644 (file)
index f3fd8fd..87a35ab
@@ -20,9 +20,7 @@ dnserver(DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *srcip, int rcode)
        char tname[32];
        DN *nsdp, *dp;
        Area *myarea;
-       RR *tp, *neg;
-
-       dncheck(nil, 1);
+       RR *tp, *neg, *rp;
 
        recursionflag = norecursion? 0: Fcanrec;
        memset(repp, 0, sizeof(*repp));
@@ -109,8 +107,9 @@ dnserver(DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *srcip, int rcode)
                        if(repp->ns){
                                /* don't pass on anything we know is wrong */
                                if(repp->ns->negative){
-                                       rrfreelist(repp->ns);
+                                       rp = repp->ns;
                                        repp->ns = nil;
+                                       rrfreelist(rp);
                                }
                                break;
                        }
@@ -132,24 +131,18 @@ dnserver(DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *srcip, int rcode)
                        hint(&repp->ar, tp);
        }
 
-       /* hint calls rrlookup which holds dnlock, so don't lock before this. */
-
        /*
         *  add an soa to the authority section to help client
         *  with negative caching
         */
        if(repp->an == nil)
                if(myarea != nil){
-                       lock(&dnlock);
                        rrcopy(myarea->soarr, &tp);
                        rrcat(&repp->ns, tp);
-                       unlock(&dnlock);
                } else if(neg != nil) {
                        if(neg->negsoaowner != nil) {
                                tp = rrlookup(neg->negsoaowner, Tsoa, NOneg);
-                               lock(&dnlock);
                                rrcat(&repp->ns, tp);
-                               unlock(&dnlock);
                        }
                        repp->flags |= neg->negrcode;
                }
@@ -157,15 +150,11 @@ dnserver(DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *srcip, int rcode)
        /*
         *  get rid of duplicates
         */
-       lock(&dnlock);
        unique(repp->an);
        unique(repp->ns);
        unique(repp->ar);
 
        rrfreelist(neg);
-       unlock(&dnlock);
-
-       dncheck(nil, 1);
 }
 
 /*
@@ -182,7 +171,6 @@ doextquery(DNSmsg *mp, Request *req, int recurse)
        type = mp->qd->type;
        rp = dnresolve(name, Cin, type, req, &mp->an, 0, recurse, 1, 0);
 
-       lock(&dnlock);
        /* don't return soa hints as answers, it's wrong */
        if(rp && rp->db && !rp->auth && rp->type == Tsoa) {
                rrfreelist(rp);
@@ -192,7 +180,7 @@ doextquery(DNSmsg *mp, Request *req, int recurse)
        /* don't let negative cached entries escape */
        neg = rrremneg(&rp);
        rrcat(&mp->an, rp);
-       unlock(&dnlock);
+
        return neg;
 }
 
@@ -220,4 +208,3 @@ hint(RR **last, RR *rp)
                break;
        }
 }
\ No newline at end of file