SOURCES: lighttpd-branch.diff - update to r2389: * Do not pass Proxy-Conn...

glen glen at pld-linux.org
Thu Feb 5 18:40:37 CET 2009


Author: glen                         Date: Thu Feb  5 17:40:37 2009 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- update to r2389:
  * Do not pass Proxy-Connection: header from client to backend http server in mod_proxy (#1877)
  * Fix wrong malloc sizes in mod_accesslog (probably nothing bad happened...) (fixes #1855, thx ycheng)
  * Some small buffer.c fixes (closes #1837)
  * Remove floating point math from server.c (fixes #1402)
  * Disable SSLv2 by default
  * Use/enforce sane max-connection values (fixes #1803)
  * Allow mod_compress to return 304 (Not Modified); compress ignores the static-file.etags option.(fixes #1884)
  * Add option to ignore the "Expect: 100-continue" header instead of returning 417 Expectation failed (closes #1017)
  * Use modified etags in mod_compress (fixes #1800)
  * Fix max-connection limit handling/100% cpu usage (fixes #1436)
  * Fix error handling in freebsd-sendfile (fixes #1813)

---- Files affected:
SOURCES:
   lighttpd-branch.diff (1.43 -> 1.44) 

---- Diffs:

================================================================
Index: SOURCES/lighttpd-branch.diff
diff -u SOURCES/lighttpd-branch.diff:1.43 SOURCES/lighttpd-branch.diff:1.44
--- SOURCES/lighttpd-branch.diff:1.43	Mon Jan 19 11:06:14 2009
+++ SOURCES/lighttpd-branch.diff	Thu Feb  5 18:40:31 2009
@@ -1,7 +1,7 @@
 Index: cmake/LighttpdMacros.cmake
 ===================================================================
 --- cmake/LighttpdMacros.cmake	(.../tags/lighttpd-1.4.20)	(revision 0)
-+++ cmake/LighttpdMacros.cmake	(.../branches/lighttpd-1.4.x)	(revision 2371)
++++ cmake/LighttpdMacros.cmake	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -0,0 +1,43 @@
 +## our modules are without the "lib" prefix
 +
@@ -50,8 +50,8 @@
 ===================================================================
 Index: src/configfile-glue.c
 ===================================================================
---- src/configfile-glue.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/configfile-glue.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/configfile-glue.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/configfile-glue.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -1,4 +1,5 @@
  #include <string.h>
 +#include <stdlib.h>
@@ -83,8 +83,8 @@
  				return -1;
 Index: src/mod_cgi.c
 ===================================================================
---- src/mod_cgi.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_cgi.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_cgi.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_cgi.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -822,15 +822,27 @@
  			);
  		cgi_env_add(&env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf));
@@ -153,10 +153,22 @@
  		cgi_env_add(&env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s));
  
  		LI_ltostr(buf,
+Index: src/base.h
+===================================================================
+--- src/base.h	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/base.h	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -497,6 +497,7 @@
+ #endif
+ 	} stat_cache_engine;
+ 	unsigned short enable_cores;
++	unsigned short reject_expect_100_with_417;
+ } server_config;
+ 
+ typedef struct {
 Index: src/mod_rewrite.c
 ===================================================================
---- src/mod_rewrite.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_rewrite.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_rewrite.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_rewrite.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -350,11 +350,7 @@
  
  	if (!p->conf.rewrite) return HANDLER_GO_ON;
@@ -172,8 +184,8 @@
  		pcre *match;
 Index: src/connections.c
 ===================================================================
---- src/connections.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/connections.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/connections.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/connections.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -330,15 +330,13 @@
  	buffer_prepare_copy(b, 4 * 1024);
  	len = recv(con->fd, b->ptr, b->size - 1, 0);
@@ -208,8 +220,8 @@
  						/* the chunk is too large now, close it */
 Index: src/mod_alias.c
 ===================================================================
---- src/mod_alias.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_alias.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_alias.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_alias.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -103,9 +103,8 @@
  					}
  					/* ok, they have same prefix. check position */
@@ -224,9 +236,34 @@
  				}
 Index: src/configfile.c
 ===================================================================
---- src/configfile.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/configfile.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
-@@ -940,7 +940,6 @@
+--- src/configfile.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/configfile.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -94,6 +94,7 @@
+ 		{ "etag.use-inode",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 49 */
+ 		{ "etag.use-mtime",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 50 */
+ 		{ "etag.use-size",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 51 */
++		{ "server.reject-expect-100-with-417",  NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 52 */
+ 		{ "server.host",                 "use server.bind instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+ 		{ "server.docroot",              "use server.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+ 		{ "server.virtual-root",         "load mod_simple_vhost and use simple-vhost.server-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+@@ -135,6 +136,7 @@
+ 
+ 	cv[43].destination = &(srv->srvconf.max_conns);
+ 	cv[12].destination = &(srv->srvconf.max_request_size);
++	cv[52].destination = &(srv->srvconf.reject_expect_100_with_417);
+ 	srv->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+ 
+ 	assert(srv->config_storage);
+@@ -159,7 +161,7 @@
+ 		s->max_write_idle = 360;
+ 		s->use_xattr     = 0;
+ 		s->is_ssl        = 0;
+-		s->ssl_use_sslv2 = 1;
++		s->ssl_use_sslv2 = 0;
+ 		s->use_ipv6      = 0;
+ #ifdef HAVE_LSTAT
+ 		s->follow_symlink = 1;
+@@ -940,7 +942,6 @@
  }
  
  int config_parse_cmd(server *srv, config_t *context, const char *cmd) {
@@ -234,7 +271,7 @@
  	tokenizer_t t;
  	int ret;
  	buffer *source;
-@@ -960,7 +959,7 @@
+@@ -960,7 +961,7 @@
  		chdir(context->basedir->ptr);
  	}
  
@@ -245,8 +282,8 @@
  		ret = -1;
 Index: src/mod_trigger_b4_dl.c
 ===================================================================
---- src/mod_trigger_b4_dl.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_trigger_b4_dl.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_trigger_b4_dl.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_trigger_b4_dl.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -1,5 +1,6 @@
  #include <ctype.h>
  #include <stdlib.h>
@@ -266,8 +303,8 @@
  #if defined(HAVE_PCRE_H)
 Index: src/mod_mysql_vhost.c
 ===================================================================
---- src/mod_mysql_vhost.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_mysql_vhost.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_mysql_vhost.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_mysql_vhost.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -245,7 +245,6 @@
  		if (!(buffer_is_empty(s->myuser) ||
  		      buffer_is_empty(s->mydb))) {
@@ -309,10 +346,32 @@
  }
  
  #define PATCH(x) \
+Index: src/request.c
+===================================================================
+--- src/request.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/request.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -894,11 +894,12 @@
+ 								 *
+ 								 */
+ 
+-								con->http_status = 417;
+-								con->keep_alive = 0;
+-
+-								array_insert_unique(con->request.headers, (data_unset *)ds);
+-								return 0;
++								if (srv->srvconf.reject_expect_100_with_417 && 0 == buffer_caseless_compare(CONST_BUF_LEN(ds->value), CONST_STR_LEN("100-continue"))) {
++									con->http_status = 417;
++									con->keep_alive = 0;
++									array_insert_unique(con->request.headers, (data_unset *)ds);
++									return 0;
++								}
+ 							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Host")))) {
+ 								if (!con->request.http_host) {
+ 									con->request.http_host = ds->value;
 Index: src/inet_ntop_cache.c
 ===================================================================
---- src/inet_ntop_cache.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/inet_ntop_cache.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/inet_ntop_cache.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/inet_ntop_cache.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -11,7 +11,7 @@
  #ifdef HAVE_IPV6
  	size_t ndx = 0, i;
@@ -324,8 +383,8 @@
  				/* IPv6 found in cache */
 Index: src/mod_rrdtool.c
 ===================================================================
---- src/mod_rrdtool.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_rrdtool.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_rrdtool.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_rrdtool.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -179,6 +179,11 @@
  		p->read_fd = from_rrdtool_fds[0];
  		p->rrdtool_pid = pid;
@@ -340,8 +399,8 @@
  	}
 Index: src/response.c
 ===================================================================
---- src/response.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/response.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/response.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/response.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -44,16 +44,15 @@
  	buffer_append_string(b, get_http_status_name(con->http_status));
  
@@ -431,10 +490,31 @@
  		 * - based on the clean URL
  		 *
  		 */
+Index: src/buffer.c
+===================================================================
+--- src/buffer.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/buffer.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -159,7 +159,7 @@
+ 	if (!src) return -1;
+ 
+ 	if (src->used == 0) {
+-		b->used = 0;
++		buffer_reset(b);
+ 		return 0;
+ 	}
+ 	return buffer_copy_string_len(b, src->ptr, src->used - 1);
+@@ -187,6 +187,7 @@
+ 	if (!s || !b) return -1;
+ 
+ 	s_len = strlen(s);
++	if (s_len > maxlen)  s_len = maxlen;
+ 	buffer_prepare_append(b, maxlen + 1);
+ 	if (b->used == 0)
+ 		b->used++;
 Index: src/mod_simple_vhost.c
 ===================================================================
---- src/mod_simple_vhost.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_simple_vhost.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_simple_vhost.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_simple_vhost.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -249,6 +249,8 @@
  				return HANDLER_GO_ON;
  			} else {
@@ -446,9 +526,17 @@
  			buffer_copy_string_buffer(con->server_name, con->uri.authority);
 Index: src/mod_proxy.c
 ===================================================================
---- src/mod_proxy.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_proxy.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
-@@ -652,7 +652,7 @@
+--- src/mod_proxy.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_proxy.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -454,6 +454,7 @@
+ 
+ 		if (ds->value->used && ds->key->used) {
+ 			if (buffer_is_equal_string(ds->key, CONST_STR_LEN("Connection"))) continue;
++			if (buffer_is_equal_string(ds->key, CONST_STR_LEN("Proxy-Connection"))) continue;
+ 
+ 			buffer_append_string_buffer(b, ds->key);
+ 			buffer_append_string_len(b, CONST_STR_LEN(": "));
+@@ -652,7 +653,7 @@
  			buffer_prepare_append(hctx->response, b + 1);
  			hctx->response->used = 1;
  		} else {
@@ -457,7 +545,7 @@
  		}
  
  		if (-1 == (r = read(hctx->fd, hctx->response->ptr + hctx->response->used - 1, b))) {
-@@ -1198,7 +1198,8 @@
+@@ -1198,7 +1199,8 @@
  		host = (data_proxy *)extension->value->data[0];
  
  		/* Use last_used_ndx from first host in list */
@@ -470,12 +558,19 @@
 Index: src/config.h.cmake
 ===================================================================
 --- src/config.h.cmake	(.../tags/lighttpd-1.4.20)	(revision 0)
-+++ src/config.h.cmake	(.../branches/lighttpd-1.4.x)	(revision 2371)
-@@ -0,0 +1,150 @@
++++ src/config.h.cmake	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -0,0 +1,157 @@
 +/*
 +    CMake autogenerated config.h file. Do not edit!
 +*/
 +
++/* Package details */
++#define LIGHTTPD_VERSION_ID ${LIGHTTPD_VERSION_ID}
++#define PACKAGE_NAME "${PACKAGE_NAME}"
++#define PACKAGE_VERSION "${PACKAGE_VERSION}"
++#define PACKAGE_BUILD_DATE "${PACKAGE_BUILD_DATE}"
++#define LIBRARY_DIR "${LIGHTTPD_LIBRARY_DIR}"
++
 +/* System */
 +#cmakedefine  HAVE_SYS_DEVPOLL_H
 +#cmakedefine  HAVE_SYS_EPOLL_H
@@ -622,10 +717,47 @@
 +#cmakedefine HAVE_FASTCGI_FASTCGI_H
 +
 +#cmakedefine LIGHTTPD_STATIC
+Index: src/network_freebsd_sendfile.c
+===================================================================
+--- src/network_freebsd_sendfile.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/network_freebsd_sendfile.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -167,6 +167,7 @@
+ 				switch(errno) {
+ 				case EAGAIN:
+ 				case EINTR:
++					r = 0; /* try again later */
+ 					break;
+ 				case ENOTCONN:
+ 					return -2;
+@@ -174,10 +175,7 @@
+ 					log_error_write(srv, __FILE__, __LINE__, "ssd", "sendfile: ", strerror(errno), errno);
+ 					return -1;
+ 				}
+-			}
+-
+-			if (r == 0 && (errno != EAGAIN && errno != EINTR)) {
+-				int oerrno = errno;
++			} else if (r == 0) {
+ 				/* We got an event to write but we wrote nothing
+ 				 *
+ 				 * - the file shrinked -> error
+@@ -190,12 +188,9 @@
+ 
+ 				if (offset >= sce->st.st_size) {
+ 					/* file shrinked, close the connection */
+-					errno = oerrno;
+-
+ 					return -1;
+ 				}
+ 
+-				errno = oerrno;
+ 				return -2;
+ 			}
+ 
 Index: src/http_auth.c
 ===================================================================
---- src/http_auth.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/http_auth.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/http_auth.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/http_auth.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -57,22 +57,25 @@
  
  static const char base64_pad = '=';
@@ -750,8 +882,8 @@
  		if (NULL == (ldap = ldap_init(p->conf.auth_ldap_hostname->ptr, LDAP_PORT))) {
 Index: src/mod_redirect.c
 ===================================================================
---- src/mod_redirect.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_redirect.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_redirect.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_redirect.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -178,11 +178,7 @@
  
  	mod_redirect_patch_connection(srv, con, p);
@@ -767,8 +899,8 @@
  		pcre *match;
 Index: src/http_auth.h
 ===================================================================
---- src/http_auth.h	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/http_auth.h	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/http_auth.h	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/http_auth.h	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -63,7 +63,7 @@
  
  	mod_auth_plugin_config **config_storage;
@@ -780,8 +912,8 @@
  int http_auth_basic_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
 Index: src/mod_webdav.c
 ===================================================================
---- src/mod_webdav.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_webdav.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_webdav.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_webdav.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -1026,6 +1026,8 @@
  				if (MAP_FAILED == (c->file.mmap.start = mmap(0, c->file.length, PROT_READ, MAP_SHARED, c->file.fd, 0))) {
  					log_error_write(srv, __FILE__, __LINE__, "ssbd", "mmap failed: ",
@@ -802,8 +934,8 @@
  					}
 Index: src/mod_compress.c
 ===================================================================
---- src/mod_compress.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_compress.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_compress.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_compress.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -49,6 +49,7 @@
  	buffer *compress_cache_dir;
  	array  *compress;
@@ -896,7 +1028,47 @@
  			}
  		}
  	}
-@@ -668,27 +709,21 @@
+@@ -619,6 +660,7 @@
+ 	size_t m;
+ 	off_t max_fsize;
+ 	stat_cache_entry *sce = NULL;
++	buffer *mtime = NULL;
+ 
+ 	if (con->mode != DIRECT || con->http_status) return HANDLER_GO_ON;
+ 
+@@ -636,8 +678,30 @@
+ 
+ 	max_fsize = p->conf.compress_max_filesize;
+ 
+-	stat_cache_get_entry(srv, con, con->physical.path, &sce);
++	if (con->conf.log_request_handling) {
++		log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling file as static file");
++	}
+ 
++	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
++		con->http_status = 403;
++
++		log_error_write(srv, __FILE__, __LINE__, "sbsb",
++				"not a regular file:", con->uri.path,
++				"->", con->physical.path);
++
++		return HANDLER_FINISHED;
++	}
++
++	/* we only handle regular files */
++#ifdef HAVE_LSTAT
++	if ((sce->is_symlink == 1) && !con->conf.follow_symlink) {
++		return HANDLER_GO_ON;
++	}
++#endif
++	if (!S_ISREG(sce->st.st_mode)) {
++		return HANDLER_GO_ON;
++	}
++
+ 	/* don't compress files that are too large as we need to much time to handle them */
+ 	if (max_fsize && (sce->st.st_size >> 10) > max_fsize) return HANDLER_GO_ON;
+ 
+@@ -668,27 +732,21 @@
  			if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Accept-Encoding"))) {
  				int accept_encoding = 0;
  				char *value = ds->value->ptr;
@@ -929,10 +1101,92 @@
  
  				if (matched_encodings) {
  					const char *dflt_gzip = "gzip";
+@@ -698,6 +756,17 @@
+ 					const char *compression_name = NULL;
+ 					int compression_type = 0;
+ 
++					mtime = strftime_cache_get(srv, sce->st.st_mtime);
++
++					/* try matching original etag of uncompressed version */
++					etag_mutate(con->physical.etag, sce->etag);
++					if (HANDLER_FINISHED == http_response_handle_cachable(srv, con, mtime)) {
++						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
++						response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
++						response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
++						return HANDLER_FINISHED;
++					}
++
+ 					/* select best matching encoding */
+ 					if (matched_encodings & HTTP_ACCEPT_ENCODING_BZIP2) {
+ 						compression_type = HTTP_ACCEPT_ENCODING_BZIP2;
+@@ -710,41 +779,34 @@
+ 						compression_name = dflt_deflate;
+ 					}
+ 
+-					/* deflate it */
+-					if (p->conf.compress_cache_dir->used) {
+-						if (0 == deflate_file_to_file(srv, con, p,
+-									      con->physical.path, sce, compression_type)) {
+-							buffer *mtime;
++					/* try matching etag of compressed version */
++					buffer_copy_string_buffer(srv->tmp_buf, sce->etag);
++					buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN("-"));
++					buffer_append_string(srv->tmp_buf, compression_name);
++					etag_mutate(con->physical.etag, srv->tmp_buf);
+ 
+-							response_header_overwrite(srv, con, CONST_STR_LEN("Content-Encoding"), compression_name, strlen(compression_name));
+-
+-							mtime = strftime_cache_get(srv, sce->st.st_mtime);
+-							response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+-
+-							etag_mutate(con->physical.etag, sce->etag);
+-							response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+-
+-							response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+-
+-							return HANDLER_GO_ON;
+-						}
+-					} else if (0 == deflate_file_to_buffer(srv, con, p,
+-									       con->physical.path, sce, compression_type)) {
+-						buffer *mtime;
+-
++					if (HANDLER_FINISHED == http_response_handle_cachable(srv, con, mtime)) {
+ 						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Encoding"), compression_name, strlen(compression_name));
+-
+-						mtime = strftime_cache_get(srv, sce->st.st_mtime);
++						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+ 						response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+-
+-						etag_mutate(con->physical.etag, sce->etag);
+ 						response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+-
+-						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+-
+ 						return HANDLER_FINISHED;
+ 					}
+-					break;
++
++					/* deflate it */
++					if (p->conf.compress_cache_dir->used) {
++						if (0 != deflate_file_to_file(srv, con, p, con->physical.path, sce, compression_type))
++							return HANDLER_GO_ON;
++					} else {
++						if (0 != deflate_file_to_buffer(srv, con, p, con->physical.path, sce, compression_type))
++							return HANDLER_GO_ON;
++					}
++					response_header_overwrite(srv, con, CONST_STR_LEN("Content-Encoding"), compression_name, strlen(compression_name));
++					response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
++					response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
++					response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
++					/* let mod_staticfile handle the cached compressed files, physical path was modified */
++					return p->conf.compress_cache_dir->used ? HANDLER_GO_ON : HANDLER_FINISHED;
+ 				}
+ 			}
+ 		}
 Index: src/spawn-fcgi.c
 ===================================================================
---- src/spawn-fcgi.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/spawn-fcgi.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/spawn-fcgi.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/spawn-fcgi.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -58,7 +58,7 @@
  
  
@@ -963,8 +1217,8 @@
  
 Index: src/mod_auth.c
 ===================================================================
---- src/mod_auth.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_auth.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_auth.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_auth.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -115,7 +115,7 @@
  	PATCH(auth_ldap_starttls);
  	PATCH(auth_ldap_allow_empty_pw);
@@ -1004,8 +1258,8 @@
  
 Index: src/http-header-glue.c
 ===================================================================
---- src/http-header-glue.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/http-header-glue.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/http-header-glue.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/http-header-glue.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -280,6 +280,7 @@
  						strncpy(buf, con->request.http_if_modified_since, used_len);
  						buf[used_len] = '\0';
@@ -1024,8 +1278,8 @@
  				 * parsing failed, let's get out of here 
 Index: src/mod_fastcgi.c
 ===================================================================
---- src/mod_fastcgi.c	(.../tags/lighttpd-1.4.20)	(revision 2371)
-+++ src/mod_fastcgi.c	(.../branches/lighttpd-1.4.x)	(revision 2371)
+--- src/mod_fastcgi.c	(.../tags/lighttpd-1.4.20)	(revision 2389)
++++ src/mod_fastcgi.c	(.../branches/lighttpd-1.4.x)	(revision 2389)
 @@ -3252,6 +3252,7 @@
  				fcgi_connection_close(srv, hctx);
  
@@ -1126,8 +1380,8 @@
 Index: src/CMakeLists.txt
 ===================================================================
 --- src/CMakeLists.txt	(.../tags/lighttpd-1.4.20)	(revision 0)
-+++ src/CMakeLists.txt	(.../branches/lighttpd-1.4.x)	(revision 2371)
-@@ -0,0 +1,604 @@
++++ src/CMakeLists.txt	(.../branches/lighttpd-1.4.x)	(revision 2389)
+@@ -0,0 +1,598 @@
 +INCLUDE(CheckCSourceCompiles)
 +INCLUDE(CheckIncludeFiles)
 +INCLUDE(CheckFunctionExists)
@@ -1489,12 +1743,10 @@
 +  CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
 +ENDIF(HAVE_DLFCN_H)
 +
-+ADD_DEFINITIONS(
-+  -DLIGHTTPD_VERSION_ID=10400
-+  -DPACKAGE_NAME="\\"${CMAKE_PROJECT_NAME}\\""
-+  -DPACKAGE_VERSION="\\"${CPACK_PACKAGE_VERSION}\\""
-+  -DPACKAGE_BUILD_DATE="\\"-\\""
-+  )
++SET(LIGHTTPD_VERSION_ID 10400)
++SET(PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
++SET(PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}")
++EXEC_PROGRAM(date ARGS "'+%b %d %Y %H:%M:%S UTC'" OUTPUT_VARIABLE PACKAGE_BUILD_DATE)
 +
 +IF(NOT SBINDIR)
 +    SET(SBINDIR "sbin")
@@ -1505,14 +1757,10 @@
 +ENDIF(NOT LIGHTTPD_MODULES_DIR)
 +
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/lighttpd-branch.diff?r1=1.43&r2=1.44&f=u



More information about the pld-cvs-commit mailing list