Browse Source

Plan 9 from Bell Labs 2003-04-30

David du Colombier 21 years ago
parent
commit
3641ddda50

+ 3 - 3
dist/replica/plan9.db

@@ -6048,9 +6048,9 @@ sys/src/ape/lib/bsd/setlinebuf.c - 664 sys sys 1014921995 111
 sys/src/ape/lib/bsd/shutdown.c - 664 sys sys 1014921995 117
 sys/src/ape/lib/bsd/socket.c - 664 sys sys 1014921995 2810
 sys/src/ape/lib/bsd/socketpair.c - 664 sys sys 1014921995 325
-sys/src/ape/lib/bsd/strcasecmp.c - 664 sys sys 1014921995 299
+sys/src/ape/lib/bsd/strcasecmp.c - 664 sys sys 1051635385 343
 sys/src/ape/lib/bsd/strdup.c - 664 sys sys 1014921995 182
-sys/src/ape/lib/bsd/strncasecmp.c - 664 sys sys 1014921995 684
+sys/src/ape/lib/bsd/strncasecmp.c - 664 sys sys 1051635385 385
 sys/src/ape/lib/bsd/writev.c - 664 sys sys 1014921995 908
 sys/src/ape/lib/l - 20000000775 sys sys 1014921994 0
 sys/src/ape/lib/l/allprint.c - 664 sys sys 1014921994 458
@@ -10364,7 +10364,7 @@ sys/src/cmd/upas/fs/imap4.c - 664 sys sys 1047490338 16071
 sys/src/cmd/upas/fs/mbox.c - 664 sys sys 1047490342 28282
 sys/src/cmd/upas/fs/mkfile - 664 sys sys 1047490336 321
 sys/src/cmd/upas/fs/plan9.c - 664 sys sys 1047490343 7464
-sys/src/cmd/upas/fs/pop3.c - 664 sys sys 1048645264 11514
+sys/src/cmd/upas/fs/pop3.c - 664 sys sys 1051633710 11590
 sys/src/cmd/upas/fs/readdir.c - 664 sys sys 944961331 203
 sys/src/cmd/upas/fs/strtotm.c - 664 sys sys 1041137528 1904
 sys/src/cmd/upas/fs/tester.c - 664 sys sys 985037420 1418

+ 3 - 0
dist/replica/plan9.log

@@ -19297,3 +19297,6 @@
 1051207300 10 a sys/src/cmd/ip/ipconfig.8 - 664 sys sys 1051207027 53527
 1051207300 11 d sys/src/cmd/ip/dhcpd/7.dhcpd - 775 sys sys 1051203213 0
 1051534827 0 c sys/games/lib/fortunes - 664 sys sys 1051533798 240058
+1051633850 0 c sys/src/cmd/upas/fs/pop3.c - 664 sys sys 1051633710 11590
+1051635657 0 c sys/src/ape/lib/bsd/strcasecmp.c - 664 sys sys 1051635385 343
+1051635657 1 c sys/src/ape/lib/bsd/strncasecmp.c - 664 sys sys 1051635385 385

+ 22 - 20
sys/src/ape/lib/bsd/strcasecmp.c

@@ -1,26 +1,28 @@
 #include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
 
-#include <bsd.h>
+typedef unsigned char uchar;
+
 
 int
-strcasecmp(char *a, char *b)
+strcasecmp(char *s1, char *s2)
 {
-	int i;
-	char *p;
-
-	a = strdup(a);
-	b = strdup(b);
-
-	p = a;
-	while(*p)
-		*p++ = tolower(*p);
-	p = b;
-	while(*p)
-		*p++ = tolower(*p);
-	i = strcmp(a, b);
-	free(a);
-	free(b);
-	return i;
+	int c1, c2;
+
+	while(*s1){
+		c1 = *(uchar*)s1++;
+		c2 = *(uchar*)s2++;
+
+		if(c1 == c2)
+			continue;
+
+		if(c1 >= 'A' && c1 <= 'Z')
+			c1 -= 'A' - 'a';
+
+		if(c2 >= 'A' && c2 <= 'Z')
+			c2 -= 'A' - 'a';
+
+		if(c1 != c2)
+			return c1 - c2;
+	}
+	return -*s2;
 }

+ 19 - 23
sys/src/ape/lib/bsd/strncasecmp.c

@@ -1,33 +1,29 @@
-#include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
-#include <bsd.h>
+
+typedef unsigned char uchar;
 
 int
-strncasecmp(char *s1, char *s2,int n)
+strncasecmp(char *s1, char *s2, int n)
 {
-	char *s1ptr, *s2ptr;
-	int s1size, s2size, i;
-	int ret_val;
+	int c1, c2;
 
-	if (n<1)
-		return 0;
+	while(*s1 && n-- > 0){
+		c1 = *(uchar*)s1++;
+		c2 = *(uchar*)s2++;
 
-	s1size = n<strlen(s1)?n+1:strlen(s1)+1;
-	s2size = n<strlen(s2)?n+1:strlen(s2)+1;
-	s1ptr = (char *)malloc(s1size); s2ptr = (char *)malloc(s2size);
-	if ((s1ptr == NULL) || (s2ptr == NULL))
-		return 0; /* any better ideas here? */
+		if(c1 == c2)
+			continue;
 
-	for (i= 0; i < s1size ; i++ )
-		s1ptr[i] = toupper(s1[i]);
-	s1ptr[s1size] = '\0';
+		if(c1 >= 'A' && c1 <= 'Z')
+			c1 -= 'A' - 'a';
 
-	for (i= 0; i < s2size ; i++ )
-		s2ptr[i] = toupper(s2[i]);
+		if(c2 >= 'A' && c2 <= 'Z')
+			c2 -= 'A' - 'a';
 
-	s2ptr[s2size] = '\0';
-	ret_val = strncmp(s1ptr,s2ptr,n);
-	free(s1ptr); free(s2ptr);
-	return ret_val;
+		if(c1 != c2)
+			return c1 - c2;
+	}
+	if(n <= 0)
+		return 0;
+	return -*s2;
 }

+ 8 - 4
sys/src/cmd/upas/fs/pop3.c

@@ -136,13 +136,17 @@ pop3capa(Pop *pop)
 		// conn.trace = pop3log;
 		fd = tlsClient(pop->fd, &conn);
 		if(fd < 0)
-			sysfatal("tlsClient: %r");
-		if(conn.cert==nil || conn.certlen <= 0)
-			sysfatal("server did not provide TLS certificate");
+			return "tls error";
+		if(conn.cert==nil || conn.certlen <= 0){
+			close(fd);
+			return "server did not provide TLS certificate";
+		}
 		sha1(conn.cert, conn.certlen, digest, nil);
 		if(!pop->thumb || !okThumbprint(digest, pop->thumb)){
 			fmtinstall('H', encodefmt);
-			sysfatal("server certificate %.*H not recognized", SHA1dlen, digest);
+			close(fd);
+			fprint(2, "upas/fs pop3: server certificate %.*H not recognized\n", SHA1dlen, digest);
+			return "bad server certificate";
 		}
 		free(conn.cert);
 		close(pop->fd);