Browse Source

Plan 9 from Bell Labs 2003-04-04

David du Colombier 21 years ago
parent
commit
1ef5a17901

+ 9 - 2
386/bin/aux/vmware

@@ -1,8 +1,15 @@
 #!/bin/rc
 #!/bin/rc
 
 
 if(aux/isvmware -s){
 if(aux/isvmware -s){
-	echo -n on >'#P/pge'	# default, but set anyway.
-	echo -n off >'#P/i8253timerset'
+	if(test -f '#P/pge'){
+		echo -n on >'#P/pge'	# default, but set anyway.
+		echo -n off >'#P/i8253timerset'
+	}
+	if(test -f /dev/archctl){
+		echo pge on >/dev/archctl
+		echo coherence nop >/dev/archctl
+		echo i8253set off >/dev/archctl
+	}
 	for(i in '#S'/sd??)
 	for(i in '#S'/sd??)
 		if(test -f $i/ctl)
 		if(test -f $i/ctl)
 			echo dma on >$i/ctl
 			echo dma on >$i/ctl

+ 17 - 16
dist/replica/plan9.db

@@ -146,7 +146,7 @@
 386/bin/aux/typepasswd - 775 sys sys 1045537960 68154
 386/bin/aux/typepasswd - 775 sys sys 1045537960 68154
 386/bin/aux/vga - 775 sys sys 1048745030 300067
 386/bin/aux/vga - 775 sys sys 1048745030 300067
 386/bin/aux/vmmousepoll - 775 sys sys 1032480572 41434
 386/bin/aux/vmmousepoll - 775 sys sys 1032480572 41434
-386/bin/aux/vmware - 775 sys sys 1045537961 298
+386/bin/aux/vmware - 775 sys sys 1049428256 453
 386/bin/aux/vmwarefs - 775 sys sys 1045537962 102172
 386/bin/aux/vmwarefs - 775 sys sys 1045537962 102172
 386/bin/aux/write - 775 sys sys 1038443108 4198
 386/bin/aux/write - 775 sys sys 1038443108 4198
 386/bin/awd - 775 sys sys 1038443108 5033
 386/bin/awd - 775 sys sys 1038443108 5033
@@ -295,12 +295,12 @@
 386/bin/mtime - 775 sys sys 1045538032 57878
 386/bin/mtime - 775 sys sys 1045538032 57878
 386/bin/mv - 775 sys sys 1045538032 64996
 386/bin/mv - 775 sys sys 1045538032 64996
 386/bin/ndb - 20000000775 sys sys 985743147 0
 386/bin/ndb - 20000000775 sys sys 985743147 0
-386/bin/ndb/cs - 775 sys sys 1049249435 143599
+386/bin/ndb/cs - 775 sys sys 1049377481 143599
 386/bin/ndb/csquery - 775 sys sys 1039758577 60136
 386/bin/ndb/csquery - 775 sys sys 1039758577 60136
-386/bin/ndb/dns - 775 sys sys 1049249442 211255
-386/bin/ndb/dnsdebug - 775 sys sys 1048745056 186027
+386/bin/ndb/dns - 775 sys sys 1049428257 211411
+386/bin/ndb/dnsdebug - 775 sys sys 1049428257 186400
 386/bin/ndb/dnsquery - 775 sys sys 1039758578 62442
 386/bin/ndb/dnsquery - 775 sys sys 1039758578 62442
-386/bin/ndb/dnstcp - 775 sys sys 1048745057 184851
+386/bin/ndb/dnstcp - 775 sys sys 1049428258 185185
 386/bin/ndb/ipquery - 775 sys sys 1045538035 91678
 386/bin/ndb/ipquery - 775 sys sys 1045538035 91678
 386/bin/ndb/mkdb - 775 sys sys 1039758578 62632
 386/bin/ndb/mkdb - 775 sys sys 1039758578 62632
 386/bin/ndb/mkhash - 775 sys sys 1045538035 82294
 386/bin/ndb/mkhash - 775 sys sys 1045538035 82294
@@ -420,8 +420,8 @@
 386/bin/upas/runq - 775 sys sys 1048745088 111315
 386/bin/upas/runq - 775 sys sys 1048745088 111315
 386/bin/upas/scanmail - 775 sys sys 1048745089 127491
 386/bin/upas/scanmail - 775 sys sys 1048745089 127491
 386/bin/upas/send - 775 sys sys 1048799701 188975
 386/bin/upas/send - 775 sys sys 1048799701 188975
-386/bin/upas/smtp - 775 sys sys 1049249426 268972
-386/bin/upas/smtpd - 775 sys sys 1048799703 311374
+386/bin/upas/smtp - 775 sys sys 1049377485 268184
+386/bin/upas/smtpd - 775 sys sys 1049428259 312341
 386/bin/upas/testscan - 775 sys sys 1045538077 82381
 386/bin/upas/testscan - 775 sys sys 1045538077 82381
 386/bin/upas/token - 775 sys sys 1039758605 76178
 386/bin/upas/token - 775 sys sys 1039758605 76178
 386/bin/upas/vf - 775 sys sys 1045538077 90532
 386/bin/upas/vf - 775 sys sys 1045538077 90532
@@ -2963,6 +2963,7 @@ rc/bin/service/tcp17005 - 775 sys sys 965182903 31
 rc/bin/service/tcp17006 - 775 sys sys 965182903 15
 rc/bin/service/tcp17006 - 775 sys sys 965182903 15
 rc/bin/service/tcp17007 - 775 sys sys 1016832239 86
 rc/bin/service/tcp17007 - 775 sys sys 1016832239 86
 rc/bin/service/tcp17009 - 775 sys sys 950049242 31
 rc/bin/service/tcp17009 - 775 sys sys 950049242 31
+rc/bin/service/tcp17010 - 775 sys sys 1049413268 14
 rc/bin/service/tcp17013 - 775 sys sys 1016832196 14
 rc/bin/service/tcp17013 - 775 sys sys 1016832196 14
 rc/bin/service/tcp19 - 775 sys sys 945617223 30
 rc/bin/service/tcp19 - 775 sys sys 945617223 30
 rc/bin/service/tcp21 - 775 sys sys 954517722 31
 rc/bin/service/tcp21 - 775 sys sys 954517722 31
@@ -3285,7 +3286,7 @@ sys/include/html.h - 664 sys sys 1017679304 15157
 sys/include/httpd.h - 664 sys sys 1014929064 5726
 sys/include/httpd.h - 664 sys sys 1014929064 5726
 sys/include/ip.h - 664 sys sys 1015700847 2395
 sys/include/ip.h - 664 sys sys 1015700847 2395
 sys/include/keyboard.h - 664 sys sys 1014929064 799
 sys/include/keyboard.h - 664 sys sys 1014929064 799
-sys/include/libc.h - 664 sys sys 1037035097 18624
+sys/include/libc.h - 664 sys sys 1049426002 18829
 sys/include/libsec.h - 664 sys sys 1048616895 8914
 sys/include/libsec.h - 664 sys sys 1048616895 8914
 sys/include/mach.h - 664 sys sys 1032058231 8101
 sys/include/mach.h - 664 sys sys 1032058231 8101
 sys/include/memdraw.h - 664 sys sys 1039752978 5616
 sys/include/memdraw.h - 664 sys sys 1039752978 5616
@@ -4891,7 +4892,7 @@ sys/man/8/scuzz - 664 sys sys 984709640 7916
 sys/man/8/secstore - 664 sys sys 1045501623 990
 sys/man/8/secstore - 664 sys sys 1045501623 990
 sys/man/8/securenet - 664 sys sys 954305552 3160
 sys/man/8/securenet - 664 sys sys 954305552 3160
 sys/man/8/send - 664 sys sys 1045501634 2168
 sys/man/8/send - 664 sys sys 1045501634 2168
-sys/man/8/smtp - 664 sys sys 1045501674 3966
+sys/man/8/smtp - 664 sys sys 1049408388 4111
 sys/man/8/snoopy - 664 sys sys 1034009982 3714
 sys/man/8/snoopy - 664 sys sys 1034009982 3714
 sys/man/8/stats - 664 sys sys 1045059512 4042
 sys/man/8/stats - 664 sys sys 1045059512 4042
 sys/man/8/stub - 664 sys sys 1044830500 943
 sys/man/8/stub - 664 sys sys 1044830500 943
@@ -5051,11 +5052,11 @@ sys/src/9/ip/igmp.c - 664 sys sys 1047260564 5190
 sys/src/9/ip/il.c - 664 sys sys 1047260564 26943
 sys/src/9/ip/il.c - 664 sys sys 1047260564 26943
 sys/src/9/ip/inferno.c - 664 sys sys 1022588098 517
 sys/src/9/ip/inferno.c - 664 sys sys 1022588098 517
 sys/src/9/ip/ip.c - 664 sys sys 1047951326 15285
 sys/src/9/ip/ip.c - 664 sys sys 1047951326 15285
-sys/src/9/ip/ip.h - 664 sys sys 1047260722 16078
-sys/src/9/ip/ipaux.c - 664 sys sys 1022588098 12656
+sys/src/9/ip/ip.h - 664 sys sys 1049423191 16080
+sys/src/9/ip/ipaux.c - 664 sys sys 1049423191 12798
 sys/src/9/ip/ipifc.c - 664 sys sys 1048288617 37843
 sys/src/9/ip/ipifc.c - 664 sys sys 1048288617 37843
 sys/src/9/ip/ipmux.c - 664 sys sys 1047260566 15362
 sys/src/9/ip/ipmux.c - 664 sys sys 1047260566 15362
-sys/src/9/ip/iproute.c - 664 sys sys 1047951327 14767
+sys/src/9/ip/iproute.c - 664 sys sys 1049423192 14763
 sys/src/9/ip/ipv6.c - 664 sys sys 1047951328 14433
 sys/src/9/ip/ipv6.c - 664 sys sys 1047951328 14433
 sys/src/9/ip/ipv6.h - 664 sys sys 1022588099 4304
 sys/src/9/ip/ipv6.h - 664 sys sys 1022588099 4304
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1045063513 1651
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1045063513 1651
@@ -9309,7 +9310,7 @@ sys/src/cmd/ndb/cs.c - 664 sys sys 1049249331 32741
 sys/src/cmd/ndb/csgetval.c - 664 sys sys 957402051 1051
 sys/src/cmd/ndb/csgetval.c - 664 sys sys 957402051 1051
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1014926159 1062
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1014926159 1062
 sys/src/cmd/ndb/dblookup.c - 664 sys sys 1049249333 18409
 sys/src/cmd/ndb/dblookup.c - 664 sys sys 1049249333 18409
-sys/src/cmd/ndb/dn.c - 664 sys sys 1049249332 25182
+sys/src/cmd/ndb/dn.c - 664 sys sys 1049408473 25198
 sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1049249333 15279
 sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1049249333 15279
 sys/src/cmd/ndb/dns.c - 664 sys sys 1049249331 15051
 sys/src/cmd/ndb/dns.c - 664 sys sys 1049249331 15051
 sys/src/cmd/ndb/dns.h - 664 sys sys 1032060499 8082
 sys/src/cmd/ndb/dns.h - 664 sys sys 1032060499 8082
@@ -9751,7 +9752,7 @@ sys/src/cmd/rc/trap.c - 664 sys sys 944961083 880
 sys/src/cmd/rc/tree.c - 664 sys sys 944961083 1968
 sys/src/cmd/rc/tree.c - 664 sys sys 944961083 1968
 sys/src/cmd/rc/unix.c - 664 sys sys 1045505529 8702
 sys/src/cmd/rc/unix.c - 664 sys sys 1045505529 8702
 sys/src/cmd/rc/var.c - 664 sys sys 944961083 1282
 sys/src/cmd/rc/var.c - 664 sys sys 944961083 1282
-sys/src/cmd/rdbfs.c - 664 sys sys 1045505538 7974
+sys/src/cmd/rdbfs.c - 664 sys sys 1049426950 7952
 sys/src/cmd/read.c - 664 sys sys 1022047660 1278
 sys/src/cmd/read.c - 664 sys sys 1022047660 1278
 sys/src/cmd/replica - 20000000775 sys sys 1018321113 0
 sys/src/cmd/replica - 20000000775 sys sys 1018321113 0
 sys/src/cmd/replica/all.h - 664 sys sys 1018323474 1181
 sys/src/cmd/replica/all.h - 664 sys sys 1018323474 1181
@@ -10425,7 +10426,7 @@ sys/src/cmd/upas/smtp/rfc822.y - 664 sys sys 1018974179 12512
 sys/src/cmd/upas/smtp/rmtdns.c - 664 sys sys 1015013150 1069
 sys/src/cmd/upas/smtp/rmtdns.c - 664 sys sys 1015013150 1069
 sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1049249402 18227
 sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1049249402 18227
 sys/src/cmd/upas/smtp/smtp.h - 664 sys sys 1015013151 1038
 sys/src/cmd/upas/smtp/smtp.h - 664 sys sys 1015013151 1038
-sys/src/cmd/upas/smtp/smtpd.c - 664 sys sys 1046783570 24124
+sys/src/cmd/upas/smtp/smtpd.c - 664 sys sys 1049408234 24269
 sys/src/cmd/upas/smtp/smtpd.h - 664 sys sys 1045505962 1063
 sys/src/cmd/upas/smtp/smtpd.h - 664 sys sys 1045505962 1063
 sys/src/cmd/upas/smtp/smtpd.y - 664 sys sys 1043171647 6911
 sys/src/cmd/upas/smtp/smtpd.y - 664 sys sys 1043171647 6911
 sys/src/cmd/upas/smtp/spam.c - 664 sys sys 1045505970 9221
 sys/src/cmd/upas/smtp/spam.c - 664 sys sys 1045505970 9221
@@ -11024,7 +11025,7 @@ sys/src/libc/9sys/privalloc.c - 664 sys sys 984709402 606
 sys/src/libc/9sys/pushssl.c - 664 sys sys 1014927338 905
 sys/src/libc/9sys/pushssl.c - 664 sys sys 1014927338 905
 sys/src/libc/9sys/pushtls.c - 664 sys sys 1014927338 2009
 sys/src/libc/9sys/pushtls.c - 664 sys sys 1014927338 2009
 sys/src/libc/9sys/putenv.c - 664 sys sys 985023079 398
 sys/src/libc/9sys/putenv.c - 664 sys sys 985023079 398
-sys/src/libc/9sys/qlock.c - 664 sys sys 1048645387 3793
+sys/src/libc/9sys/qlock.c - 664 sys sys 1049426327 5060
 sys/src/libc/9sys/read.c - 664 sys sys 1014927339 108
 sys/src/libc/9sys/read.c - 664 sys sys 1014927339 108
 sys/src/libc/9sys/read9pmsg.c - 664 sys sys 1014927339 462
 sys/src/libc/9sys/read9pmsg.c - 664 sys sys 1014927339 462
 sys/src/libc/9sys/readv.c - 664 sys sys 1014927339 645
 sys/src/libc/9sys/readv.c - 664 sys sys 1014927339 645

+ 23 - 0
dist/replica/plan9.log

@@ -19043,3 +19043,26 @@
 1049250615 9 c sys/src/cmd/ndb/mkfile - 664 sys sys 1049249334 1835
 1049250615 9 c sys/src/cmd/ndb/mkfile - 664 sys sys 1049249334 1835
 1049250615 10 c sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1049249402 18227
 1049250615 10 c sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1049249402 18227
 1049304670 0 c sys/man/8/ndb - 664 sys sys 1049303346 9367
 1049304670 0 c sys/man/8/ndb - 664 sys sys 1049303346 9367
+1049378412 0 c 386/bin/ndb/cs - 775 sys sys 1049377481 143599
+1049378412 1 c 386/bin/ndb/dns - 775 sys sys 1049377482 211380
+1049378412 2 c 386/bin/ndb/dnsdebug - 775 sys sys 1049377483 186367
+1049378412 3 c 386/bin/ndb/dnstcp - 775 sys sys 1049377483 185152
+1049378412 4 c 386/bin/upas/smtp - 775 sys sys 1049377485 268184
+1049409044 0 c 386/bin/ndb/dns - 775 sys sys 1049408472 211288
+1049409044 1 c 386/bin/upas/smtpd - 775 sys sys 1049408250 312231
+1049409044 2 c sys/man/8/smtp - 664 sys sys 1049408388 4111
+1049409044 3 c sys/src/cmd/ndb/dn.c - 664 sys sys 1049408473 25198
+1049409044 4 c sys/src/cmd/upas/smtp/smtpd.c - 664 sys sys 1049408234 24269
+1049412648 0 c 386/bin/aux/vmware - 775 sys sys 1049412146 453
+1049413402 0 a rc/bin/service/tcp17010 - 775 sys sys 1049413268 14
+1049423459 0 c sys/src/9/ip/ip.h - 664 sys sys 1049423191 16080
+1049423459 1 c sys/src/9/ip/ipaux.c - 664 sys sys 1049423191 12798
+1049423459 2 c sys/src/9/ip/iproute.c - 664 sys sys 1049423192 14763
+1049426003 0 c sys/include/libc.h - 664 sys sys 1049426002 18829
+1049426331 0 c sys/src/libc/9sys/qlock.c - 664 sys sys 1049426327 5060
+1049426957 0 c sys/src/cmd/rdbfs.c - 664 sys sys 1049426950 7952
+1049428865 0 c 386/bin/aux/vmware - 775 sys sys 1049428256 453
+1049428865 1 c 386/bin/ndb/dns - 775 sys sys 1049428257 211411
+1049428865 2 c 386/bin/ndb/dnsdebug - 775 sys sys 1049428257 186400
+1049428865 3 c 386/bin/ndb/dnstcp - 775 sys sys 1049428258 185185
+1049428865 4 c 386/bin/upas/smtpd - 775 sys sys 1049428259 312341

+ 1 - 0
rc/bin/service/tcp17010

@@ -0,0 +1 @@
+#!/bin/cpu -R

+ 11 - 0
sys/include/libc.h

@@ -429,6 +429,17 @@ extern	void	wlock(RWLock*);
 extern	void	wunlock(RWLock*);
 extern	void	wunlock(RWLock*);
 extern	int		canwlock(RWLock*);
 extern	int		canwlock(RWLock*);
 
 
+typedef
+struct Rendez
+{
+	QLock *l;
+	QLp	*head;
+	QLp	*tail;
+} Rendez;
+
+extern	void	rsleep(Rendez*);	/* unlocks r->l, sleeps, locks r->l again */
+extern	int	rwakeup(Rendez*);
+extern	int	rwakeupall(Rendez*);
 extern	void**	privalloc(void);
 extern	void**	privalloc(void);
 extern	void	privfree(void**);
 extern	void	privfree(void**);
 
 

+ 7 - 0
sys/man/8/smtp

@@ -34,6 +34,9 @@ smtp, smtpd \-  mail transport
 ][
 ][
 .B -k
 .B -k
 .I evilipaddr
 .I evilipaddr
+][
+.B -c
+.I certfile
 ]
 ]
 .SH DESCRIPTION
 .SH DESCRIPTION
 .PP
 .PP
