SOURCES: lighttpd-branch.diff - update to 2129: - Fix conditional interpr...
glen
glen at pld-linux.org
Tue Jun 17 17:56:27 CEST 2008
Author: glen Date: Tue Jun 17 15:56:27 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- update to 2129:
- Fix conditional interpretation of core options
- Enable escaping of % and $ in redirect/rewrite; only two cases changed their behaviour: "%%" => "%", "$$" => "$"
- Fix accesslog port (should be port from the connection, not the "server.port") (#1618)
- Fix mod_fastcgi prefix matching: match the prefix always against url, not the absolute filepath (regardless of check-local)
- Overwrite Content-Type header in mod_dirlisting instead of inserting (#1614), patch by Henrik Holst
- Handle EINTR in mod_cgi during write() (#1640)
- Allow all http status codes by default; disable body only for 204,205 and 304; generate error pages for 4xx and 5xx (#1639)
- Fix mod_magnet to set con->mode = p->id if it generates content, so returning 4xx/5xx doesn't append an error page
- Remove lighttpd.spec* from source, fixing all problems with it ;-)
- Do not rely on PATH_MAX (POSIX does not require it) (#580)
- Disable logging to access.log if filename is an empty string
- Implement a clean way to open /dev/null and use it to close stdin/out/err in the needed places (#624)
---- Files affected:
SOURCES:
lighttpd-branch.diff (1.33 -> 1.34)
---- Diffs:
================================================================
Index: SOURCES/lighttpd-branch.diff
diff -u SOURCES/lighttpd-branch.diff:1.33 SOURCES/lighttpd-branch.diff:1.34
--- SOURCES/lighttpd-branch.diff:1.33 Thu Apr 10 20:36:36 2008
+++ SOURCES/lighttpd-branch.diff Tue Jun 17 17:56:21 2008
@@ -1,9 +1,114 @@
+Index: lighttpd.spec.in
+===================================================================
+--- lighttpd.spec.in (.../tags/lighttpd-1.4.19) (revision 2190)
++++ lighttpd.spec.in (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -1,83 +0,0 @@
+-Summary: A fast webserver with minimal memory-footprint (lighttpd)
+-Name: lighttpd
+-Version: @VERSION@
+-Release: 1
+-Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-%version.tar.gz
+-Packager: Jan Kneschke <jan at kneschke.de>
+-License: BSD
+-Group: Networking/Daemons
+-URL: http://www.lighttpd.net/
+-Requires: pcre >= 3.1 zlib
+-BuildRequires: libtool zlib-devel
+-BuildRoot: %{_tmppath}/%{name}-root
+-
+-%description
+-lighttpd is intented to be a frontend for ad-servers which have to deliver
+-small files concurrently to many connections.
+-
+-Available rpmbuild rebuild options:
+---with: ssl mysql lua memcache
+-
+-%prep
+-%setup -q
+-
+-%build
+-rm -rf %{buildroot}
+-%configure \
+- %{?_with_mysql: --with-mysql} \
+- %{?_with_lua: --with-lua} \
+- %{?_with_memcache: --with-memcache} \
+- %{?_with_ssl: --with-openssl}
+-make
+-
+-%install
+-%makeinstall
+-
+-mkdir -p %{buildroot}%{_sysconfdir}/{init.d,sysconfig}
+-if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then
+- install -m 755 doc/rc.lighttpd.redhat %{buildroot}%{_sysconfdir}/init.d/lighttpd
+-else
+- install -m 755 doc/rc.lighttpd %{buildroot}%{_sysconfdir}/init.d/lighttpd
+-fi
+-install -m 644 doc/sysconfig.lighttpd %{buildroot}%{_sysconfdir}/sysconfig/lighttpd
+-
+-%clean
+-rm -rf %{buildroot}
+-
+-%post
+-## read http://www.fedora.us/docs/spec.html next time :)
+-if [ "$1" = "1" ]; then
+- # real install, not upgrade
+- /sbin/chkconfig --add lighttpd
+-fi
+-
+-%preun
+-if [ "$1" = "0"]; then
+- # real uninstall, not upgrade
+- %{_sysconfdir}/init.d/lighttpd stop
+- /sbin/chkconfig --del lighttpd
+-fi
+-
+-%files
+-%defattr(-,root,root)
+-%doc doc/lighttpd.conf doc/lighttpd.user README INSTALL ChangeLog COPYING AUTHORS
+-%doc doc/*.txt
+-%config(noreplace) %attr(0755,root,root) %{_sysconfdir}/init.d/lighttpd
+-%config(noreplace) %attr(0644,root,root) %{_sysconfdir}/sysconfig/lighttpd
+-%{_mandir}/*
+-%{_libdir}/*
+-%{_sbindir}/*
+-%{_bindir}/*
+-
+-%changelog
+-* Thu Sep 30 2004 12:41 <jan at kneschke.de> 1.3.1
+-- upgraded to 1.3.1
+-
+-* Tue Jun 29 2004 17:26 <jan at kneschke.de> 1.2.3
+-- rpmlint'ed the package
+-- added URL
+-- added (noreplace) to start-script
+-- change group to Networking/Daemon (like apache)
+-
+-* Sun Feb 23 2003 15:04 <jan at kneschke.de>
+-- initial version
Index: configure.in
===================================================================
+Index: src/mod_ssi_exprparser.h
+===================================================================
+--- src/mod_ssi_exprparser.h (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/mod_ssi_exprparser.h (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -1,12 +0,0 @@
+-#define TK_AND 1
+-#define TK_OR 2
+-#define TK_EQ 3
+-#define TK_NE 4
+-#define TK_GT 5
+-#define TK_GE 6
+-#define TK_LT 7
+-#define TK_LE 8
+-#define TK_NOT 9
+-#define TK_LPARAN 10
+-#define TK_RPARAN 11
+-#define TK_VALUE 12
Index: src/configfile-glue.c
===================================================================
---- src/configfile-glue.c (.../tags/lighttpd-1.4.19) (revision 2145)
-+++ src/configfile-glue.c (.../branches/lighttpd-1.4.x) (revision 2145)
+--- src/configfile-glue.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/configfile-glue.c (.../branches/lighttpd-1.4.x) (revision 2190)
@@ -529,7 +529,7 @@
int config_append_cond_match_buffer(connection *con, data_config *dc, buffer *buf, int n)
{
@@ -13,10 +118,138 @@
return 0;
}
+Index: src/mod_cgi.c
+===================================================================
+--- src/mod_cgi.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/mod_cgi.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -987,6 +987,8 @@
+ *c = '/';
+ }
+
++ openDevNull(STDERR_FILENO);
++
+ /* we don't need the client socket */
+ for (i = 3; i < 256; i++) {
+ if (i != srv->errorlog_fd) close(i);
+@@ -995,7 +997,7 @@
+ /* exec the cgi */
+ execve(args[0], args, env.ptr);
+
+- log_error_write(srv, __FILE__, __LINE__, "sss", "CGI failed:", strerror(errno), args[0]);
++ /* log_error_write(srv, __FILE__, __LINE__, "sss", "CGI failed:", strerror(errno), args[0]); */
+
+ /* */
+ SEGFAULT();
+@@ -1058,8 +1060,9 @@
+ switch(errno) {
+ case ENOSPC:
+ con->http_status = 507;
+-
+ break;
++ case EINTR:
++ continue;
+ default:
+ con->http_status = 403;
+ break;
+@@ -1071,8 +1074,9 @@
+ switch(errno) {
+ case ENOSPC:
+ con->http_status = 507;
+-
+ break;
++ case EINTR:
++ continue;
+ default:
+ con->http_status = 403;
+ break;
+@@ -1087,6 +1091,8 @@
+ c->offset += r;
+ cq->bytes_out += r;
+ } else {
++ log_error_write(srv, __FILE__, __LINE__, "ss", "write() failed due to: ", strerror(errno));
++ con->http_status = 500;
+ break;
+ }
+ chunkqueue_remove_finished_chunks(cq);
+Index: src/mod_rewrite.c
+===================================================================
+--- src/mod_rewrite.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/mod_rewrite.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -385,8 +385,7 @@
+
+ start = 0; end = pattern_len;
+ for (k = 0; k < pattern_len; k++) {
+- if ((pattern[k] == '$' || pattern[k] == '%') &&
+- isdigit((unsigned char)pattern[k + 1])) {
++ if (pattern[k] == '$' || pattern[k] == '%') {
+ /* got one */
+
+ size_t num = pattern[k + 1] - '0';
+@@ -395,7 +394,10 @@
+
+ buffer_append_string_len(con->request.uri, pattern + start, end - start);
+
+- if (pattern[k] == '$') {
++ 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);
++ } else if (pattern[k] == '$') {
+ /* n is always > 0 */
+ if (num < (size_t)n) {
+ buffer_append_string(con->request.uri, list[num]);
+Index: src/lempar.c
+===================================================================
+--- src/lempar.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/lempar.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -210,7 +210,7 @@
+ */
+ const char *ParseTokenName(int tokenType){
+ #ifndef NDEBUG
+- if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
++ if( tokenType>0 && (size_t)tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
+ return yyTokenName[tokenType];
+ }else{
+ return "Unknown";
+@@ -335,7 +335,7 @@
+ return YY_NO_ACTION;
+ }
+ i += iLookAhead;
+- if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
++ if( i<0 || (size_t)i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+ #ifdef YYFALLBACK
+ int iFallback; /* Fallback token */
+ if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+@@ -378,7 +378,7 @@
+ return YY_NO_ACTION;
+ }
+ i += iLookAhead;
+- if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
++ if( i<0 || (size_t)i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+ return yy_default[stateno];
+ }else{
+ return yy_action[i];
+@@ -456,7 +456,7 @@
+ yymsp = &yypParser->yystack[yypParser->yyidx];
+ #ifndef NDEBUG
+ if( yyTraceFILE && yyruleno>=0
+- && yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
++ && (size_t)yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
+ fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+ yyRuleName[yyruleno]);
+ }
+@@ -511,6 +511,8 @@
+ int yymajor, /* The major type of the error token */
+ YYMINORTYPE yyminor /* The minor type of the error token */
+ ){
++ UNUSED(yymajor);
++ UNUSED(yyminor);
+ ParseARG_FETCH;
+ #define TOKEN (yyminor.yy0)
+ %%
Index: src/connections.c
===================================================================
---- src/connections.c (.../tags/lighttpd-1.4.19) (revision 2145)
-+++ src/connections.c (.../branches/lighttpd-1.4.x) (revision 2145)
+--- src/connections.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/connections.c (.../branches/lighttpd-1.4.x) (revision 2190)
@@ -199,6 +199,7 @@
/* don't resize the buffer if we were in SSL_ERROR_WANT_* */
@@ -25,7 +258,111 @@
do {
if (!con->ssl_error_want_reuse_buffer) {
b = buffer_init();
-@@ -1668,21 +1669,51 @@
+@@ -299,6 +300,8 @@
+
+ return 0;
+ #else
++ UNUSED(srv);
++ UNUSED(con);
+ return -1;
+ #endif
+ }
+@@ -427,21 +430,22 @@
+ }
+
+ switch(con->http_status) {
+- case 400: /* class: header + custom body */
+- case 401:
+- case 403:
+- case 404:
+- case 408:
+- case 409:
+- case 411:
+- case 416:
+- case 423:
+- case 500:
+- case 501:
+- case 503:
+- case 505:
++ case 204: /* class: header only */
++ case 205:
++ case 304:
++ /* disable chunked encoding again as we have no body */
++ con->response.transfer_encoding &= ~HTTP_TRANSFER_ENCODING_CHUNKED;
++ con->parsed_response &= ~HTTP_CONTENT_LENGTH;
++ chunkqueue_reset(con->write_queue);
++
++ con->file_finished = 1;
++ break;
++ default: /* class: header + body */
+ if (con->mode != DIRECT) break;
+
++ /* only custom body for 4xx and 5xx */
++ if (con->http_status < 400 || con->http_status >= 600) break;
++
+ con->file_finished = 0;
+
+ buffer_reset(con->physical.path);
+@@ -451,7 +455,8 @@
+ stat_cache_entry *sce = NULL;
+
+ buffer_copy_string_buffer(con->physical.path, con->conf.errorfile_prefix);
+- buffer_append_string(con->physical.path, get_http_status_body_name(con->http_status));
++ buffer_append_long(con->physical.path, con->http_status);
++ buffer_append_string_len(con->physical.path, CONST_STR_LEN(".html"));
+
+ if (HANDLER_ERROR != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+ con->file_finished = 1;
+@@ -497,30 +502,7 @@
+
+ response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+ }
+- /* fall through */
+- case 207:
+- case 200: /* class: header + body */
+- case 201:
+- case 300:
+- case 301:
+- case 302:
+- case 303:
+- case 307:
+ break;
+-
+- case 206: /* write_queue is already prepared */
+- break;
+- case 204:
+- case 205: /* class: header only */
+- case 304:
+- default:
+- /* disable chunked encoding again as we have no body */
+- con->response.transfer_encoding &= ~HTTP_TRANSFER_ENCODING_CHUNKED;
+- con->parsed_response &= ~HTTP_CONTENT_LENGTH;
+- chunkqueue_reset(con->write_queue);
+-
+- con->file_finished = 1;
+- break;
+ }
+
+ if (con->file_finished) {
+@@ -544,7 +526,7 @@
+ data_string *ds;
+ /* no Content-Body, no Content-Length */
+ if (NULL != (ds = (data_string*) array_get_element(con->response.headers, "Content-Length"))) {
+- buffer_reset(ds->value); // Headers with empty values are ignored for output
++ buffer_reset(ds->value); /* Headers with empty values are ignored for output */
+ }
+ } else if (qlen > 0 || con->request.http_method != HTTP_METHOD_HEAD) {
+ /* qlen = 0 is important for Redirects (301, ...) as they MAY have
+@@ -846,7 +828,7 @@
+ }
+
+ /* The cond_cache gets reset in response.c */
+-// config_cond_cache_reset(srv, con);
++ /* config_cond_cache_reset(srv, con); */
+
+ #ifdef USE_OPENSSL
+ if (con->ssl_error_want_reuse_buffer) {
+@@ -1668,21 +1650,51 @@
}
#ifdef USE_OPENSSL
if (srv_sock->is_ssl) {
@@ -84,10 +421,510 @@
#endif
switch(con->mode) {
+Index: src/configfile.c
+===================================================================
+--- src/configfile.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/configfile.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -7,6 +7,7 @@
+ #include <string.h>
+ #include <stdio.h>
+ #include <ctype.h>
++#include <limits.h>
+ #include <assert.h>
+
+ #include "server.h"
+@@ -305,9 +306,6 @@
+ data_config *dc = (data_config *)srv->config_context->data[i];
+ specific_config *s = srv->config_storage[i];
+
+- /* not our stage */
+- if (comp != dc->comp) continue;
+-
+ /* condition didn't match */
+ if (!config_check_cond(srv, con, dc)) continue;
+
+@@ -410,8 +408,8 @@
+
+ #if 0
+ static int tokenizer_open(server *srv, tokenizer_t *t, buffer *basedir, const char *fn) {
+- if (buffer_is_empty(basedir) &&
+- (fn[0] == '/' || fn[0] == '\\') &&
++ if (buffer_is_empty(basedir) ||
++ (fn[0] == '/' || fn[0] == '\\') ||
+ (fn[0] == '.' && (fn[1] == '/' || fn[1] == '\\'))) {
+ t->file = buffer_init_string(fn);
+ } else {
+@@ -884,8 +882,8 @@
+ int ret;
+ buffer *filename;
+
+- if (buffer_is_empty(context->basedir) &&
+- (fn[0] == '/' || fn[0] == '\\') &&
++ if (buffer_is_empty(context->basedir) ||
++ (fn[0] == '/' || fn[0] == '\\') ||
+ (fn[0] == '.' && (fn[1] == '/' || fn[1] == '\\'))) {
+ filename = buffer_init_string(fn);
+ } else {
+@@ -912,15 +910,39 @@
+ return ret;
+ }
+
++static char* getCWD() {
++ char *s, *s1;
++ size_t len;
++#ifdef PATH_MAX
++ len = PATH_MAX;
++#else
++ len = 4096;
++#endif
++
++ s = malloc(len);
++ if (!s) return NULL;
++ while (NULL == getcwd(s, len)) {
++ if (errno != ERANGE || SSIZE_MAX - len < len) return NULL;
++ len *= 2;
++ s1 = realloc(s, len);
++ if (!s1) {
++ free(s);
++ return NULL;
++ }
++ s = s1;
++ }
++ return s;
++}
++
+ int config_parse_cmd(server *srv, config_t *context, const char *cmd) {
+ proc_handler_t proc;
+ tokenizer_t t;
+ int ret;
+ buffer *source;
+ buffer *out;
+- char oldpwd[PATH_MAX];
++ char *oldpwd;
+
+- if (NULL == getcwd(oldpwd, sizeof(oldpwd))) {
++ if (NULL == (oldpwd = getCWD())) {
+ log_error_write(srv, __FILE__, __LINE__, "s",
+ "cannot get cwd", strerror(errno));
+ return -1;
+@@ -945,6 +967,7 @@
+ buffer_free(source);
+ buffer_free(out);
+ chdir(oldpwd);
++ free(oldpwd);
+ return ret;
+ }
+
+Index: src/lemon.c
+===================================================================
+--- src/lemon.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/lemon.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -12,6 +12,19 @@
+ #include <ctype.h>
+ #include <stdlib.h>
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++
++#define UNUSED(x) ( (void)(x) )
++
+ extern void qsort();
+ extern double strtod();
+ extern long strtol();
+@@ -983,6 +996,7 @@
+ {
+ struct symbol *spx, *spy;
+ int errcnt = 0;
++ UNUSED(errsym);
+ assert( apx->sp==apy->sp ); /* Otherwise there would be no conflict */
+ if( apx->type==SHIFT && apy->type==REDUCE ){
+ spx = apx->sp;
+@@ -1347,6 +1361,7 @@
+ struct lemon lem;
+ char *def_tmpl_name = "lempar.c";
+
++ UNUSED(argc);
+ OptInit(argv,options,stderr);
+ if( version ){
+ printf("Lemon version 1.0\n");
+@@ -1651,7 +1666,7 @@
+ }else if( op[j].type==OPT_FLAG ){
+ *((int*)op[j].arg) = v;
+ }else if( op[j].type==OPT_FFLAG ){
+- (*(void(*)())(op[j].arg))(v);
++ (*(void(*)())(intptr_t)(op[j].arg))(v);
+ }else{
+ if( err ){
+ fprintf(err,"%smissing argument on switch.\n",emsg);
+@@ -1733,19 +1748,19 @@
+ *(double*)(op[j].arg) = dv;
+ break;
+ case OPT_FDBL:
+- (*(void(*)())(op[j].arg))(dv);
++ (*(void(*)())(intptr_t)(op[j].arg))(dv);
+ break;
+ case OPT_INT:
+ *(int*)(op[j].arg) = lv;
+ break;
+ case OPT_FINT:
+- (*(void(*)())(op[j].arg))((int)lv);
++ (*(void(*)())(intptr_t)(op[j].arg))((int)lv);
+ break;
+ case OPT_STR:
+ *(char**)(op[j].arg) = sv;
+ break;
+ case OPT_FSTR:
+- (*(void(*)())(op[j].arg))(sv);
++ (*(void(*)())(intptr_t)(op[j].arg))(sv);
+ break;
+ }
+ }
+@@ -2286,10 +2301,10 @@
+ ** token is passed to the function "parseonetoken" which builds all
+ ** the appropriate data structures in the global state vector "gp".
+ */
++struct pstate ps;
+ void Parse(gp)
+ struct lemon *gp;
+ {
+- struct pstate ps;
+ FILE *fp;
+ char *filebuf;
+ size_t filesize;
+Index: src/mod_scgi.c
+===================================================================
+--- src/mod_scgi.c (.../tags/lighttpd-1.4.19) (revision 2190)
++++ src/mod_scgi.c (.../branches/lighttpd-1.4.x) (revision 2190)
+@@ -202,6 +202,15 @@
+ *
+ */
+
++ /*
++ * workaround for program when prefix="/"
++ *
++ * rule to build PATH_INFO is hardcoded for when check_local is disabled
++ * enable this option to use the workaround
++ *
++ */
++
++ unsigned short fix_root_path_name;
+ ssize_t load; /* replace by host->load */
+
+ size_t max_id; /* corresponds most of the time to
+@@ -233,6 +242,7 @@
+ typedef struct {
+ buffer *key; /* like .php */
+
++ int note_is_sent;
+ scgi_extension_host **hosts;
+
+ size_t used;
+@@ -968,6 +978,7 @@
+
+ { "bin-environment", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 11 */
+ { "bin-copy-environment", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 12 */
++ { "fix-root-scriptname", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 13 */
+
+
+ { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+@@ -990,6 +1001,7 @@
+ df->max_load_per_proc = 1;
+ df->idle_timeout = 60;
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/lighttpd-branch.diff?r1=1.33&r2=1.34&f=u
More information about the pld-cvs-commit
mailing list