Browse Source

Plan 9 from Bell Labs 2007-07-22

David du Colombier 17 years ago
parent
commit
322ed996fb

+ 12 - 12
dist/replica/_plan9.db

@@ -342,10 +342,10 @@
 386/bin/ndb - 20000000775 sys sys 985743147 0
 386/bin/ndb/cs - 775 sys sys 1184529902 149014
 386/bin/ndb/csquery - 775 sys sys 1176488418 61652
-386/bin/ndb/dns - 775 sys sys 1184529903 291405
-386/bin/ndb/dnsdebug - 775 sys sys 1184529903 266273
+386/bin/ndb/dns - 775 sys sys 1185048646 291749
+386/bin/ndb/dnsdebug - 775 sys sys 1185048647 266617
 386/bin/ndb/dnsquery - 775 sys sys 1174704818 64417
-386/bin/ndb/dnstcp - 775 sys sys 1184529904 264716
+386/bin/ndb/dnstcp - 775 sys sys 1185048648 265056
 386/bin/ndb/ipquery - 775 sys sys 1178568296 95524
 386/bin/ndb/mkdb - 775 sys sys 1168402340 64211
 386/bin/ndb/mkhash - 775 sys sys 1178568296 83312
@@ -7347,7 +7347,7 @@ sys/man/1/cmp - 664 sys sys 1134330626 1069
 sys/man/1/col - 664 sys sys 1172005089 962
 sys/man/1/colors - 664 sys sys 1134330626 1438
 sys/man/1/comm - 664 sys sys 944959675 665
-sys/man/1/con - 664 sys sys 1182908614 4447
+sys/man/1/con - 664 sys sys 1185067107 4865
 sys/man/1/cp - 664 sys sys 1110816882 1947
 sys/man/1/cpp - 664 sys sys 944959674 2105
 sys/man/1/cpu - 664 sys sys 1128483118 3804
@@ -9976,7 +9976,7 @@ sys/src/cmd/compress - 20000000775 sys sys 1157679448 0
 sys/src/cmd/compress/compress.c - 664 sys sys 1159150971 31929
 sys/src/cmd/compress/mkfile - 664 sys sys 1157679443 118
 sys/src/cmd/con - 20000000775 sys sys 1046654774 0
-sys/src/cmd/con/con.c - 664 sys sys 1143759347 15227
+sys/src/cmd/con/con.c - 664 sys sys 1185066485 15264
 sys/src/cmd/con/hayes.c - 664 sys sys 1014925263 3865
 sys/src/cmd/con/mkfile - 664 sys sys 1046654774 204
 sys/src/cmd/con/rufilio.h - 664 sys sys 944960877 595
@@ -12820,15 +12820,15 @@ sys/src/cmd/ndb/convDNS2M.c - 664 sys sys 1182554015 7035
 sys/src/cmd/ndb/convM2DNS.c - 664 sys sys 1183866367 11830
 sys/src/cmd/ndb/cs.c - 664 sys sys 1184303534 32981
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1174626119 1073
-sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184108014 22529
-sys/src/cmd/ndb/dn.c - 664 sys sys 1184026098 35996
+sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184990885 22626
+sys/src/cmd/ndb/dn.c - 664 sys sys 1184990893 36087
 sys/src/cmd/ndb/dnarea.c - 664 sys sys 1175664421 2519
 sys/src/cmd/ndb/dnnotify.c - 664 sys sys 1183866408 3217
-sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184108033 34482
+sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184990924 34536
 sys/src/cmd/ndb/dns.c - 664 sys sys 1183750507 16257
-sys/src/cmd/ndb/dns.h - 664 sys sys 1184107975 11658
-sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1183184428 8754
-sys/src/cmd/ndb/dnserver.c - 664 sys sys 1183447961 4402
+sys/src/cmd/ndb/dns.h - 664 sys sys 1184990871 11692
+sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1184990937 8766
+sys/src/cmd/ndb/dnserver.c - 664 sys sys 1184990866 4627
 sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1174626126 2435
 sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1183184439 7440
 sys/src/cmd/ndb/dnudpserver.c - 664 sys sys 1183750487 5470