@@ -143,6 +146,10 @@ service attacks or broken mailers which continually
 connect.  The connections are not logged and the
 connect.  The connections are not logged and the
 remote system is not notified via the protocol.
 remote system is not notified via the protocol.
 .TP
 .TP
+.B -c
+specifies a certificate to use for TLS.  Without this
+option, the capability to start TLS will not be advertised.
+.TP
 .B -a
 .B -a
 requires that all clients authenticate to be able to send mail.
 requires that all clients authenticate to be able to send mail.
 .TP
 .TP

+ 1 - 1
sys/src/9/ip/ip.h

@@ -440,10 +440,10 @@ enum
 
 
 struct Routewalk
 struct Routewalk
 {
 {
-	int	n;
 	int	o;
 	int	o;
 	int	h;
 	int	h;
 	char*	p;
 	char*	p;
+	char*	e;
 	void*	state;
 	void*	state;
 	void	(*walk)(Route*, Routewalk*);
 	void	(*walk)(Route*, Routewalk*);
 };
 };

+ 11 - 7
sys/src/9/ip/ipaux.c

@@ -282,13 +282,16 @@ eipfmt(Fmt *f)
 	switch(f->r) {
 	switch(f->r) {
 	case 'E':		/* Ethernet address */
 	case 'E':		/* Ethernet address */
 		p = va_arg(f->args, uchar*);
 		p = va_arg(f->args, uchar*);
-		return fmtprint(f, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
+		snprint(buf, sizeof buf, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
+		return fmtstrcpy(f, buf);
 
 
 	case 'I':		/* Ip address */
 	case 'I':		/* Ip address */
 		p = va_arg(f->args, uchar*);
 		p = va_arg(f->args, uchar*);
 common:
 common:
-		if(memcmp(p, v4prefix, 12) == 0)
-			return fmtprint(f, ifmt, p[12], p[13], p[14], p[15]);
+		if(memcmp(p, v4prefix, 12) == 0){
+			snprint(buf, sizeof buf, ifmt, p[12], p[13], p[14], p[15]);
+			return fmtstrcpy(f, buf);
+		}
 
 
 		/* find longest elision */
 		/* find longest elision */
 		eln = eli = -1;
 		eln = eli = -1;
@@ -326,7 +329,8 @@ common:
 
 
 	case 'V':		/* v4 ip address */
 	case 'V':		/* v4 ip address */
 		p = va_arg(f->args, uchar*);
 		p = va_arg(f->args, uchar*);
-		return fmtprint(f, ifmt, p[0], p[1], p[2], p[3]);
+		snprint(buf, sizeof buf, ifmt, p[0], p[1], p[2], p[3]);
+		return fmtstrcpy(f, buf);
 
 
 	case 'M':		/* ip mask */
 	case 'M':		/* ip mask */
 		p = va_arg(f->args, uchar*);
 		p = va_arg(f->args, uchar*);
@@ -346,10 +350,10 @@ common:
 			n = 8*16;
 			n = 8*16;
 
 
 		/* got one, use /xx format */
 		/* got one, use /xx format */
-		return fmtprint(f, "/%d", n);
-
+		snprint(buf, sizeof buf, "/%d", n);
+		return fmtstrcpy(f, buf);
 	}
 	}
-	return fmtprint(f, "(eipfmt)");
+	return fmtstrcpy(f, "(eipfmt)");
 }
 }
 
 
 #define CLASS(p) ((*(uchar*)(p))>>6)
 #define CLASS(p) ((*(uchar*)(p))>>6)

