packages: lighttpd/lighttpd-branch.diff, lighttpd/lighttpd.spec - bugfix fo...

glen glen at pld-linux.org
Mon Oct 26 17:42:22 CET 2009


Author: glen                         Date: Mon Oct 26 16:42:22 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- bugfix for #1307; rel 2

---- Files affected:
packages/lighttpd:
   lighttpd-branch.diff (1.60 -> 1.61) , lighttpd.spec (1.306 -> 1.307) 

---- Diffs:

================================================================
Index: packages/lighttpd/lighttpd-branch.diff
diff -u packages/lighttpd/lighttpd-branch.diff:1.60 packages/lighttpd/lighttpd-branch.diff:1.61
--- packages/lighttpd/lighttpd-branch.diff:1.60	Wed Sep 30 12:08:30 2009
+++ packages/lighttpd/lighttpd-branch.diff	Mon Oct 26 17:42:16 2009
@@ -1,3065 +1,91 @@
-Index: ChangeLog
-===================================================================
-Index: .cvsignore
-===================================================================
-Index: src/.cvsignore
-===================================================================
-Index: src/configfile-glue.c
-===================================================================
---- src/configfile-glue.c	(.../tags/lighttpd-1.4.23)
-+++ src/configfile-glue.c	(.../branches/lighttpd-1.4.x)
-@@ -103,7 +103,6 @@
- 					if (e != ds->value->ptr && !*e && l >=0 && l <= 65535) {
- 						*((unsigned short *)(cv[i].destination)) = l;
- 						break;
--
- 					}
- 				}
- 
-@@ -112,10 +111,40 @@
- 				return -1;
- 			}
- 			default:
--				log_error_write(srv, __FILE__, __LINE__, "ssds", "unexpected type for key:", cv[i].key, du->type, "expected a integer, range 0 ... 65535");
-+				log_error_write(srv, __FILE__, __LINE__, "ssds", "unexpected type for key:", cv[i].key, du->type, "expected a short integer, range 0 ... 65535");
- 				return -1;
- 			}
- 			break;
-+		case T_CONFIG_INT:
-+			switch(du->type) {
-+			case TYPE_INTEGER: {
-+				data_integer *di = (data_integer *)du;
-+
-+				*((unsigned int *)(cv[i].destination)) = di->value;
-+				break;
-+			}
-+			case TYPE_STRING: {
-+				data_string *ds = (data_string *)du;
-+
-+				if (ds->value->ptr && *ds->value->ptr) {
-+					char *e;
-+					long l = strtol(ds->value->ptr, &e, 10);
-+					if (e != ds->value->ptr && !*e && l >= 0) {
-+						*((unsigned int *)(cv[i].destination)) = l;
-+						break;
-+					}
-+				}
-+
-+
-+				log_error_write(srv, __FILE__, __LINE__, "ssb", "got a string but expected an integer:", cv[i].key, ds->value);
-+
-+				return -1;
-+			}
-+			default:
-+				log_error_write(srv, __FILE__, __LINE__, "ssds", "unexpected type for key:", cv[i].key, du->type, "expected an integer, range 0 ... 4294967295");
-+				return -1;
-+			}
-+			break;
- 		case T_CONFIG_BOOLEAN:
- 			if (du->type == TYPE_STRING) {
- 				data_string *ds = (data_string *)du;
-Index: src/mod_cgi.c
-===================================================================
---- src/mod_cgi.c	(.../tags/lighttpd-1.4.23)
-+++ src/mod_cgi.c	(.../branches/lighttpd-1.4.x)
-@@ -56,6 +56,7 @@
- 
- typedef struct {
- 	array *cgi;
-+	unsigned short execute_x_only;
- } plugin_config;
- 
- typedef struct {
-@@ -151,6 +152,7 @@
- 
- 	config_values_t cv[] = {
- 		{ "cgi.assign",                  NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
-+		{ "cgi.execute-x-only",          NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },     /* 1 */
- 		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET}
- 	};
- 
-@@ -165,8 +167,10 @@
- 		assert(s);
- 
- 		s->cgi    = array_init();
-+		s->execute_x_only = 0;
- 
- 		cv[0].destination = s->cgi;
-+		cv[1].destination = &(s->execute_x_only);
- 
- 		p->config_storage[i] = s;
- 
-@@ -580,12 +584,9 @@
- #if 0
- 				log_error_write(srv, __FILE__, __LINE__, "sd", "(debug) cgi exited fine, pid:", pid);
- #endif
--				pid = 0;
--
- 				return HANDLER_GO_ON;
- 			} else {
- 				log_error_write(srv, __FILE__, __LINE__, "sd", "cgi died, pid:", pid);
--				pid = 0;
- 				return HANDLER_GO_ON;
- 			}
- 		}
-@@ -1005,7 +1006,7 @@
- 			args[i++] = cgi_handler->ptr;
- 		}
- 		args[i++] = con->physical.path->ptr;
--		args[i++] = NULL;
-+		args[i  ] = NULL;
- 
- 		/* search for the last / */
- 		if (NULL != (c = strrchr(con->physical.path->ptr, '/'))) {
-@@ -1018,8 +1019,6 @@
- 			*c = '/';
- 		}
- 
--		openDevNull(STDERR_FILENO);
--
- 		/* we don't need the client socket */
- 		for (i = 3; i < 256; i++) {
- 			if (i != srv->errorlog_fd) close(i);
-@@ -1198,6 +1197,8 @@
- 
- 			if (buffer_is_equal_string(du->key, CONST_STR_LEN("cgi.assign"))) {
- 				PATCH(cgi);
-+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cgi.execute-x-only"))) {
-+				PATCH(execute_x_only);
- 			}
- 		}
- 	}
-@@ -1220,6 +1221,7 @@
- 
- 	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, con->physical.path, &sce)) return HANDLER_GO_ON;
- 	if (!S_ISREG(sce->st.st_mode)) return HANDLER_GO_ON;
-+	if (p->conf.execute_x_only == 1 && (sce->st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0) return HANDLER_GO_ON;
- 
- 	s_len = fn->used - 1;
- 
-Index: src/network_write.c
-===================================================================
---- src/network_write.c	(.../tags/lighttpd-1.4.23)
-+++ src/network_write.c	(.../branches/lighttpd-1.4.x)
-@@ -46,15 +46,27 @@
- 			toSend = c->mem->used - 1 - c->offset;
- #ifdef __WIN32
- 			if ((r = send(fd, offset, toSend, 0)) < 0) {
--				log_error_write(srv, __FILE__, __LINE__, "ssd", "write failed: ", strerror(errno), fd);
-+				/* no error handling for windows... */
-+				log_error_write(srv, __FILE__, __LINE__, "ssd", "send failed: ", strerror(errno), fd);
- 
- 				return -1;
- 			}
- #else
- 			if ((r = write(fd, offset, toSend)) < 0) {
--				log_error_write(srv, __FILE__, __LINE__, "ssd", "write failed: ", strerror(errno), fd);
-+				switch (errno) {
-+				case EAGAIN:
-+				case EINTR:
-+					r = 0;
-+					break;
-+				case EPIPE:
-+				case ECONNRESET:
-+					return -2;
-+				default:
-+					log_error_write(srv, __FILE__, __LINE__, "ssd",
-+						"write failed:", strerror(errno), fd);
- 
--				return -1;
-+					return -1;
-+				}
- 			}
- #endif
- 
-@@ -98,7 +110,7 @@
- 				return -1;
- 			}
- 
--#if defined USE_MMAP
-+#ifdef USE_MMAP
- 			if (MAP_FAILED == (p = mmap(0, sce->st.st_size, PROT_READ, MAP_SHARED, ifd, 0))) {
- 				log_error_write(srv, __FILE__, __LINE__, "ss", "mmap failed: ", strerror(errno));
- 
-@@ -109,13 +121,26 @@
- 			close(ifd);
- 
- 			if ((r = write(fd, p + offset, toSend)) <= 0) {
--				log_error_write(srv, __FILE__, __LINE__, "ss", "write failed: ", strerror(errno));
--				munmap(p, sce->st.st_size);
--				return -1;
-+				switch (errno) {
-+				case EAGAIN:
-+				case EINTR:
-+					r = 0;
-+					break;
-+				case EPIPE:
-+				case ECONNRESET:
-+					munmap(p, sce->st.st_size);
-+					return -2;
-+				default:
-+					log_error_write(srv, __FILE__, __LINE__, "ssd",
-+						"write failed:", strerror(errno), fd);
-+					munmap(p, sce->st.st_size);
-+
-+					return -1;
-+				}
- 			}
- 
- 			munmap(p, sce->st.st_size);
--#else
-+#else /* USE_MMAP */
- 			buffer_prepare_copy(srv->tmp_buf, toSend);
- 
- 			lseek(ifd, offset, SEEK_SET);
-@@ -127,12 +152,33 @@
- 			}
- 			close(ifd);
- 
--			if (-1 == (r = send(fd, srv->tmp_buf->ptr, toSend, 0))) {
--				log_error_write(srv, __FILE__, __LINE__, "ss", "write: ", strerror(errno));
-+#ifdef __WIN32
-+			if ((r = send(fd, srv->tmp_buf->ptr, toSend, 0)) < 0) {
-+				/* no error handling for windows... */
-+				log_error_write(srv, __FILE__, __LINE__, "ssd", "send failed: ", strerror(errno), fd);
- 
- 				return -1;
- 			}
--#endif
-+#else /* __WIN32 */
-+			if ((r = write(fd, srv->tmp_buf->ptr, toSend)) < 0) {
-+				switch (errno) {
-+				case EAGAIN:
-+				case EINTR:
-+					r = 0;
-+					break;
-+				case EPIPE:
-+				case ECONNRESET:
-+					return -2;
-+				default:
-+					log_error_write(srv, __FILE__, __LINE__, "ssd",
-+						"write failed:", strerror(errno), fd);
-+
-+					return -1;
-+				}
-+			}
-+#endif /* __WIN32 */
-+#endif /* USE_MMAP */
-+
- 			c->offset += r;
- 			cq->bytes_out += r;
- 
-Index: src/mod_secure_download.c
-===================================================================
---- src/mod_secure_download.c	(.../tags/lighttpd-1.4.23)
-+++ src/mod_secure_download.c	(.../branches/lighttpd-1.4.x)
-@@ -37,7 +37,7 @@
- 	buffer *secret;
- 	buffer *uri_prefix;
- 
--	unsigned short timeout;
-+	unsigned int timeout;
- } plugin_config;
- 
- typedef struct {
-@@ -99,7 +99,7 @@
- 		{ "secdownload.secret",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
- 		{ "secdownload.document-root",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
- 		{ "secdownload.uri-prefix",        NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
--		{ "secdownload.timeout",           NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 3 */
-+		{ "secdownload.timeout",           NULL, T_CONFIG_INT, T_CONFIG_SCOPE_CONNECTION },        /* 3 */
- 		{ NULL,                            NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
- 	};
- 
-@@ -245,8 +245,8 @@
- 	}
- 
- 	/* timed-out */
--	if ( (srv->cur_ts > ts && srv->cur_ts - ts > p->conf.timeout) ||
--	     (srv->cur_ts < ts && ts - srv->cur_ts > p->conf.timeout) ) {
-+	if ( (srv->cur_ts > ts && (unsigned int) (srv->cur_ts - ts) > p->conf.timeout) ||
-+	     (srv->cur_ts < ts && (unsigned int) (ts - srv->cur_ts) > p->conf.timeout) ) {
- 		/* "Gone" as the url will never be valid again instead of "408 - Timeout" where the request may be repeated */
- 		con->http_status = 410;
- 
-Index: src/base.h
-===================================================================
---- src/base.h	(.../tags/lighttpd-1.4.23)
-+++ src/base.h	(.../branches/lighttpd-1.4.x)
-@@ -84,6 +84,7 @@
- typedef enum { T_CONFIG_UNSET,
- 		T_CONFIG_STRING,
- 		T_CONFIG_SHORT,
-+		T_CONFIG_INT,
- 		T_CONFIG_BOOLEAN,
- 		T_CONFIG_ARRAY,
- 		T_CONFIG_LOCAL,
-@@ -281,7 +282,7 @@
- 	unsigned short etag_use_mtime;
- 	unsigned short etag_use_size;
- 	unsigned short force_lowercase_filenames; /* if the FS is case-insensitive, force all files to lower-case */
--	unsigned short max_request_size;
-+	unsigned int max_request_size;
- 
- 	unsigned short kbytes_per_second; /* connection kb/s limit */
- 
-@@ -472,6 +473,7 @@
- 
- 	buffer *errorlog_file;
- 	unsigned short errorlog_use_syslog;
-+	buffer *breakagelog_file;
- 
- 	unsigned short dont_daemonize;
- 	buffer *changeroot;
-@@ -490,7 +492,7 @@
- 	unsigned short max_worker;
- 	unsigned short max_fds;
- 	unsigned short max_conns;
--	unsigned short max_request_size;
-+	unsigned int max_request_size;
- 
- 	unsigned short log_request_header_on_error;
- 	unsigned short log_state_handling;
-@@ -538,7 +540,7 @@
- 
- 	/* the errorlog */
- 	int errorlog_fd;
--	enum { ERRORLOG_STDERR, ERRORLOG_FILE, ERRORLOG_SYSLOG, ERRORLOG_PIPE } errorlog_mode;
-+	enum { ERRORLOG_FILE, ERRORLOG_FD, ERRORLOG_SYSLOG, ERRORLOG_PIPE } errorlog_mode;
- 	buffer *errorlog_buf;
- 
- 	fdevents *ev, *ev_ins;
-Index: src/mod_rewrite.c
-===================================================================
---- src/mod_rewrite.c	(.../tags/lighttpd-1.4.23)
-+++ src/mod_rewrite.c	(.../branches/lighttpd-1.4.x)
-@@ -176,7 +176,7 @@
- 	data_unset *du;
- 
- 	if (NULL != (du = array_get_element(ca, option))) {
--		data_array *da = (data_array *)du;
-+		data_array *da;
- 		size_t j;
- 
- 		if (du->type != TYPE_ARRAY) {
-@@ -373,7 +373,7 @@
- 			}
- 		} else {
- 			const char **list;
--			size_t start, end;
-+			size_t start;
- 			size_t k;
- 
- 			/* it matched */
-@@ -383,17 +383,15 @@
- 
- 			buffer_reset(con->request.uri);
- 
--			start = 0; end = pattern_len;
-+			start = 0;
- 			for (k = 0; k < pattern_len; k++) {
- 				if (pattern[k] == '$' || pattern[k] == '%') {
- 					/* got one */
- 
- 					size_t num = pattern[k + 1] - '0';
- 
--					end = k;
-+					buffer_append_string_len(con->request.uri, pattern + start, k - start);
- 
--					buffer_append_string_len(con->request.uri, pattern + start, end - start);
--
- 					if (!isdigit((unsigned char)pattern[k + 1])) {
- 						/* enable escape: "%%" => "%", "%a" => "%a", "$$" => "$" */
- 						buffer_append_string_len(con->request.uri, pattern+k, pattern[k] == pattern[k+1] ? 1 : 2);
-Index: src/connections.c
-===================================================================
---- src/connections.c	(.../tags/lighttpd-1.4.23)
-+++ src/connections.c	(.../branches/lighttpd-1.4.x)
-@@ -782,13 +782,13 @@
- 	CLEAN(request.pathinfo);
- 	CLEAN(request.request);
- 
--	CLEAN(request.orig_uri);
-+	/* CLEAN(request.orig_uri); */
- 
- 	CLEAN(uri.scheme);
--	CLEAN(uri.authority);
--	CLEAN(uri.path);
-+	/* CLEAN(uri.authority); */
-+	/* CLEAN(uri.path); */
- 	CLEAN(uri.path_raw);
--	CLEAN(uri.query);
-+	/* CLEAN(uri.query); */
- 
- 	CLEAN(physical.doc_root);
- 	CLEAN(physical.path);
-@@ -1401,6 +1401,11 @@
- 						"state for fd", con->fd, connection_get_state(con->state));
- 			}
- 
-+			buffer_reset(con->uri.authority);
-+			buffer_reset(con->uri.path);
-+			buffer_reset(con->uri.query);
-+			buffer_reset(con->request.orig_uri);
-+
- 			if (http_request_parse(srv, con)) {
- 				/* we have to read some data from the POST request */
- 
-@@ -1725,7 +1730,7 @@
- 				case HANDLER_FINISHED:
- 					break;
- 				default:
--					log_error_write(srv, __FILE__, __LINE__, "");
-+					log_error_write(srv, __FILE__, __LINE__, "sd", "unhandling return value", r);
- 					break;
- 				}
- 				break;
-Index: src/network.c
+Index: src/mod_magnet.c
 ===================================================================
---- src/network.c	(.../tags/lighttpd-1.4.23)
-+++ src/network.c	(.../branches/lighttpd-1.4.x)
-@@ -90,6 +90,7 @@
- 
- 	srv_socket = calloc(1, sizeof(*srv_socket));
- 	srv_socket->fd = -1;
-+	srv_socket->fde_ndx = -1;
- 
- 	srv_socket->srv_token = buffer_init();
- 	buffer_copy_string_buffer(srv_socket->srv_token, host_token);
-@@ -103,7 +104,7 @@
- 	if (NULL == (sp = strrchr(b->ptr, ':'))) {
- 		log_error_write(srv, __FILE__, __LINE__, "sb", "value of $SERVER[\"socket\"] has to be \"ip:port\".", b);
- 
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	host = b->ptr;
-@@ -126,7 +127,7 @@
- 	} else if (port == 0 || port > 65535) {
- 		log_error_write(srv, __FILE__, __LINE__, "sd", "port out of range:", port);
- 
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	if (*host == '\0') host = NULL;
-@@ -138,12 +139,12 @@
- 
- 		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, 0))) {
- 			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
--			return -1;
-+			goto error_free_socket;
- 		}
- #else
- 		log_error_write(srv, __FILE__, __LINE__, "s",
- 				"ERROR: Unix Domain sockets are not supported.");
--		return -1;
-+		goto error_free_socket;
- #endif
- 	}
- 
-@@ -153,7 +154,7 @@
- 
- 		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, IPPROTO_TCP))) {
- 			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
--			return -1;
-+			goto error_free_socket;
- 		}
- 		srv_socket->use_ipv6 = 1;
- 	}
-@@ -163,17 +164,22 @@
- 		srv_socket->addr.plain.sa_family = AF_INET;
- 		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, IPPROTO_TCP))) {
- 			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
--			return -1;
-+			goto error_free_socket;
- 		}
- 	}
- 
-+#ifdef FD_CLOEXEC
-+	/* set FD_CLOEXEC now, fdevent_fcntl_set is called later; needed for pipe-logger forks */
-+	fcntl(srv_socket->fd, F_SETFD, FD_CLOEXEC);
-+#endif
-+
- 	/* */
- 	srv->cur_fds = srv_socket->fd;
- 
- 	val = 1;
- 	if (setsockopt(srv_socket->fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
- 		log_error_write(srv, __FILE__, __LINE__, "ss", "socketsockopt failed:", strerror(errno));
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	switch(srv_socket->addr.plain.sa_family) {
-@@ -198,7 +204,7 @@
- 						"sssss", "getaddrinfo failed: ",
- 						gai_strerror(r), "'", host, "'");
- 
--				return -1;
-+				goto error_free_socket;
- 			}
- 
- 			memcpy(&(srv_socket->addr), res->ai_addr, res->ai_addrlen);
-@@ -220,17 +226,17 @@
- 				log_error_write(srv, __FILE__, __LINE__,
- 						"sds", "gethostbyname failed: ",
- 						h_errno, host);
--				return -1;
-+				goto error_free_socket;
- 			}
- 
- 			if (he->h_addrtype != AF_INET) {
- 				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-type != AF_INET: ", he->h_addrtype);
--				return -1;
-+				goto error_free_socket;
- 			}
- 
- 			if (he->h_length != sizeof(struct in_addr)) {
- 				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-length != sizeof(in_addr): ", he->h_length);
--				return -1;
-+				goto error_free_socket;
- 			}
- 
- 			memcpy(&(srv_socket->addr.ipv4.sin_addr.s_addr), he->h_addr_list[0], he->h_length);
-@@ -260,7 +266,7 @@
- 				host);
- 
- 
--			return -1;
-+			goto error_free_socket;
- 		}
- 
- 		/* connect failed */
-@@ -275,14 +281,12 @@
- 				"testing socket failed:",
- 				host, strerror(errno));
- 
--			return -1;
-+			goto error_free_socket;
- 		}
- 
- 		break;
- 	default:
--		addr_len = 0;
--
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	if (0 != bind(srv_socket->fd, (struct sockaddr *) &(srv_socket->addr), addr_len)) {
-@@ -298,12 +302,12 @@
- 					host, port, strerror(errno));
- 			break;
- 		}
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	if (-1 == listen(srv_socket->fd, 128 * 8)) {
- 		log_error_write(srv, __FILE__, __LINE__, "ss", "listen failed: ", strerror(errno));
--		return -1;
-+		goto error_free_socket;
- 	}
- 
- 	if (s->is_ssl) {
-@@ -316,14 +320,14 @@
- 			if (0 == RAND_status()) {
- 				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
- 						"not enough entropy in the pool");
--				return -1;
-+				goto error_free_socket;
- 			}
- 		}
- 
- 		if (NULL == (s->ssl_ctx = SSL_CTX_new(SSLv23_server_method()))) {
- 			log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
- 					ERR_error_string(ERR_get_error(), NULL));
--			return -1;
-+			goto error_free_socket;
- 		}
- 
- 		if (!s->ssl_use_sslv2) {
-@@ -331,7 +335,7 @@
- 			if (SSL_OP_NO_SSLv2 != SSL_CTX_set_options(s->ssl_ctx, SSL_OP_NO_SSLv2)) {
- 				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
- 						ERR_error_string(ERR_get_error(), NULL));
--				return -1;
-+				goto error_free_socket;
- 			}
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/lighttpd/lighttpd-branch.diff?r1=1.60&r2=1.61&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/lighttpd/lighttpd.spec?r1=1.306&r2=1.307&f=u



More information about the pld-cvs-commit mailing list