@@ -13314,7 +13314,7 @@ sys/src/cmd/rio/wctl.c - 664 sys sys 1023206837 8808
 sys/src/cmd/rio/wind.c - 664 sys sys 1179591640 33382
 sys/src/cmd/rio/xfid.c - 664 sys sys 1103205531 17446
 sys/src/cmd/rm.c - 664 sys sys 1014926615 1563
-sys/src/cmd/rx.c - 664 sys sys 1099760378 4382
+sys/src/cmd/rx.c - 664 sys sys 1185066370 4411
 sys/src/cmd/sam - 20000000775 sys sys 1127393265 0
 sys/src/cmd/sam/acid.lib - 664 sys sys 1135487949 1516
 sys/src/cmd/sam/address.c - 664 sys sys 944961628 3985

+ 12 - 12
dist/replica/plan9.db

@@ -342,10 +342,10 @@
 386/bin/ndb - 20000000775 sys sys 985743147 0
 386/bin/ndb/cs - 775 sys sys 1184529902 149014
 386/bin/ndb/csquery - 775 sys sys 1176488418 61652
-386/bin/ndb/dns - 775 sys sys 1184529903 291405
-386/bin/ndb/dnsdebug - 775 sys sys 1184529903 266273
+386/bin/ndb/dns - 775 sys sys 1185048646 291749
+386/bin/ndb/dnsdebug - 775 sys sys 1185048647 266617
 386/bin/ndb/dnsquery - 775 sys sys 1174704818 64417
-386/bin/ndb/dnstcp - 775 sys sys 1184529904 264716
+386/bin/ndb/dnstcp - 775 sys sys 1185048648 265056
 386/bin/ndb/ipquery - 775 sys sys 1178568296 95524
 386/bin/ndb/mkdb - 775 sys sys 1168402340 64211
 386/bin/ndb/mkhash - 775 sys sys 1178568296 83312
@@ -7347,7 +7347,7 @@ sys/man/1/cmp - 664 sys sys 1134330626 1069
 sys/man/1/col - 664 sys sys 1172005089 962
 sys/man/1/colors - 664 sys sys 1134330626 1438
 sys/man/1/comm - 664 sys sys 944959675 665
-sys/man/1/con - 664 sys sys 1182908614 4447
+sys/man/1/con - 664 sys sys 1185067107 4865
 sys/man/1/cp - 664 sys sys 1110816882 1947
 sys/man/1/cpp - 664 sys sys 944959674 2105
 sys/man/1/cpu - 664 sys sys 1128483118 3804
@@ -9976,7 +9976,7 @@ sys/src/cmd/compress - 20000000775 sys sys 1157679448 0
 sys/src/cmd/compress/compress.c - 664 sys sys 1159150971 31929
 sys/src/cmd/compress/mkfile - 664 sys sys 1157679443 118
 sys/src/cmd/con - 20000000775 sys sys 1046654774 0
-sys/src/cmd/con/con.c - 664 sys sys 1143759347 15227
+sys/src/cmd/con/con.c - 664 sys sys 1185066485 15264
 sys/src/cmd/con/hayes.c - 664 sys sys 1014925263 3865
 sys/src/cmd/con/mkfile - 664 sys sys 1046654774 204
 sys/src/cmd/con/rufilio.h - 664 sys sys 944960877 595
@@ -12820,15 +12820,15 @@ sys/src/cmd/ndb/convDNS2M.c - 664 sys sys 1182554015 7035
 sys/src/cmd/ndb/convM2DNS.c - 664 sys sys 1183866367 11830
 sys/src/cmd/ndb/cs.c - 664 sys sys 1184303534 32981
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1174626119 1073
-sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184108014 22529
-sys/src/cmd/ndb/dn.c - 664 sys sys 1184026098 35996
+sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184990885 22626
+sys/src/cmd/ndb/dn.c - 664 sys sys 1184990893 36087
 sys/src/cmd/ndb/dnarea.c - 664 sys sys 1175664421 2519
 sys/src/cmd/ndb/dnnotify.c - 664 sys sys 1183866408 3217
-sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184108033 34482
+sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184990924 34536
 sys/src/cmd/ndb/dns.c - 664 sys sys 1183750507 16257
