Module Name:    src
Committed By:   mrg
Date:           Mon May 10 14:44:19 UTC 2010

Modified Files:
        src/libexec/httpd: Makefile.boot auth-bozo.c bozohttpd.c bozohttpd.h
            cgi-bozo.c daemon-bozo.c tilde-luzah-bozo.c

Log Message:
merge bozohttpd 20100510.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/libexec/httpd/Makefile.boot
cvs rdiff -u -r1.8 -r1.9 src/libexec/httpd/auth-bozo.c \
    src/libexec/httpd/daemon-bozo.c
cvs rdiff -u -r1.16 -r1.17 src/libexec/httpd/bozohttpd.c
cvs rdiff -u -r1.12 -r1.13 src/libexec/httpd/bozohttpd.h
cvs rdiff -u -r1.15 -r1.16 src/libexec/httpd/cgi-bozo.c
cvs rdiff -u -r1.6 -r1.7 src/libexec/httpd/tilde-luzah-bozo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/libexec/httpd/Makefile.boot
diff -u src/libexec/httpd/Makefile.boot:1.4 src/libexec/httpd/Makefile.boot:1.5
--- src/libexec/httpd/Makefile.boot:1.4	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/Makefile.boot	Mon May 10 14:44:19 2010
@@ -1,10 +1,10 @@
-# $eterna: Makefile.boot,v 1.8 2010/05/10 02:24:30 mrg Exp $
+# $eterna: Makefile.boot,v 1.9 2010/05/10 04:57:50 mrg Exp $
 #
 # very simple makefile to compile bozohttpd, should work with every make.
 # see Makefile for a list of compile options that may be placed in CFLAGS.
 
 CC=	cc
-CFLAGS=	-O
+CFLAGS=	-O -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
 
 GROFF=	groff -Tascii
 CRYPTOLIBDIR=	# -L/usr/local/lib
@@ -14,7 +14,7 @@
 	dir-index-bozo.c ssl-bozo.c tilde-luzah-bozo.c main.c
 
 all:
-	$(CC) $(CFLAGS) -o bozohttpd $(FILES) $(CRYPTOLIBS)
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o bozohttpd $(FILES) $(CRYPTOLIBS)
 
 man:
 	$(GROFF) -mandoc bozohttpd.8 > bozohttpd.cat8

Index: src/libexec/httpd/auth-bozo.c
diff -u src/libexec/httpd/auth-bozo.c:1.8 src/libexec/httpd/auth-bozo.c:1.9
--- src/libexec/httpd/auth-bozo.c:1.8	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/auth-bozo.c	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: auth-bozo.c,v 1.8 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: auth-bozo.c,v 1.9 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: auth-bozo.c,v 1.15 2010/05/10 02:51:28 mrg Exp $	*/
+/*	$eterna: auth-bozo.c,v 1.16 2010/05/10 14:36:37 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -53,8 +53,9 @@
  * Check if HTTP authentication is required
  */
 int
-bozo_auth_check(bozohttpd_t *httpd, bozo_httpreq_t *request, const char *file)
+bozo_auth_check(bozo_httpreq_t *request, const char *file)
 {
+	bozohttpd_t *httpd = request->hr_httpd;
 	struct stat sb;
 	char dir[MAXPATHLEN], authfile[MAXPATHLEN], *basename;
 	char user[BUFSIZ], *pass;
@@ -68,7 +69,7 @@
 	else {
 		*basename++ = '\0';
 			/* ensure basename(file) != AUTH_FILE */
-		if (bozo_check_special_files(httpd, request, basename))
+		if (bozo_check_special_files(request, basename))
 			return 1;
 	}
 	request->hr_authrealm = bozostrdup(httpd, dir);
@@ -127,8 +128,10 @@
 }
 
 int
