ndb: add dns -R, remove unreachable code [rsc] --rw-rw-r-- M 76409 glenda sys 18249 Mar 30 17:55 sys/src/cmd/ndb/dblookup.c /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dblookup.c:651,660 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dblookup.c:651,658 free(d); } } - if(!doit && youngest == lastyoungest){ - unlock(&dblock); - return; - } + if(!doit && youngest == lastyoungest) + break; /* forget our area definition */ freearea(&owned); [rsc] --rw-rw-r-- M 76409 glenda sys 15287 Mar 30 17:55 sys/src/cmd/ndb/dns.c /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dns.c:139,144 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dns.c:139,147 case 'r': resolver = 1; break; + case 'R': + norecursion = 1; + break; case 's': serve = 1; /* serve network */ cachedb = 1; [rsc] --rw-rw-r-- M 76409 glenda sys 10167 Mar 30 17:55 sys/src/cmd/ndb/dns.h /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dns.h:439,444 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dns.h:439,445 extern char mntpt[]; extern char *logfile; extern int resolver; + extern int norecursion; extern int maxage; /* age of oldest entry in cache (secs) */ extern char *zonerefreshprogram; extern int sendnotifies; [rsc] --rw-rw-r-- M 76409 glenda sys 3982 Mar 30 17:55 sys/src/cmd/ndb/dnserver.c /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dnserver.c:8,13 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dnserver.c:8,16 extern char *logfile; + /* set in dns.c */ + int norecursion; /* don't allow recursive requests */ + /* * answer a dns request */ /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dnserver.c:19,30 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dnserver.c:22,35 DN *nsdp, *dp; Area *myarea; char tname[32]; + int recursionflag; dncheck(nil, 1); + recursionflag = norecursion?0:Fcanrec; memset(repp, 0, sizeof(*repp)); repp->id = reqp->id; - repp->flags = Fresp | Fcanrec | Oquery; + repp->flags = Fresp | recursionflag | Oquery; /* move one question from reqp to repp */ tp = reqp->qd; /n/sourcesdump/2006/0330/plan9/sys/src/cmd/ndb/dnserver.c:45,54 - /n/sourcesdump/2006/0331/plan9/sys/src/cmd/ndb/dnserver.c:50,67 } myarea = inmyarea(repp->qd->owner->name); - if(myarea != nil && (repp->qd->type == Tixfr || repp->qd->type == Taxfr)){ - syslog(0, logfile, "server: request %s", rrname(repp->qd->type, tname, sizeof tname)); - repp->flags = Runimplimented | Fresp | Fcanrec | Oquery; - return; + if(myarea != nil) { + if(repp->qd->type == Tixfr || repp->qd->type == Taxfr){ + syslog(0, logfile, "server: request %s", rrname(repp->qd->type, tname, sizeof tname)); + repp->flags = Runimplimented | Fresp | recursionflag | Oquery; + return; + } + } else { + if(norecursion) { + /* we don't recurse and we're not authoritative */ + repp->flags = Rok | Fresp | Oquery; + return; + } } /* [rsc] --rw-rw-r-- M 76409 glenda sys 10084 Mar 30 18:12 sys/man/8/ndb /n/sourcesdump/2006/0330/plan9/sys/man/8/ndb:43,49 - /n/sourcesdump/2006/0331/plan9/sys/man/8/ndb:43,49 .br .B ndb/dns [ - .B -rsn + .B -rRsn ] [ .B -f .I dbfile /n/sourcesdump/2006/0330/plan9/sys/man/8/ndb:205,211 - /n/sourcesdump/2006/0331/plan9/sys/man/8/ndb:205,217 with the domain name of the area as its argument. .TP .B -r - defer to other servers to resolve queries. + send `recursive' queries, asking the other servers + to complete lookups. + .TP + .B -R + ignore the `recursive' bit on incoming requests. + do not complete lookups on behalf of remote systems. + .PD .PP When the .B -r /n/sourcesdump/2006/0330/plan9/sys/man/8/ndb:221,228 - /n/sourcesdump/2006/0331/plan9/sys/man/8/ndb:227,232 dns=ns2.cs.bell-labs.com dom=ns1.cs.bell-labs.com ip=135.104.1.11 dom=ns2.cs.bell-labs.com ip=135.104.1.12 - - .EE .PP The server for a domain is indicated by a database entry containing both a