-sys/src/cmd/ndb/dns.h - 664 sys sys 1184107975 11658
-sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1183184428 8754
-sys/src/cmd/ndb/dnserver.c - 664 sys sys 1183447961 4402
+sys/src/cmd/ndb/dns.h - 664 sys sys 1184990871 11692
+sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1184990937 8766
+sys/src/cmd/ndb/dnserver.c - 664 sys sys 1184990866 4627
 sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1174626126 2435
 sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1183184439 7440
 sys/src/cmd/ndb/dnudpserver.c - 664 sys sys 1183750487 5470
@@ -13314,7 +13314,7 @@ sys/src/cmd/rio/wctl.c - 664 sys sys 1023206837 8808
 sys/src/cmd/rio/wind.c - 664 sys sys 1179591640 33382
 sys/src/cmd/rio/xfid.c - 664 sys sys 1103205531 17446
 sys/src/cmd/rm.c - 664 sys sys 1014926615 1563
-sys/src/cmd/rx.c - 664 sys sys 1099760378 4382
+sys/src/cmd/rx.c - 664 sys sys 1185066370 4411
 sys/src/cmd/sam - 20000000775 sys sys 1127393265 0
 sys/src/cmd/sam/acid.lib - 664 sys sys 1135487949 1516
 sys/src/cmd/sam/address.c - 664 sys sys 944961628 3985

+ 12 - 0
dist/replica/plan9.log

@@ -49646,3 +49646,15 @@
 1184947204 4 c sys/src/9/ip/udp.c - 664 sys sys 1184946959 13316
 1184952604 0 c sys/src/cmd/ip/icmp.h - 664 sys sys 1184951372 1461
 1184965204 0 c 386/9loaddebug - 775 sys sys 1184963933 417075
+1184992204 0 c sys/src/cmd/ndb/dblookup.c - 664 sys sys 1184990885 22626
+1184992204 1 c sys/src/cmd/ndb/dn.c - 664 sys sys 1184990893 36087
+1184992204 2 c sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1184990924 34536
+1184992204 3 c sys/src/cmd/ndb/dns.h - 664 sys sys 1184990871 11692
+1184992204 4 c sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1184990937 8766
+1184992204 5 c sys/src/cmd/ndb/dnserver.c - 664 sys sys 1184990866 4627
+1185049804 0 c 386/bin/ndb/dns - 775 sys sys 1185048646 291749
+1185049804 1 c 386/bin/ndb/dnsdebug - 775 sys sys 1185048647 266617
+1185049804 2 c 386/bin/ndb/dnstcp - 775 sys sys 1185048648 265056
+1185067804 0 c sys/man/1/con - 664 sys sys 1185067107 4865
+1185067804 1 c sys/src/cmd/con/con.c - 664 sys sys 1185066485 15264
+1185067804 2 c sys/src/cmd/rx.c - 664 sys sys 1185066370 4411

+ 44 - 20
sys/man/1/con

@@ -1,6 +1,6 @@
 .TH CON 1
 .SH NAME
-con, telnet, rx, xms, xmr \- remote login, execution, and XMODEM file transfer
+con, telnet, rx, hayes, xms, xmr \- remote login, execution, and XMODEM file transfer
 .SH SYNOPSIS
 .B con
 [
@@ -28,9 +28,6 @@ con, telnet, rx, xms, xmr \- remote login, execution, and XMODEM file transfer
 ]
 .RI [ net !] machine
 .PP
-.B cu
-.I number
-.PP
 .B rx
 [
 .B -eTr
@@ -44,6 +41,15 @@ con, telnet, rx, xms, xmr \- remote login, execution, and XMODEM file transfer
 .I command-word ...
 ]
 .PP