-bozo_auth_check_headers(bozohttpd_t *httpd, bozo_httpreq_t *request, char *val, char *str, ssize_t len)
+bozo_auth_check_headers(bozo_httpreq_t *request, char *val, char *str, ssize_t len)
 {
+	bozohttpd_t *httpd = request->hr_httpd;
+
 	if (strcasecmp(val, "authorization") == 0 &&
 	    strncasecmp(str, "Basic ", 6) == 0) {
 		char	authbuf[BUFSIZ];
@@ -158,9 +161,11 @@
 }
 
 int
-bozo_auth_check_special_files(bozohttpd_t *httpd, bozo_httpreq_t *request,
+bozo_auth_check_special_files(bozo_httpreq_t *request,
 				const char *name)
 {
+	bozohttpd_t *httpd = request->hr_httpd;
+
 	if (strcmp(name, AUTH_FILE) == 0)
 		return bozo_http_error(httpd, 403, request,
 				"no permission to open authfile");
@@ -168,8 +173,10 @@
 }
 
 void
-bozo_auth_check_401(bozohttpd_t *httpd, bozo_httpreq_t *request, int code)
+bozo_auth_check_401(bozo_httpreq_t *request, int code)
 {
+	bozohttpd_t *httpd = request->hr_httpd;
+
 	if (code == 401)
 		bozo_printf(httpd,
 			"WWW-Authenticate: Basic realm=\"%s\"\r\n",
@@ -179,9 +186,11 @@
 
 #ifndef NO_CGIBIN_SUPPORT
 void
-bozo_auth_cgi_setenv(bozohttpd_t *httpd, bozo_httpreq_t *request,
+bozo_auth_cgi_setenv(bozo_httpreq_t *request,
 			char ***curenvpp)
 {
+	bozohttpd_t *httpd = request->hr_httpd;
+
 	if (request->hr_authuser && *request->hr_authuser) {
 		bozo_setenv(httpd, "AUTH_TYPE", "Basic", (*curenvpp)++);
 		bozo_setenv(httpd, "REMOTE_USER", request->hr_authuser,
Index: src/libexec/httpd/daemon-bozo.c
diff -u src/libexec/httpd/daemon-bozo.c:1.8 src/libexec/httpd/daemon-bozo.c:1.9
--- src/libexec/httpd/daemon-bozo.c:1.8	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/daemon-bozo.c	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: daemon-bozo.c,v 1.8 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: daemon-bozo.c,v 1.9 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: daemon-bozo.c,v 1.19 2010/05/10 02:51:28 mrg Exp $	*/
+/*	$eterna: daemon-bozo.c,v 1.20 2010/05/10 04:39:00 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -136,7 +136,6 @@
 static void
 daemon_runchild(bozohttpd_t *httpd, int fd)
 {
-
 	httpd->request_times++;
 
 	/* setup stdin/stdout/stderr */
@@ -146,6 +145,33 @@
 	close(fd);
 }
 
+static int
+daemon_poll_err(bozohttpd_t *httpd, int fd, int idx)
+{
+	if ((httpd->fds[idx].revents & (POLLNVAL|POLLERR|POLLHUP)) == 0)
+		return 0;
+
+	bozo_warn(httpd, "poll on fd %d pid %d revents %d: %s",
+	    httpd->fds[idx].fd, getpid(), httpd->fds[idx].revents,
+	    strerror(errno));
+	bozo_warn(httpd, "nsock = %d", httpd->nsock);
+	close(httpd->sock[idx]);
+	httpd->nsock--;
+	bozo_warn(httpd, "nsock now = %d", httpd->nsock);
+	/* no sockets left */
+	if (httpd->nsock == 0)
+		exit(0);
+	/* last socket closed is the easy case */
+	if (httpd->nsock != idx) {
+		memmove(&httpd->fds[idx], &httpd->fds[idx+1],
+			(httpd->nsock - idx) * sizeof(*httpd->fds));
+		memmove(&httpd->sock[idx], &httpd->sock[idx+1],
+			(httpd->nsock - idx) * sizeof(*httpd->sock));
+	}
+
+	return 1;
+}
+
 /*
  * the parent never returns from this function, only children that
  * are ready to run... XXXMRG - still true in fork-lesser bozo?
@@ -194,30 +220,8 @@
 		}
 
 		for (i = 0; i < httpd->nsock; i++) {
-			if (httpd->fds[i].revents & (POLLNVAL|POLLERR|POLLHUP)) {
-				bozo_warn(httpd,
-					"poll on fd %d pid %d revents %d: %s",
-					httpd->fds[i].fd, getpid(),
-					httpd->fds[i].revents,
-					strerror(errno));
-				bozo_warn(httpd, "nsock = %d", httpd->nsock);
-				close(httpd->sock[i]);
-				httpd->nsock--;
-				bozo_warn(httpd, "nsock now = %d", httpd->nsock);
-				/* no sockets left */
-				if (httpd->nsock == 0)
-					exit(0);
-				/* last socket; easy case */
-				if (httpd->nsock == i)
-					break;
-				memmove(&httpd->fds[i], &httpd->fds[i+i],
-					(httpd->nsock - i) *
-						sizeof(*httpd->fds));
-				memmove(&httpd->sock[i], &httpd->sock[i+i],
-					(httpd->nsock - i) *
-						sizeof(*httpd->sock));
+			if (daemon_poll_err(httpd, fd, i))
 				break;
-			}
 			if (httpd->fds[i].revents == 0)
 				continue;
 

Index: src/libexec/httpd/bozohttpd.c
diff -u src/libexec/httpd/bozohttpd.c:1.16 src/libexec/httpd/bozohttpd.c:1.17
--- src/libexec/httpd/bozohttpd.c:1.16	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/bozohttpd.c	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: bozohttpd.c,v 1.16 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: bozohttpd.c,v 1.17 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: bozohttpd.c,v 1.165 2010/05/10 02:52:34 mrg Exp $	*/
+/*	$eterna: bozohttpd.c,v 1.167 2010/05/10 14:36:37 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -658,7 +658,7 @@
 			while (*val == ' ' || *val == '\t')
 				val++;
 
-			if (bozo_auth_check_headers(httpd, request, val, str, len))
+			if (bozo_auth_check_headers(request, val, str, len))
 				goto next_header;
 
 			hdr = addmerge_header(request, val, str, len);
@@ -845,7 +845,7 @@
 	char dir[MAXPATHLEN], dirfile[MAXPATHLEN], *basename;
 
 	snprintf(dir, sizeof(dir), "%s", request->hr_file + 1);
-	debug((httpd, DEBUG_FAT, "check_bzredirect: dir %s", dir));
+	debug((request->hr_httpd, DEBUG_FAT, "check_bzredirect: dir %s", dir));
 	basename = strrchr(dir, '/');
 
 	if ((!basename || basename[1] != '\0') &&
@@ -1034,7 +1034,7 @@
 	 * use it as the directory to look for the redir file.
 	 */
 	snprintf(dir, sizeof(dir), "%s", request->hr_file + 1);
-	debug((httpd, DEBUG_FAT, "check_bzredirect: dir %s", dir));
+	debug((request->hr_httpd, DEBUG_FAT, "check_bzredirect: dir %s", dir));
 	basename = strrchr(dir, '/');
 
 	if ((!basename || basename[1] != '\0') &&
@@ -1058,14 +1058,16 @@
 			return;
 		absolute = 1;
 	}
-	debug((httpd, DEBUG_FAT, "check_bzredirect: calling readlink"));
+	debug((request->hr_httpd, DEBUG_FAT,
+	       "check_bzredirect: calling readlink"));
 	rv = readlink(redir, redirpath, sizeof redirpath - 1);
 	if (rv == -1 || rv == 0) {
-		debug((httpd, DEBUG_FAT, "readlink failed"));
+		debug((request->hr_httpd, DEBUG_FAT, "readlink failed"));
 		return;
 	}
 	redirpath[rv] = '\0';
-	debug((httpd, DEBUG_FAT, "readlink returned \"%s\"", redirpath));
+	debug((request->hr_httpd, DEBUG_FAT,
+	       "readlink returned \"%s\"", redirpath));
 	
 	/* now we have the link pointer, redirect to the real place */
 	if (absolute)
@@ -1074,7 +1076,8 @@
 		snprintf(finalredir = redir, sizeof(redir), "/%s/%s", dir,
 			 redirpath);
 
-	debug((httpd, DEBUG_FAT, "check_bzredirect: new redir %s", finalredir));
+	debug((request->hr_httpd, DEBUG_FAT,
+	       "check_bzredirect: new redir %s", finalredir));
 	handle_redirect(request, finalredir, absolute);
 }
 
@@ -1303,7 +1306,7 @@
 		goto bad_done;
 	}
 
-	if (bozo_auth_check(httpd, request, newfile))
+	if (bozo_auth_check(request, newfile))
 		goto bad_done;
 
 	if (strlen(newfile)) {
@@ -1466,7 +1469,7 @@
 	if (strcmp(name, ABSREDIRECT_FILE) == 0)
 		return bozo_http_error(httpd, 403, request,
 		    "no permission to open redirect file");
-	return bozo_auth_check_special_files(httpd, request, name);
+	return bozo_auth_check_special_files(request, name);
 }
 
 /* generic header printing routine */
@@ -1710,7 +1713,7 @@
 		size = 0;
 
 	bozo_printf(httpd, "%s %s\r\n", proto, header);
-	bozo_auth_check_401(httpd, request, code);
+	bozo_auth_check_401(request, code);
 
 	bozo_printf(httpd, "Content-Type: text/html\r\n");
 	bozo_printf(httpd, "Content-Length: %d\r\n", size);
@@ -1791,6 +1794,9 @@
 	 * programs (for we pass stdin off to them).  could fix this
 	 * by becoming a fd-passing program instead of just exec'ing
 	 * the program
+	 *
+	 * the above is no longer true, we are the fd-passing
+	 * program already.
 	 */
 	for (; readfn(httpd, fd, &c, 1) == 1; ) {
 		debug((httpd, DEBUG_EXPLODING, "bozodgetln read %c", c));

Index: src/libexec/httpd/bozohttpd.h
diff -u src/libexec/httpd/bozohttpd.h:1.12 src/libexec/httpd/bozohttpd.h:1.13
--- src/libexec/httpd/bozohttpd.h:1.12	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/bozohttpd.h	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: bozohttpd.h,v 1.12 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: bozohttpd.h,v 1.13 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: bozohttpd.h,v 1.30 2010/05/10 02:51:28 mrg Exp $	*/
+/*	$eterna: bozohttpd.h,v 1.31 2010/05/10 14:36:37 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -213,13 +213,13 @@
 extern	void	bozo_auth_cgi_setenv(bozo_httpreq_t *, char ***);
 extern	int	bozo_auth_cgi_count(bozo_httpreq_t *);
 #else
-#define		bozo_auth_check(w, x, y)		0
+#define		bozo_auth_check(x, y)			0
 #define		bozo_auth_cleanup(x)			/* nothing */
-#define		bozo_auth_check_headers(x, y, z, a, b)	0
-#define		bozo_auth_check_special_files(w, x, y)	0
-#define		bozo_auth_check_401(w, x, y)		/* nothing */
-#define		bozo_auth_cgi_setenv(w, x, y)		/* nothing */
-#define		bozo_auth_cgi_count(x)		0
+#define		bozo_auth_check_headers(y, z, a, b)	0
+#define		bozo_auth_check_special_files(x, y)	0
+#define		bozo_auth_check_401(x, y)		/* nothing */
+#define		bozo_auth_cgi_setenv(x, y)		/* nothing */
+#define		bozo_auth_cgi_count(x)			0
 #endif /* DO_HTPASSWD */
 
 

Index: src/libexec/httpd/cgi-bozo.c
diff -u src/libexec/httpd/cgi-bozo.c:1.15 src/libexec/httpd/cgi-bozo.c:1.16
--- src/libexec/httpd/cgi-bozo.c:1.15	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/cgi-bozo.c	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: cgi-bozo.c,v 1.15 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: cgi-bozo.c,v 1.16 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: cgi-bozo.c,v 1.35 2010/05/10 02:51:28 mrg Exp $	*/
+/*	$eterna: cgi-bozo.c,v 1.36 2010/05/10 14:36:37 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -279,7 +279,7 @@
 
 	len = strlen(url);
 
-	if (bozo_auth_check(httpd, request, url + 1))
+	if (bozo_auth_check(request, url + 1))
 		goto out;
 
 	if (!httpd->cgibin ||
@@ -402,7 +402,7 @@
 	if (request->hr_remoteaddr && *request->hr_remoteaddr)
 		bozo_setenv(httpd, "REMOTE_ADDR", request->hr_remoteaddr,
 				curenvp++);
-	bozo_auth_cgi_setenv(httpd, request, &curenvp);
+	bozo_auth_cgi_setenv(request, &curenvp);
 
 	free(file);
 	free(url);

Index: src/libexec/httpd/tilde-luzah-bozo.c
diff -u src/libexec/httpd/tilde-luzah-bozo.c:1.6 src/libexec/httpd/tilde-luzah-bozo.c:1.7
--- src/libexec/httpd/tilde-luzah-bozo.c:1.6	Mon May 10 03:37:45 2010
+++ src/libexec/httpd/tilde-luzah-bozo.c	Mon May 10 14:44:19 2010
@@ -1,6 +1,6 @@
-/*	$NetBSD: tilde-luzah-bozo.c,v 1.6 2010/05/10 03:37:45 mrg Exp $	*/
+/*	$NetBSD: tilde-luzah-bozo.c,v 1.7 2010/05/10 14:44:19 mrg Exp $	*/
 
-/*	$eterna: tilde-luzah-bozo.c,v 1.13 2010/05/10 02:51:28 mrg Exp $	*/
+/*	$eterna: tilde-luzah-bozo.c,v 1.14 2010/05/10 14:36:37 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997-2010 Matthew R. Green
@@ -115,7 +115,7 @@
 		return 0;
 	}
 
-	if (bozo_auth_check(httpd, request, file)) {
+	if (bozo_auth_check(request, file)) {
 		free(file);
 		return 0;
 	}

Reply via email to