+ 24 - 29
sys/src/9/ip/iproute.c

@@ -617,12 +617,7 @@ routetype(int type, char *p)
 		*p = 'p';
 		*p = 'p';
 }
 }
 
 
-enum
-{
-	Rlinelen=	137,
-};
-
-char *rformat = "%-40.40I %-40.40M %-40.40I %4.4s %4.4s %3s\n";
+char *rformat = "%-15I %-4M %-15I %4.4s %4.4s %3s\n";
 
 
 void
 void
 convroute(Route *r, uchar *addr, uchar *mask, uchar *gate, char *t, int *nifc)
 convroute(Route *r, uchar *addr, uchar *mask, uchar *gate, char *t, int *nifc)
@@ -658,21 +653,27 @@ convroute(Route *r, uchar *addr, uchar *mask, uchar *gate, char *t, int *nifc)
 static void
 static void
 sprintroute(Route *r, Routewalk *rw)
 sprintroute(Route *r, Routewalk *rw)
 {
 {
-	int nifc;
+	int nifc, n;
 	char t[5], *iname, ifbuf[5];
 	char t[5], *iname, ifbuf[5];
 	uchar addr[IPaddrlen], mask[IPaddrlen], gate[IPaddrlen];
 	uchar addr[IPaddrlen], mask[IPaddrlen], gate[IPaddrlen];
+	char *p;
 
 
-	if(rw->o >= 0) {
-		convroute(r, addr, mask, gate, t, &nifc);
-		iname = "-";
-		if(nifc != -1) {
-			iname = ifbuf;
-			sprint(ifbuf, "%d", nifc);
-		}
-		sprint(rw->p, rformat, addr, mask, gate, t, r->tag, iname);
-		rw->p += Rlinelen;
+	convroute(r, addr, mask, gate, t, &nifc);
+	iname = "-";
+	if(nifc != -1) {
+		iname = ifbuf;
+		sprint(ifbuf, "%d", nifc);
 	}
 	}
-	rw->o++;
+	p = seprint(rw->p, rw->e, rformat, addr, mask, gate, t, r->tag, iname);
+	if(rw->o < 0){
+		n = p - rw->p;
+		if(n > -rw->o){
+			memmove(rw->p, rw->p-rw->o, n+rw->o);
+			rw->p = p + rw->o;
+		}
+		rw->o += n;
+	} else
+		rw->p = p;
 }
 }
 
 
 /*
 /*
@@ -683,7 +684,7 @@ rr(Route *r, Routewalk *rw)
 {
 {
 	int h;
 	int h;
 
 
-	if(rw->n <= rw->o)
+	if(rw->e <= rw->p)
 		return 0;
 		return 0;
 	if(r == nil)
 	if(r == nil)
 		return 1;
 		return 1;
@@ -709,12 +710,12 @@ void
 ipwalkroutes(Fs *f, Routewalk *rw)
 ipwalkroutes(Fs *f, Routewalk *rw)
 {
 {
 	rlock(&routelock);
 	rlock(&routelock);
-	if(rw->n > rw->o) {
+	if(rw->e > rw->p) {
 		for(rw->h = 0; rw->h < nelem(f->v4root); rw->h++)
 		for(rw->h = 0; rw->h < nelem(f->v4root); rw->h++)
 			if(rr(f->v4root[rw->h], rw) == 0)
 			if(rr(f->v4root[rw->h], rw) == 0)
 				break;
 				break;
 	}
 	}
-	if(rw->n > rw->o) {
+	if(rw->e > rw->p) {
 		for(rw->h = 0; rw->h < nelem(f->v6root); rw->h++)
 		for(rw->h = 0; rw->h < nelem(f->v6root); rw->h++)
 			if(rr(f->v6root[rw->h], rw) == 0)
 			if(rr(f->v6root[rw->h], rw) == 0)
 				break;
 				break;
@@ -727,20 +728,14 @@ routeread(Fs *f, char *p, ulong offset, int n)
 {
 {
 	Routewalk rw;
 	Routewalk rw;
 
 
-	if(offset % Rlinelen)
-		return 0;
-
 	rw.p = p;
 	rw.p = p;
-	rw.n = n/Rlinelen;
-	rw.o = -(offset/Rlinelen);
+	rw.e = p+n;
+	rw.o = -offset;
 	rw.walk = sprintroute;
 	rw.walk = sprintroute;
 
 
 	ipwalkroutes(f, &rw);
 	ipwalkroutes(f, &rw);
 
 
-	if(rw.o < 0)
-		rw.o = 0;
-
-	return rw.o*Rlinelen;
+	return rw.p - p;
 }
 }
 
 
 /*
 /*

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

@@ -1448,7 +1448,7 @@ syslog(0, logfile, "looking for things in %s %I %I", dom, net, mask);
 	for(i = 0; i < HTLEN; i++){
 	for(i = 0; i < HTLEN; i++){
 		for(dp = ht[i]; dp; dp = dp->next){
 		for(dp = ht[i]; dp; dp = dp->next){
 			for(rp = dp->rr; rp; rp = rp->next){
 			for(rp = dp->rr; rp; rp = rp->next){
-				if(rp->type != Ta)
+				if(rp->type != Ta || rp->negative)
 					continue;
 					continue;
 				parseip(ip, rp->ip->name);
 				parseip(ip, rp->ip->name);
 				maskip(ip, mask, nnet);
 				maskip(ip, mask, nnet);

+ 0 - 1
sys/src/cmd/rdbfs.c

@@ -129,7 +129,6 @@ enum
 	Xtext,
 	Xtext,
 	Xstatus,
 	Xstatus,
 
 
-	Rendez = 0x89ABCDEF,
 };
 };
 
 
 int	textfd;
 int	textfd;

+ 9 - 5
sys/src/cmd/upas/smtp/smtpd.c

@@ -30,7 +30,7 @@ int	sflag;
 int	authenticate;
 int	authenticate;
 int	authenticated;
 int	authenticated;
 int	passwordinclear;
 int	passwordinclear;
-int	tlsok;
+char	*tlscert;
 
 
 List senders;
 List senders;
 List rcvers;
 List rcvers;
@@ -126,11 +126,15 @@ main(int argc, char **argv)
 	case 'p':
 	case 'p':
 		passwordinclear = 1;
 		passwordinclear = 1;
 		break;
 		break;
+	case 'c':
+		tlscert = ARGF();
+		break;
 	case 't':
 	case 't':
-		tlsok = 1;
+		fprint(2, "%s: the -t option is no longer supported, see -c\n", argv0);
+		tlscert = "/sys/lib/ssl/smtpd-cert.pem";
 		break;
 		break;
 	default:
 	default:
-		fprint(2, "usage: smtpd [-dfhrs] [-n net]\n");
+		fprint(2, "usage: smtpd [-dfhrs] [-n net] [-c cert]\n");
 		exits("usage");
 		exits("usage");
 	}ARGEND;
 	}ARGEND;
 
 
@@ -257,7 +261,7 @@ hello(String *himp, int extended)
 
 
 	reply("250%c%s you are %s\r\n", extended ? '-' : ' ', dom, him);
 	reply("250%c%s you are %s\r\n", extended ? '-' : ' ', dom, him);
 	if (extended) {
 	if (extended) {
-		if(tlsok)
+		if(tlscert != nil)
 			reply("250-STARTTLS\r\n");
 			reply("250-STARTTLS\r\n");
 		if (passwordinclear)		
 		if (passwordinclear)		
 			reply("250 AUTH CRAM-MD5 PLAIN LOGIN\r\n");
 			reply("250 AUTH CRAM-MD5 PLAIN LOGIN\r\n");
@@ -1031,7 +1035,7 @@ starttls(void)
 	TLSconn *conn;
 	TLSconn *conn;
 
 
 	conn = mallocz(sizeof *conn, 1);
 	conn = mallocz(sizeof *conn, 1);
-	cert = readcert("/sys/lib/ssl/smtpd-cert.pem", &certlen);
+	cert = readcert(tlscert, &certlen);
 	if (conn == nil || cert == nil) {
 	if (conn == nil || cert == nil) {
 		if (conn != nil)
 		if (conn != nil)
 			free(conn);
 			free(conn);

+ 90 - 0
sys/src/libc/9sys/qlock.c

@@ -13,6 +13,7 @@ enum
 	Queuing,
 	Queuing,
 	QueuingR,
 	QueuingR,
 	QueuingW,
 	QueuingW,
+	Sleeping,
 };
 };
 
 
 static ulong	(*_rendezvousp)(ulong, ulong) = rendezvous;
 static ulong	(*_rendezvousp)(ulong, ulong) = rendezvous;
@@ -268,3 +269,92 @@ wunlock(RWLock *q)
 	q->writer = 0;
 	q->writer = 0;
 	unlock(&q->lock);
 	unlock(&q->lock);
 }
 }
+
+void
+rsleep(Rendez *r)
+{
+	QLp *t, *me;
+
+	if(!r->l)
+		abort();
+	lock(&r->l->lock);
+	/* we should hold the qlock */
+	if(!r->l->locked)
+		abort();
+
+	/* add ourselves to the wait list */
+	me = getqlp();
+	me->state = Sleeping;
+	if(r->head == nil)
+		r->head = me;
+	else
+		r->tail->next = me;
+	me->next = nil;
+	r->tail = me;
+
+	/* pass the qlock to the next guy */
+	t = r->l->head;
+	if(t){
+		r->l->head = t->next;
+		if(r->l->head == nil)
+			r->l->tail = nil;
+		unlock(&r->l->lock);
+		while((*_rendezvousp)((ulong)t, 0x12345) == ~0)
+			;
+	}else{
+		r->l->locked = 0;
+		unlock(&r->l->lock);
+	}
+
+	/* wait for a wakeup */
+	while((*_rendezvousp)((ulong)me, 1) == ~0)
+		;
+	me->inuse = 0;
+}
+
+int
+rwakeup(Rendez *r)
+{
+	QLp *t;
+
+	/*
+	 * take off wait and put on front of queue
+	 * put on front so guys that have been waiting will not get starved
+	 */
+	
+	if(!r->l)
+		abort();
+	lock(&r->l->lock);
+	if(!r->l->locked)
+		abort();
+
+	t = r->head;
+	if(t == nil){
+		unlock(&r->l->lock);
+		return 0;
+	}
+
+	r->head = t->next;
+	if(r->head == nil)
+		r->tail = nil;
+
+	t->next = r->l->head;
+	r->l->head = t;
+	if(r->l->tail == nil)
+		r->l->tail = t;
+
+	t->state = Queuing;
+	unlock(&r->l->lock);
+	return 1;
+}
+
+int
+rwakeupall(Rendez *r)
+{
+	int i;
+
+	for(i=0; rwakeup(r); i++)
+		;
+	return i;
+}
+