+.B hayes
+[
+.B -pv
+]
+.I number
+[
+.I device
+]
+.PP
 .B xms
 [
 .B -1p
@@ -74,7 +80,10 @@ but instead wait for the remote end to hang up.
 .B -l
 with an argument causes
 .I user
-to be used as the account name on the remote system.
+to be used as the account name on the remote system
+when performing BSD
+.I rlogin
+authentication.
 Without an argument this option disables automatic login
 and a normal login session ensues.
 .TP
@@ -85,8 +94,6 @@ forces cooked mode, that is, local echo.
 runs
 .I cmd
 as if it had been typed as a command from the escape mode.
-This is used by
-.IR cu .
 .TP
 .B -v
 (verbose mode) causes information about connection attempts
@@ -177,10 +184,9 @@ a zero length message will not be written to the
 connection when standard input is closed.
 .TP
 .B \-l
-allows
+runs as
 .I user
-to be used on the remote machine if the remote
-is a BSD machine.
+on the remote machine if the remote is a BSD machine.
 .TP
 .B \-r
 same as for
@@ -200,6 +206,18 @@ have the form
 Supported networks are those listed in
 .BR /net .
 .PP
+.I Hayes
+dials
+.I number
+on a Hayes-compatible modem,
+.IR device .
+Under
+.BR -p ,
+it uses pulse dialing.
+Upon connecting,
+bytes are copied bidirectionally
+between the connection and standard input and output.
+.PP
 The commands
 .I xms
 and
@@ -239,19 +257,25 @@ eqn paper | rx kremvax troff -ms | rx deepthought lp
 Parallel processing:
 do each stage of a pipeline on a different machine.
 .SH SOURCE
-.TF /sys/src/cmd/con
+.TF /sys/src/cmd/ip/telnet.c
 .TP
-.B /sys/src/cmd/con
-for
-.IR con ,
-.IR xms ,
-and
-.IR xmr .
+.B /sys/src/cmd/rx.c
 .TP
-.B /sys/src/cmd/ip
-for
-.IR telnet .
+.B /sys/src/cmd/ip/telnet.c
+.TP
+.B /sys/src/cmd/con
+for all other commands
+.SH SEE ALSO
+.IR cpu (1),
+.IR ssh (1),
+.IR telco (4)
 .SH BUGS
+.I Con
+and
+.I telnet
+are merely obsolescent;
+the other commands are obsolete and deprecated.
+.PP
 Under
 .IR rx ,
 a program

+ 1 - 1
sys/src/cmd/con/con.c

@@ -20,7 +20,7 @@ int	strip;		/* strip off parity bits */
 char firsterr[2*ERRMAX];
 char transerr[2*ERRMAX];
 int limited;
-char *remuser;
+char *remuser;		/* for BSD rlogin authentication */
 int verbose;
 int baud;
 int notkbd;

+ 9 - 8
sys/src/cmd/ndb/dblookup.c

@@ -591,7 +591,7 @@ dbpair2cache(DN *dp, Ndbtuple *entry, Ndbtuple *pair)
 	rp->owner = dp;
 	rp->db = 1;
 	rp->ttl = intval(entry, pair, "ttl", rp->ttl);
-	rrattach(rp, 0);
+	rrattach(rp, Notauthoritative);
 }
 static void
 dbtuple2cache(Ndbtuple *t)
@@ -875,7 +875,7 @@ addlocaldnsserver(DN *dp, int class, char *ipaddr, int i)
 	rp->db = 1;
 //	rp->ttl = 10*Min;		/* seems too short */
 	rp->ttl = (1UL<<31)-1;
-	rrattach(rp, 1);		/* will not attach rrs in my area */
+	rrattach(rp, Authoritative);	/* will not attach rrs in my area */
 
 	/* A record */
 	rp = rralloc(Ta);
@@ -885,7 +885,7 @@ addlocaldnsserver(DN *dp, int class, char *ipaddr, int i)
 	rp->db = 1;
 //	rp->ttl = 10*Min;		/* seems too short */
 	rp->ttl = (1UL<<31)-1;
-	rrattach(rp, 1);		/* will not attach rrs in my area */
+	rrattach(rp, Authoritative);	/* will not attach rrs in my area */
 
 	dnslog("added local dns server %s at %s", buf, ipaddr);
 }
@@ -942,7 +942,7 @@ addlocaldnsdomain(DN *dp, int class, char *domain)
 	rp->owner = dp;
 	rp->db = 1;
 	rp->ttl = 10*Min;
-	rrattach(rp, 1);
+	rrattach(rp, Authoritative);
 }
 
 /*
@@ -980,6 +980,7 @@ char *attribs[] = {
 
 /*
  *  create ptrs that are in our areas
+ *  TODO: generate v6 ptr rrs.  rfc3596
  */
 static void
 createptrs(void)
@@ -1006,25 +1007,25 @@ createptrs(void)
 		memset(mask, 0xff, IPaddrlen);
 		ipmove(net, v4prefix);
 		switch(n){
-		case 3: /* /8 */
+		case 3:			/* /8 */
 			net[IPv4off] = atoi(f[0]);
 			mask[IPv4off+1] = 0;
 			mask[IPv4off+2] = 0;
 			mask[IPv4off+3] = 0;
 			break;
-		case 4: /* /16 */
+		case 4:			/* /16 */
 			net[IPv4off] = atoi(f[1]);
 			net[IPv4off+1] = atoi(f[0]);
 			mask[IPv4off+2] = 0;
 			mask[IPv4off+3] = 0;
 			break;
-		case 5: /* /24 */
+		case 5:			/* /24 */
 			net[IPv4off] = atoi(f[2]);
 			net[IPv4off+1] = atoi(f[1]);
 			net[IPv4off+2] = atoi(f[0]);
 			mask[IPv4off+3] = 0;
 			break;
-		case 6:	/* rfc2317 */
+		case 6:			/* rfc2317 */
 			net[IPv4off] = atoi(f[3]);
 			net[IPv4off+1] = atoi(f[2]);
 			net[IPv4off+2] = atoi(f[1]);

+ 22 - 29
sys/src/cmd/ndb/dn.c

@@ -277,7 +277,6 @@ dnpurge(void)
 
 /*
  *  check the age of resource records, free any that have timed out
- *  TODO: keep root NS records.
  */
 void
 dnage(DN *dp)
@@ -287,7 +286,7 @@ dnage(DN *dp)
 	ulong diff;
 
 	diff = now - dp->referenced;
-	if(diff < Reserved)
+	if(diff < Reserved || dp->keep)
 		return;
 
 	l = &dp->rr;
@@ -305,34 +304,18 @@ dnage(DN *dp)
 	}
 }
 
-#define REF(x) upref(x)
-
-static void
-upref(DN *dp)
-{
-	if (dp != nil)
-		dp->refs++;
-}
-
 /*
  *  this comment used to say `our target is 4000 names cached, this should
  *  be larger on large servers'.  dns at Bell Labs starts off with
- *  about 1780 names, so 4000 is not a lot.
+ *  about 1780 names.
  */
 enum {
-	Deftarget = 8000,
+	Deftarget = 3000,
 };
 
 ulong target = Deftarget;
 
-#define MARK(x) mark(x)
-
-static void
-mark(DN *dp)
-{
-	if (dp != nil)
-		dp->keep = 1;
-}
+#define MARK(dp)	{ if (dp) (dp)->keep = 1; }
 
 /* mark all current domain names as never to be aged */
 void
@@ -346,7 +329,8 @@ dnagenever(void)
 
 	/* mark all referenced domain names */
 	for(i = 0; i < HTLEN; i++)
-		for(dp = ht[i]; dp; dp = dp->next)
+		for(dp = ht[i]; dp; dp = dp->next) {
+			MARK(dp);
 			for(rp = dp->rr; rp; rp = rp->next){
 				MARK(rp->owner);
 				if(rp->negative){
@@ -396,6 +380,7 @@ dnagenever(void)
 					break;
 				}
 			}
+		}
 
 	unlock(&dnlock);
 
@@ -405,6 +390,8 @@ dnagenever(void)
 			dnvars.names, target);
 }
 
+#define REF(dp)	{ if (dp) (dp)->refs++; }
+
 /*
  *  periodicly sweep for old records and remove unreferenced domain names
  *
@@ -414,7 +401,7 @@ void
 dnageall(int doit)
 {
 	DN *dp, **l;
-	int i;
+	int i, n;
 	RR *rp;
 	static ulong nextage;
 
@@ -505,6 +492,12 @@ dnageall(int doit)
 				assert(dp->magic == DNmagic);
 				*l = dp->next;
 
+				for (n = 0; n < Maxlcks; n++)
+					if (canqlock(&dp->querylck[n]))
+						qunlock(&dp->querylck[n]);
+					else
+						dnslog("dnageall: %s querylck[%d] held when freeing",
+							dp->name, n);
 				if(dp->name)
 					free(dp->name);
 				dp->magic = ~dp->magic;
@@ -654,10 +647,12 @@ putactivity(int recursive)
 }
 
 /*
- *  Attach a single resource record to a domain name.
+ *  Attach a single resource record to a domain name (new->owner).
  *	- Avoid duplicates with already present RR's
  *	- Chain all RR's of the same type adjacent to one another
  *	- chain authoritative RR's ahead of non-authoritative ones
+ *	- remove any expired RR's
+ *  Must be called with dnlock held.
  */
 static void
 rrattach1(RR *new, int auth)
@@ -746,10 +741,7 @@ rrattach1(RR *new, int auth)
 
 /*
  *  Attach a list of resource records to a domain name.
- *	- Avoid duplicates with already present RR's
- *	- Chain all RR's of the same type adjacent to one another
- *	- chain authoritative RR's ahead of non-authoritative ones
- *	- remove any expired RR's
+ *  See rrattach1 for properties preserved.
  */
 void
 rrattach(RR *rp, int auth)
@@ -1828,6 +1820,7 @@ mkptr(DN *dp, char *ptr, ulong ttl)
 /*
  *  look for all ip addresses in this network and make
  *  pointer records for them.
+ *  TODO: v6 ptr algorithm (nibble.nibble.....ip6.arpa), rfc3596
  */
 void
 dnptr(uchar *net, uchar *mask, char *dom, int bytes, int ttl)
@@ -1863,7 +1856,7 @@ dnptr(uchar *net, uchar *mask, char *dom, int bytes, int ttl)
 	for(rp = first; rp != nil; rp = nrp){
 		nrp = rp->next;
 		rp->next = nil;
-		rrattach(rp, 1);
+		rrattach(rp, Authoritative);
 	}
 }
 

+ 7 - 7
sys/src/cmd/ndb/dnresolve.c

@@ -134,7 +134,7 @@ dnresolve(char *name, int class, int type, Request *req, RR **cn, int depth,
 	 *  hack for systems that don't have resolve search
 	 *  lists.  Just look up the simple name in the database.
 	 */
-	if(!rooted && strchr(name, '.') == 0){
+	if(!rooted && strchr(name, '.') == nil){
 		rp = nil;
 		drp = domainlist(class);
 		for(nrp = drp; rp == nil && nrp != nil; nrp = nrp->next){
@@ -568,7 +568,7 @@ readnet(Query *qp, int medium, uchar *ibuf, ulong endtime, uchar **replyp,
 	len = -1;			/* pessimism */
 	memset(srcip, 0, IPaddrlen);
 	if (medium == Udp)
-		if (qp->udpfd <= 0) 
+		if (qp->udpfd <= 0)
 			dnslog("readnet: qp->udpfd closed");
 		else {
 			alarm(ms);
@@ -840,7 +840,7 @@ cacheneg(DN *dp, int type, int rcode, RR *soarr)
 		ttl = 5*Min;
 
 	/* add soa and negative RR to the database */
-	rrattach(soarr, 1);
+	rrattach(soarr, Authoritative);
 
 	rp = rralloc(type);
 	rp->owner = dp;
@@ -848,7 +848,7 @@ cacheneg(DN *dp, int type, int rcode, RR *soarr)
 	rp->negsoaowner = soaowner;
 	rp->negrcode = rcode;
 	rp->ttl = ttl;
-	rrattach(rp, 1);
+	rrattach(rp, Authoritative);
 }
 
 static int
@@ -1107,10 +1107,10 @@ procansw(Query *qp, DNSmsg *mp, uchar *srcip, int depth, Dest *p)
 	if(mp->an)
 		rrattach(mp->an, (mp->flags & Fauth) != 0);
 	if(mp->ar)
-		rrattach(mp->ar, 0);
+		rrattach(mp->ar, Notauthoritative);
 	if(mp->ns && !cfg.justforw){
 		ndp = mp->ns->owner;
-		rrattach(mp->ns, 0);
+		rrattach(mp->ns, Notauthoritative);
 	} else {
 		ndp = nil;
 		rrfreelist(mp->ns);
@@ -1538,7 +1538,7 @@ seerootns(void)
 	queryinit(&query, dnlookup(root, Cin, 1), Tns, &req);
 	query.nsrp = dblookup(root, Cin, Tns, 0, 0);
 	rv = netquery(&query, 0);
-	rrfreelist(query.nsrp);	
+	rrfreelist(query.nsrp);
 	querydestroy(&query);
 	return rv;
 }

+ 5 - 2
sys/src/cmd/ndb/dns.h

@@ -147,6 +147,9 @@ enum
 
 	/* tune; was 60; keep it short */
 	Maxreqtm=	10,	/* max. seconds to process a request */
+
+	Notauthoritative = 0,
+	Authoritative,
 };
 
 typedef struct Area	Area;
@@ -262,7 +265,7 @@ struct RR
 	uchar	cached;		/* flag: rr in cache */
 	uchar	negative;	/* flag: this is a cached negative response */
 
-	union {			/* discriminated how? negative & type? */
+	union {			/* discriminated by negative & type */
 		DN	*negsoaowner;	/* soa for cached negative response */
 		DN	*host;	/* hostname - soa, cname, mb, md, mf, mx, ns */
 		DN	*cpu;	/* cpu type - hinfo */
@@ -271,7 +274,7 @@ struct RR
 		DN	*rp;	/* rp arg - rp */
 		uintptr	arg0;	/* arg[01] are compared to find dups in dn.c */
 	};
-	union {			/* discriminated how? negative & type? */
+	union {			/* discriminated by negative & type */
 		int	negrcode; /* response code for cached negative resp. */
 		DN	*rmb;	/* responsible maibox - minfo, soa, rp */
 		DN	*ptr;	/* pointer to domain name - ptr */

+ 1 - 1
sys/src/cmd/ndb/dnsdebug.c

@@ -337,7 +337,7 @@ preloadserveraddrs(void)
 	l = &first;
 	for(rp = serveraddrs; rp != nil; rp = rp->next){
 		rrcopy(rp, l);
-		rrattach(first, 1);
+		rrattach(first, Authoritative);
 	}
 }
 

+ 7 - 1
sys/src/cmd/ndb/dnserver.c

@@ -115,6 +115,8 @@ dnserver(DNSmsg *reqp, DNSmsg *repp, Request *req, uchar *srcip, int rcode)
 				break;
 			}
 
+			if (strncmp(nsdp->name, "local#", 6) == 0)
+				dnslog("returning %s as nameserver", nsdp->name);
 			repp->ns = dblookup(cp, repp->qd->owner->class, Tns, 0, 0);
 			if(repp->ns)
 				break;
@@ -172,8 +174,10 @@ doextquery(DNSmsg *mp, Request *req, int recurse)
 	rp = dnresolve(name, Cin, type, req, &mp->an, 0, recurse, 1, 0);
 
 	/* don't return soa hints as answers, it's wrong */
-	if(rp && rp->db && !rp->auth && rp->type == Tsoa)
+	if(rp && rp->db && !rp->auth && rp->type == Tsoa) {
 		rrfreelist(rp);
+		rp = nil;
+	}
 
 	/* don't let negative cached entries escape */
 	neg = rrremneg(&rp);
@@ -195,6 +199,8 @@ hint(RR **last, RR *rp)
 		hp = rrlookup(rp->host, Ta, NOneg);
 		if(hp == nil)
 			hp = dblookup(rp->host->name, Cin, Ta, 0, 0);
+		if (hp && strncmp(hp->owner->name, "local#", 6) == 0)
+			dnslog("returning %s as hint", hp->owner->name);
 		rrcat(last, hp);
 		break;
 	}

+ 2 - 2
sys/src/cmd/rx.c

@@ -6,7 +6,7 @@ int	eof;		/* send an eof if true */
 int	crtonl;		/* convert all received \r to \n */
 int	returns;	/* strip \r on reception */
 char	*note = "die: yankee dog";
-char	*ruser;
+char	*ruser;		/* for BSD authentication */
 char *key;
 
 void	rex(int, char*, char*);
@@ -59,7 +59,7 @@ main(int argc, char *argv[])
 	host = argv[0];
 	args = buildargs(&argv[1]);
 
-	/* try erexexec p9any then dial again with p9sk2 */
+	/* try rexexec p9any then dial again with p9sk2 */
 	fd = call(0, host, "rexexec", &addr);
 	if(fd >= 0)
 		rex(fd, args, "p9any");