[pkg-lighttpd] r276 - in lighttpd/trunk: . cygwin debian openwrt src tests
eloy at alioth.debian.org
eloy at alioth.debian.org
Tue Sep 11 10:47:39 UTC 2007
Author: eloy
Date: 2007-09-11 10:47:39 +0000 (Tue, 11 Sep 2007)
New Revision: 276
Added:
lighttpd/trunk/src/lighttpd-angel.c
Modified:
lighttpd/trunk/NEWS
lighttpd/trunk/configure
lighttpd/trunk/configure.in
lighttpd/trunk/cygwin/lighttpd.README
lighttpd/trunk/debian/changelog
lighttpd/trunk/lighttpd.spec
lighttpd/trunk/openwrt/control
lighttpd/trunk/openwrt/lighttpd.mk
lighttpd/trunk/src/Makefile.am
lighttpd/trunk/src/Makefile.in
lighttpd/trunk/src/configparser.c
lighttpd/trunk/src/configparser.y
lighttpd/trunk/src/connections.c
lighttpd/trunk/src/http_auth.c
lighttpd/trunk/src/mod_fastcgi.c
lighttpd/trunk/src/mod_mysql_vhost.c
lighttpd/trunk/src/server.c
lighttpd/trunk/tests/mod-redirect.t
Log:
new upstream version
Modified: lighttpd/trunk/NEWS
===================================================================
--- lighttpd/trunk/NEWS 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/NEWS 2007-09-11 10:47:39 UTC (rev 276)
@@ -3,7 +3,18 @@
NEWS
====
+- 1.4.18 - 2007-09-09
+
+ * fixed compile error on IRIX 6.5.x on prctl() (#1333)
+ * fixed forwarding a SIGINT and SIGHUP when using max-workers (#902)
+ * fixed FastCGI header overrun in mod_fastcgi (reported by mattias at secweb.se)
+ * fixed hanging redirects with keep-alive due to missing
+ "Content-Length: 0" headers
+ * fixed crashing when using undefined environment variables in the config
+ * fixed compilation of mod_mysql_vhost on irix (#1341)
+
- 1.4.17 - 2007-08-29
+
* added dir-listing.set-footer in mod_dirlisting (#1277)
* added sending UID and PID for SIGTERM and SIGINT to the logs
* fixed hardcoded font-sizes in mod_dirlisting (#1267)
Modified: lighttpd/trunk/configure
===================================================================
--- lighttpd/trunk/configure 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/configure 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for lighttpd 1.4.17.
+# Generated by GNU Autoconf 2.61 for lighttpd 1.4.18.
#
# Report bugs to <jan at kneschke.de>.
#
@@ -728,8 +728,8 @@
# Identity of this package.
PACKAGE_NAME='lighttpd'
PACKAGE_TARNAME='lighttpd'
-PACKAGE_VERSION='1.4.17'
-PACKAGE_STRING='lighttpd 1.4.17'
+PACKAGE_VERSION='1.4.18'
+PACKAGE_STRING='lighttpd 1.4.18'
PACKAGE_BUGREPORT='jan at kneschke.de'
ac_unique_file="src/server.c"
@@ -1440,7 +1440,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures lighttpd 1.4.17 to adapt to many kinds of systems.
+\`configure' configures lighttpd 1.4.18 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1511,7 +1511,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of lighttpd 1.4.17:";;
+ short | recursive ) echo "Configuration of lighttpd 1.4.18:";;
esac
cat <<\_ACEOF
@@ -1645,7 +1645,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-lighttpd configure 1.4.17
+lighttpd configure 1.4.18
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1659,7 +1659,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by lighttpd $as_me 1.4.17, which was
+It was created by lighttpd $as_me 1.4.18, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2478,7 +2478,7 @@
# Define the identity of the package.
PACKAGE='lighttpd'
- VERSION='1.4.17'
+ VERSION='1.4.18'
cat >>confdefs.h <<_ACEOF
@@ -28619,7 +28619,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by lighttpd $as_me 1.4.17, which was
+This file was extended by lighttpd $as_me 1.4.18, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -28672,7 +28672,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-lighttpd config.status 1.4.17
+lighttpd config.status 1.4.18
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Modified: lighttpd/trunk/configure.in
===================================================================
--- lighttpd/trunk/configure.in 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/configure.in 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,7 +1,7 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
-AC_INIT(lighttpd, 1.4.17, jan at kneschke.de)
+AC_INIT(lighttpd, 1.4.18, jan at kneschke.de)
AC_CONFIG_SRCDIR([src/server.c])
AC_CANONICAL_TARGET
Modified: lighttpd/trunk/cygwin/lighttpd.README
===================================================================
--- lighttpd/trunk/cygwin/lighttpd.README 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/cygwin/lighttpd.README 2007-09-11 10:47:39 UTC (rev 276)
@@ -31,17 +31,17 @@
------------------------------------
Build instructions:
- unpack lighttpd-1.4.17-<REL>-src.tar.bz2
+ unpack lighttpd-1.4.18-<REL>-src.tar.bz2
if you use setup to install this src package, it will be
unpacked under /usr/src automatically
cd /usr/src
- ./lighttpd-1.4.17-<REL>.sh all
+ ./lighttpd-1.4.18-<REL>.sh all
This will create:
- /usr/src/lighttpd-1.4.17-<REL>.tar.bz2
- /usr/src/lighttpd-1.4.17-<REL>-src.tar.bz2
+ /usr/src/lighttpd-1.4.18-<REL>.tar.bz2
+ /usr/src/lighttpd-1.4.18-<REL>-src.tar.bz2
-Or use './lighttpd-1.4.17-<REL>.sh prep' to get a patched source directory
+Or use './lighttpd-1.4.18-<REL>.sh prep' to get a patched source directory
-------------------------------------------
Modified: lighttpd/trunk/debian/changelog
===================================================================
--- lighttpd/trunk/debian/changelog 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/debian/changelog 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,3 +1,11 @@
+lighttpd (1.4.18-1) UNRELEASED; urgency=low
+
+ * (NOT RELEASED YET) New upstream release
+ * lighttpd contains now small lighttpd-angel binary which is used for
+ gracefull restarting of lighttpd
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org> Tue, 11 Sep 2007 12:45:11 +0200
+
lighttpd (1.4.17-1) unstable; urgency=low
* New upstream release
Modified: lighttpd/trunk/lighttpd.spec
===================================================================
--- lighttpd/trunk/lighttpd.spec 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/lighttpd.spec 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,6 +1,6 @@
Summary: A fast webserver with minimal memory-footprint (lighttpd)
Name: lighttpd
-Version: 1.4.17
+Version: 1.4.18
Release: 1
Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-%version.tar.gz
Packager: Jan Kneschke <jan at kneschke.de>
Modified: lighttpd/trunk/openwrt/control
===================================================================
--- lighttpd/trunk/openwrt/control 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/openwrt/control 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,8 +1,8 @@
Package: lighttpd
-Version: 1.4.17
+Version: 1.4.18
Architecture: mipsel
Maintainer: Jan Kneschke <jan at kneschke.de>
-Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-1.4.17.tar.gz
+Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-1.4.18.tar.gz
Section: net
Priority: optional
Depends:
Modified: lighttpd/trunk/openwrt/lighttpd.mk
===================================================================
--- lighttpd/trunk/openwrt/lighttpd.mk 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/openwrt/lighttpd.mk 2007-09-11 10:47:39 UTC (rev 276)
@@ -10,7 +10,7 @@
# For this example we'll use a fairly simple package that compiles easily
# and has sources available for download at sourceforge
-LIGHTTPD=lighttpd-1.4.17
+LIGHTTPD=lighttpd-1.4.18
LIGHTTPD_TARGET=.built
LIGHTTPD_DIR=$(BUILD_DIR)/$(LIGHTTPD)
LIGHTTPD_IPK=$(BUILD_DIR)/$(LIGHTTPD)_mipsel.ipk
Modified: lighttpd/trunk/src/Makefile.am
===================================================================
--- lighttpd/trunk/src/Makefile.am 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/Makefile.am 2007-09-11 10:47:39 UTC (rev 276)
@@ -1,12 +1,14 @@
AM_CFLAGS = $(FAM_CFLAGS)
noinst_PROGRAMS=proc_open lemon # simple-fcgi #graphic evalo bench ajp ssl error_test adserver gen-license
-sbin_PROGRAMS=lighttpd
+sbin_PROGRAMS=lighttpd lighttpd-angel
bin_PROGRAMS=spawn-fcgi
LEMON=$(top_builddir)/src/lemon
lemon_SOURCES=lemon.c
+lighttpd_angel_SOURCES=lighttpd-angel.c
+
#simple_fcgi_SOURCES=simple-fcgi.c
#simple_fcgi_LDADD=-lfcgi
@@ -254,7 +256,7 @@
splaytree.h proc_open.h status_counter.h \
mod_magnet_cache.h
-DEFS= @DEFS@ -DLIBRARY_DIR="\"$(libdir)\""
+DEFS= @DEFS@ -DLIBRARY_DIR="\"$(libdir)\"" -DSBIN_DIR="\"$(sbindir)\""
lighttpd_SOURCES = $(src)
lighttpd_LDADD = $(PCRE_LIB) $(DL_LIB) $(SENDFILE_LIB) $(ATTR_LIB) $(common_libadd) $(SSL_LIB) $(FAM_LIBS)
Modified: lighttpd/trunk/src/Makefile.in
===================================================================
--- lighttpd/trunk/src/Makefile.in 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/Makefile.in 2007-09-11 10:47:39 UTC (rev 276)
@@ -36,7 +36,7 @@
host_triplet = @host@
target_triplet = @target@
noinst_PROGRAMS = proc_open$(EXEEXT) lemon$(EXEEXT)
-sbin_PROGRAMS = lighttpd$(EXEEXT)
+sbin_PROGRAMS = lighttpd$(EXEEXT) lighttpd-angel$(EXEEXT)
bin_PROGRAMS = spawn-fcgi$(EXEEXT)
# if the linker doesn't allow referencing symbols of the binary
@@ -373,6 +373,9 @@
lighttpd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lighttpd_LDFLAGS) \
$(LDFLAGS) -o $@
+am_lighttpd_angel_OBJECTS = lighttpd-angel.$(OBJEXT)
+lighttpd_angel_OBJECTS = $(am_lighttpd_angel_OBJECTS)
+lighttpd_angel_LDADD = $(LDADD)
am_proc_open_OBJECTS = proc_open-proc_open.$(OBJEXT) \
proc_open-buffer.$(OBJEXT)
proc_open_OBJECTS = $(am_proc_open_OBJECTS)
@@ -409,7 +412,8 @@
$(mod_status_la_SOURCES) $(mod_trigger_b4_dl_la_SOURCES) \
$(mod_userdir_la_SOURCES) $(mod_usertrack_la_SOURCES) \
$(mod_webdav_la_SOURCES) $(lemon_SOURCES) $(lighttpd_SOURCES) \
- $(proc_open_SOURCES) $(spawn_fcgi_SOURCES)
+ $(lighttpd_angel_SOURCES) $(proc_open_SOURCES) \
+ $(spawn_fcgi_SOURCES)
DIST_SOURCES = $(am__liblightcomp_la_SOURCES_DIST) \
$(mod_access_la_SOURCES) $(mod_accesslog_la_SOURCES) \
$(mod_alias_la_SOURCES) $(mod_auth_la_SOURCES) \
@@ -428,7 +432,8 @@
$(mod_trigger_b4_dl_la_SOURCES) $(mod_userdir_la_SOURCES) \
$(mod_usertrack_la_SOURCES) $(mod_webdav_la_SOURCES) \
$(lemon_SOURCES) $(am__lighttpd_SOURCES_DIST) \
- $(proc_open_SOURCES) $(spawn_fcgi_SOURCES)
+ $(lighttpd_angel_SOURCES) $(proc_open_SOURCES) \
+ $(spawn_fcgi_SOURCES)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
CTAGS = ctags
@@ -453,7 +458,7 @@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@ -DLIBRARY_DIR="\"$(libdir)\""
+DEFS = @DEFS@ -DLIBRARY_DIR="\"$(libdir)\"" -DSBIN_DIR="\"$(sbindir)\""
DEPDIR = @DEPDIR@
DL_LIB = @DL_LIB@
ECHO = @ECHO@
@@ -573,6 +578,7 @@
AM_CFLAGS = $(FAM_CFLAGS)
LEMON = $(top_builddir)/src/lemon
lemon_SOURCES = lemon.c
+lighttpd_angel_SOURCES = lighttpd-angel.c
common_src = buffer.c log.c \
keyvalue.c chunk.c \
http_chunk.c stream.c fdevent.c \
@@ -945,6 +951,9 @@
lighttpd$(EXEEXT): $(lighttpd_OBJECTS) $(lighttpd_DEPENDENCIES)
@rm -f lighttpd$(EXEEXT)
$(lighttpd_LINK) $(lighttpd_OBJECTS) $(lighttpd_LDADD) $(LIBS)
+lighttpd-angel$(EXEEXT): $(lighttpd_angel_OBJECTS) $(lighttpd_angel_DEPENDENCIES)
+ @rm -f lighttpd-angel$(EXEEXT)
+ $(LINK) $(lighttpd_angel_OBJECTS) $(lighttpd_angel_LDADD) $(LIBS)
proc_open$(EXEEXT): $(proc_open_OBJECTS) $(proc_open_DEPENDENCIES)
@rm -f proc_open$(EXEEXT)
$(LINK) $(proc_open_OBJECTS) $(proc_open_LDADD) $(LIBS)
@@ -1029,6 +1038,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-stat_cache.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-status_counter.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-stream.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lighttpd-angel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/log.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/md5.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_access.Plo at am__quote@
Modified: lighttpd/trunk/src/configparser.c
===================================================================
--- lighttpd/trunk/src/configparser.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/configparser.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -941,6 +941,7 @@
case 14:
#line 232 "./configparser.y"
{
+ yygotominor.yy41 = NULL;
if (strncmp(yymsp[0].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
char *env;
@@ -965,59 +966,59 @@
buffer_free(yymsp[0].minor.yy43);
yymsp[0].minor.yy43 = NULL;
}
-#line 968 "configparser.c"
+#line 969 "configparser.c"
break;
case 15:
-#line 258 "./configparser.y"
+#line 259 "./configparser.y"
{
yygotominor.yy41 = (data_unset *)data_string_init();
buffer_copy_string_buffer(((data_string *)(yygotominor.yy41))->value, yymsp[0].minor.yy0);
buffer_free(yymsp[0].minor.yy0);
yymsp[0].minor.yy0 = NULL;
}
-#line 978 "configparser.c"
+#line 979 "configparser.c"
break;
case 16:
-#line 265 "./configparser.y"
+#line 266 "./configparser.y"
{
yygotominor.yy41 = (data_unset *)data_integer_init();
((data_integer *)(yygotominor.yy41))->value = strtol(yymsp[0].minor.yy0->ptr, NULL, 10);
buffer_free(yymsp[0].minor.yy0);
yymsp[0].minor.yy0 = NULL;
}
-#line 988 "configparser.c"
+#line 989 "configparser.c"
break;
case 17:
-#line 271 "./configparser.y"
+#line 272 "./configparser.y"
{
yygotominor.yy41 = (data_unset *)data_array_init();
array_free(((data_array *)(yygotominor.yy41))->value);
((data_array *)(yygotominor.yy41))->value = yymsp[0].minor.yy40;
yymsp[0].minor.yy40 = NULL;
}
-#line 998 "configparser.c"
+#line 999 "configparser.c"
break;
case 18:
-#line 277 "./configparser.y"
+#line 278 "./configparser.y"
{
yygotominor.yy40 = array_init();
}
-#line 1005 "configparser.c"
+#line 1006 "configparser.c"
yy_destructor(8,&yymsp[-1].minor);
yy_destructor(9,&yymsp[0].minor);
break;
case 19:
-#line 280 "./configparser.y"
+#line 281 "./configparser.y"
{
yygotominor.yy40 = yymsp[-1].minor.yy40;
yymsp[-1].minor.yy40 = NULL;
}
-#line 1015 "configparser.c"
+#line 1016 "configparser.c"
yy_destructor(8,&yymsp[-2].minor);
yy_destructor(9,&yymsp[0].minor);
break;
case 20:
-#line 285 "./configparser.y"
+#line 286 "./configparser.y"
{
if (buffer_is_empty(yymsp[0].minor.yy41->key) ||
NULL == array_get_element(yymsp[-2].minor.yy40, yymsp[0].minor.yy41->key->ptr)) {
@@ -1034,37 +1035,37 @@
yygotominor.yy40 = yymsp[-2].minor.yy40;
yymsp[-2].minor.yy40 = NULL;
}
-#line 1037 "configparser.c"
+#line 1038 "configparser.c"
yy_destructor(10,&yymsp[-1].minor);
break;
case 21:
-#line 302 "./configparser.y"
+#line 303 "./configparser.y"
{
yygotominor.yy40 = yymsp[-1].minor.yy40;
yymsp[-1].minor.yy40 = NULL;
}
-#line 1046 "configparser.c"
+#line 1047 "configparser.c"
yy_destructor(10,&yymsp[0].minor);
break;
case 22:
-#line 307 "./configparser.y"
+#line 308 "./configparser.y"
{
yygotominor.yy40 = array_init();
array_insert_unique(yygotominor.yy40, yymsp[0].minor.yy41);
yymsp[0].minor.yy41 = NULL;
}
-#line 1056 "configparser.c"
+#line 1057 "configparser.c"
break;
case 23:
-#line 313 "./configparser.y"
+#line 314 "./configparser.y"
{
yygotominor.yy41 = yymsp[0].minor.yy41;
yymsp[0].minor.yy41 = NULL;
}
-#line 1064 "configparser.c"
+#line 1065 "configparser.c"
break;
case 24:
-#line 317 "./configparser.y"
+#line 318 "./configparser.y"
{
buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
buffer_free(yymsp[-2].minor.yy43);
@@ -1073,7 +1074,7 @@
yygotominor.yy41 = yymsp[0].minor.yy41;
yymsp[0].minor.yy41 = NULL;
}
-#line 1076 "configparser.c"
+#line 1077 "configparser.c"
yy_destructor(11,&yymsp[-1].minor);
break;
case 25:
@@ -1082,18 +1083,18 @@
case 26:
break;
case 27:
-#line 329 "./configparser.y"
+#line 330 "./configparser.y"
{
data_config *dc;
dc = (data_config *)array_get_element(ctx->srv->config_context, "global");
assert(dc);
configparser_push(ctx, dc, 0);
}
-#line 1092 "configparser.c"
+#line 1093 "configparser.c"
yy_destructor(12,&yymsp[0].minor);
break;
case 28:
-#line 336 "./configparser.y"
+#line 337 "./configparser.y"
{
data_config *cur;
@@ -1104,14 +1105,14 @@
yygotominor.yy0 = cur;
}
-#line 1107 "configparser.c"
+#line 1108 "configparser.c"
/* No destructor defined for globalstart */
yy_destructor(13,&yymsp[-2].minor);
/* No destructor defined for metalines */
yy_destructor(14,&yymsp[0].minor);
break;
case 29:
-#line 347 "./configparser.y"
+#line 348 "./configparser.y"
{
assert(yymsp[-3].minor.yy78->context_ndx < yymsp[0].minor.yy78->context_ndx);
yymsp[0].minor.yy78->prev = yymsp[-3].minor.yy78;
@@ -1120,20 +1121,20 @@
yymsp[-3].minor.yy78 = NULL;
yymsp[0].minor.yy78 = NULL;
}
-#line 1123 "configparser.c"
+#line 1124 "configparser.c"
/* No destructor defined for eols */
yy_destructor(15,&yymsp[-1].minor);
break;
case 30:
-#line 356 "./configparser.y"
+#line 357 "./configparser.y"
{
yygotominor.yy78 = yymsp[0].minor.yy78;
yymsp[0].minor.yy78 = NULL;
}
-#line 1133 "configparser.c"
+#line 1134 "configparser.c"
break;
case 31:
-#line 361 "./configparser.y"
+#line 362 "./configparser.y"
{
data_config *cur;
@@ -1144,14 +1145,14 @@
yygotominor.yy78 = cur;
}
-#line 1147 "configparser.c"
+#line 1148 "configparser.c"
/* No destructor defined for context */
yy_destructor(13,&yymsp[-2].minor);
/* No destructor defined for metalines */
yy_destructor(14,&yymsp[0].minor);
break;
case 32:
-#line 372 "./configparser.y"
+#line 373 "./configparser.y"
{
data_config *dc;
buffer *b, *rvalue, *op;
@@ -1287,45 +1288,45 @@
yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
yymsp[0].minor.yy41 = NULL;
}
-#line 1290 "configparser.c"
+#line 1291 "configparser.c"
yy_destructor(16,&yymsp[-6].minor);
yy_destructor(18,&yymsp[-4].minor);
yy_destructor(19,&yymsp[-2].minor);
break;
case 33:
-#line 507 "./configparser.y"
+#line 508 "./configparser.y"
{
yygotominor.yy27 = CONFIG_COND_EQ;
}
-#line 1300 "configparser.c"
+#line 1301 "configparser.c"
yy_destructor(20,&yymsp[0].minor);
break;
case 34:
-#line 510 "./configparser.y"
+#line 511 "./configparser.y"
{
yygotominor.yy27 = CONFIG_COND_MATCH;
}
-#line 1308 "configparser.c"
+#line 1309 "configparser.c"
yy_destructor(21,&yymsp[0].minor);
break;
case 35:
-#line 513 "./configparser.y"
+#line 514 "./configparser.y"
{
yygotominor.yy27 = CONFIG_COND_NE;
}
-#line 1316 "configparser.c"
+#line 1317 "configparser.c"
yy_destructor(22,&yymsp[0].minor);
break;
case 36:
-#line 516 "./configparser.y"
+#line 517 "./configparser.y"
{
yygotominor.yy27 = CONFIG_COND_NOMATCH;
}
-#line 1324 "configparser.c"
+#line 1325 "configparser.c"
yy_destructor(23,&yymsp[0].minor);
break;
case 37:
-#line 520 "./configparser.y"
+#line 521 "./configparser.y"
{
yygotominor.yy43 = NULL;
if (ctx->ok) {
@@ -1342,10 +1343,10 @@
yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
yymsp[0].minor.yy41 = NULL;
}
-#line 1345 "configparser.c"
+#line 1346 "configparser.c"
break;
case 38:
-#line 537 "./configparser.y"
+#line 538 "./configparser.y"
{
if (ctx->ok) {
if (0 != config_parse_file(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
@@ -1355,11 +1356,11 @@
yymsp[0].minor.yy43 = NULL;
}
}
-#line 1358 "configparser.c"
+#line 1359 "configparser.c"
yy_destructor(24,&yymsp[-1].minor);
break;
case 39:
-#line 547 "./configparser.y"
+#line 548 "./configparser.y"
{
if (ctx->ok) {
if (0 != config_parse_cmd(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
@@ -1369,7 +1370,7 @@
yymsp[0].minor.yy43 = NULL;
}
}
-#line 1372 "configparser.c"
+#line 1373 "configparser.c"
yy_destructor(25,&yymsp[-1].minor);
break;
};
@@ -1403,7 +1404,7 @@
ctx->ok = 0;
-#line 1406 "configparser.c"
+#line 1407 "configparser.c"
configparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
}
Modified: lighttpd/trunk/src/configparser.y
===================================================================
--- lighttpd/trunk/src/configparser.y 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/configparser.y 2007-09-11 10:47:39 UTC (rev 276)
@@ -230,6 +230,7 @@
}
value(A) ::= key(B). {
+ A = NULL;
if (strncmp(B->ptr, "env.", sizeof("env.") - 1) == 0) {
char *env;
Modified: lighttpd/trunk/src/connections.c
===================================================================
--- lighttpd/trunk/src/connections.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/connections.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -537,7 +537,10 @@
con->http_status == 204 ||
con->http_status == 304) {
/* no Content-Body, no Content-Length */
- } else if (qlen > 0) {
+ } else if (qlen >= 0) {
+ /* qlen = 0 is important for Redirects (301, ...) as they MAY have
+ * a content. Browsers are waiting for a Content otherwise
+ */
buffer_copy_off_t(srv->tmp_buf, chunkqueue_length(con->write_queue));
response_header_overwrite(srv, con, CONST_STR_LEN("Content-Length"), CONST_BUF_LEN(srv->tmp_buf));
Modified: lighttpd/trunk/src/http_auth.c
===================================================================
--- lighttpd/trunk/src/http_auth.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/http_auth.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -831,19 +831,17 @@
username = buffer_init();
if (!base64_decode(username, realm_str)) {
- buffer_free(username);
-
log_error_write(srv, __FILE__, __LINE__, "sb", "decodeing base64-string failed", username);
+ buffer_free(username);
return 0;
}
/* r2 == user:password */
if (NULL == (pw = strchr(username->ptr, ':'))) {
- buffer_free(username);
-
log_error_write(srv, __FILE__, __LINE__, "sb", ": is missing in", username);
+ buffer_free(username);
return 0;
}
Copied: lighttpd/trunk/src/lighttpd-angel.c (from rev 275, lighttpd/branches/upstream/current/src/lighttpd-angel.c)
===================================================================
--- lighttpd/trunk/src/lighttpd-angel.c (rev 0)
+++ lighttpd/trunk/src/lighttpd-angel.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -0,0 +1,154 @@
+/**
+ * angel process for lighttpd
+ *
+ * the purpose is the run as root all the time and handle:
+ * - restart on crash
+ * - spawn on HUP to allow graceful restart
+ * - ...
+ *
+ * it has to stay safe and small to be trustable
+ */
+
+#include <sys/wait.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <time.h>
+#include <signal.h>
+
+#define BINPATH SBIN_DIR"/lighttpd"
+
+static siginfo_t last_sigterm_info;
+static siginfo_t last_sighup_info;
+
+static volatile sig_atomic_t start_process = 1;
+static volatile sig_atomic_t graceful_restart = 0;
+static volatile pid_t pid = -1;
+
+static void sigaction_handler(int sig, siginfo_t *si, void *context) {
+ int exitcode;
+
+ switch (sig) {
+ case SIGINT:
+ case SIGTERM:
+ memcpy(&last_sigterm_info, si, sizeof(*si));
+
+ /** forward the sig to the child */
+ kill(pid, sig);
+ break;
+ case SIGHUP: /** do a graceful restart */
+ memcpy(&last_sighup_info, si, sizeof(*si));
+
+ /** do a graceful shutdown on the main process and start a new child */
+ kill(pid, SIGINT);
+
+ usleep(5 * 1000); /** wait 5 microsec */
+
+ start_process = 1;
+ break;
+ case SIGCHLD:
+ /** a child died, de-combie it */
+ wait(&exitcode);
+ break;
+ }
+}
+
+int main(int argc, char **argv) {
+ int is_shutdown = 0;
+ struct sigaction act;
+
+ /**
+ * we are running as root BEWARE
+ */
+
+ memset(&act, 0, sizeof(act));
+ act.sa_handler = SIG_IGN;
+ sigaction(SIGPIPE, &act, NULL);
+ sigaction(SIGUSR1, &act, NULL);
+
+ act.sa_sigaction = sigaction_handler;
+ sigemptyset(&act.sa_mask);
+ act.sa_flags = SA_SIGINFO;
+
+ sigaction(SIGINT, &act, NULL);
+ sigaction(SIGTERM, &act, NULL);
+ sigaction(SIGHUP, &act, NULL);
+ sigaction(SIGALRM, &act, NULL);
+ sigaction(SIGCHLD, &act, NULL);
+
+ /* check that the compiled in path has the right user,
+ *
+ * BEWARE: there is a race between the check here and the exec later
+ */
+
+ while (!is_shutdown) {
+ int exitcode = 0;
+
+ if (start_process) {
+ pid = fork();
+
+ if (0 == pid) {
+ /* i'm the child */
+
+ argv[0] = BINPATH;
+
+ execvp(BINPATH, argv);
+
+ exit(1);
+ } else if (-1 == pid) {
+ /** error */
+
+ return -1;
+ }
+
+ /* I'm the angel */
+ start_process = 0;
+ }
+
+ if ((pid_t)-1 == waitpid(pid, &exitcode, 0)) {
+ switch (errno) {
+ case EINTR:
+ /* someone sent a signal ...
+ * do we have to shutdown or restart the process */
+ break;
+ case ECHILD:
+ /**
+ * make sure we are not in a race between the signal handler
+ * and the process restart */
+ if (!start_process) is_shutdown = 1;
+ break;
+ default:
+ break;
+ }
+ } else {
+ /** process went away */
+
+ if (WIFEXITED(exitcode)) {
+ /** normal exit */
+
+ is_shutdown = 1;
+
+ fprintf(stderr, "%s.%d: child (pid=%d) exited normally with exitcode: %d\n",
+ __FILE__, __LINE__,
+ pid,
+ WEXITSTATUS(exitcode));
+
+ } else if (WIFSIGNALED(exitcode)) {
+ /** got a signal */
+
+ fprintf(stderr, "%s.%d: child (pid=%d) exited unexpectedly with signal %d, restarting\n",
+ __FILE__, __LINE__,
+ pid,
+ WTERMSIG(exitcode));
+
+ start_process = 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
Modified: lighttpd/trunk/src/mod_fastcgi.c
===================================================================
--- lighttpd/trunk/src/mod_fastcgi.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/mod_fastcgi.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -49,6 +49,12 @@
#include <sys/wait.h>
#endif
+#define FCGI_ENV_ADD_CHECK(ret, con) \
+ if (ret == -1) { \
+ con->http_status = 400; \
+ con->file_finished = 1; \
+ return -1; \
+ };
/*
*
@@ -1571,6 +1577,21 @@
len += key_len > 127 ? 4 : 1;
len += val_len > 127 ? 4 : 1;
+ if (env->used + len >= FCGI_MAX_LENGTH) {
+ /**
+ * we can't append more headers, ignore it
+ */
+ return -1;
+ }
+
+ /**
+ * field length can be 31bit max
+ *
+ * HINT: this can't happen as FCGI_MAX_LENGTH is only 16bit
+ */
+ if (key_len > 0x7fffffff) key_len = 0x7fffffff;
+ if (val_len > 0x7fffffff) val_len = 0x7fffffff;
+
buffer_prepare_append(env, len);
if (key_len > 127) {
@@ -1600,6 +1621,8 @@
}
static int fcgi_header(FCGI_Header * header, unsigned char type, size_t request_id, int contentLength, unsigned char paddingLength) {
+ assert(contentLength <= FCGI_MAX_LENGTH);
+
header->version = FCGI_VERSION_1;
header->type = type;
header->requestIdB0 = request_id & 0xff;
@@ -1754,7 +1777,7 @@
}
srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
- fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value)),con);
}
}
@@ -1781,7 +1804,7 @@
}
srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
- fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value)), con);
}
}
@@ -1825,10 +1848,10 @@
buffer_prepare_copy(p->fcgi_env, 1024);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_SOFTWARE"), CONST_STR_LEN(PACKAGE_NAME"/"PACKAGE_VERSION));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_SOFTWARE"), CONST_STR_LEN(PACKAGE_NAME"/"PACKAGE_VERSION)),con)
if (con->server_name->used) {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), CONST_BUF_LEN(con->server_name));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), CONST_BUF_LEN(con->server_name)),con)
} else {
#ifdef HAVE_IPV6
s = inet_ntop(srv_sock->addr.plain.sa_family,
@@ -1839,10 +1862,10 @@
#else
s = inet_ntoa(srv_sock->addr.ipv4.sin_addr);
#endif
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), s, strlen(s));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), s, strlen(s)),con)
}
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("GATEWAY_INTERFACE"), CONST_STR_LEN("CGI/1.1"));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("GATEWAY_INTERFACE"), CONST_STR_LEN("CGI/1.1")),con)
LI_ltostr(buf,
#ifdef HAVE_IPV6
@@ -1852,7 +1875,7 @@
#endif
);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf)),con)
/* get the server-side of the connection to the client */
our_addr_len = sizeof(our_addr);
@@ -1862,7 +1885,7 @@
} else {
s = inet_ntop_cache_get_ip(srv, &(our_addr));
}
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_ADDR"), s, strlen(s));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_ADDR"), s, strlen(s)),con)
LI_ltostr(buf,
#ifdef HAVE_IPV6
@@ -1872,10 +1895,10 @@
#endif
);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_PORT"), buf, strlen(buf));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_PORT"), buf, strlen(buf)),con)
s = inet_ntop_cache_get_ip(srv, &(con->dst_addr));
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s)),con)
if (!buffer_is_empty(con->authed_user)) {
/* AUTH_TYPE fix by Troy Kruthoff (tkruthoff at gmail.com)
@@ -1891,7 +1914,7 @@
char *http_authorization = NULL;
data_string *ds;
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_USER"), CONST_BUF_LEN(con->authed_user));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_USER"), CONST_BUF_LEN(con->authed_user)),con)
if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Authorization"))) {
http_authorization = ds->value->ptr;
@@ -1915,7 +1938,7 @@
/* request.content_length < SSIZE_MAX, see request.c */
LI_ltostr(buf, con->request.content_length);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("CONTENT_LENGTH"), buf, strlen(buf));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("CONTENT_LENGTH"), buf, strlen(buf)),con)
}
if (host->mode != FCGI_AUTHORIZER) {
@@ -1926,10 +1949,10 @@
* For AUTHORIZER mode these headers should be omitted.
*/
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path)),con)
if (!buffer_is_empty(con->request.pathinfo)) {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo)),con)
/* PATH_TRANSLATED is only defined if PATH_INFO is set */
@@ -1939,9 +1962,9 @@
buffer_copy_string_buffer(p->path, con->physical.doc_root);
}
buffer_append_string_buffer(p->path, con->request.pathinfo);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_TRANSLATED"), CONST_BUF_LEN(p->path));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_TRANSLATED"), CONST_BUF_LEN(p->path)),con)
} else {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_STR_LEN(""));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_STR_LEN("")),con)
}
}
@@ -1962,8 +1985,8 @@
buffer_copy_string_buffer(p->path, host->docroot);
buffer_append_string_buffer(p->path, con->uri.path);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path));
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(host->docroot));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path)),con)
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(host->docroot)),con)
} else {
buffer_copy_string_buffer(p->path, con->physical.path);
@@ -1975,8 +1998,8 @@
buffer_append_string_buffer(p->path, con->request.pathinfo);
}
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path));
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path)),con)
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root)),con)
}
if (host->strip_request_uri->used > 1) {
@@ -2002,34 +2025,34 @@
con->request.orig_uri->ptr + (host->strip_request_uri->used - 2),
con->request.orig_uri->used - (host->strip_request_uri->used - 2));
} else {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)),con)
}
} else {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)),con)
}
if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri)),con)
}
if (!buffer_is_empty(con->uri.query)) {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query)),con)
} else {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_STR_LEN(""));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_STR_LEN("")),con)
}
s = get_http_method_name(con->request.http_method);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_METHOD"), s, strlen(s));
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_STATUS"), CONST_STR_LEN("200")); /* if php is compiled with --force-redirect */
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_METHOD"), s, strlen(s)),con)
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_STATUS"), CONST_STR_LEN("200")),con) /* if php is compiled with --force-redirect */
s = get_http_version_name(con->request.http_version);
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PROTOCOL"), s, strlen(s));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PROTOCOL"), s, strlen(s)),con)
#ifdef USE_OPENSSL
if (srv_sock->is_ssl) {
- fcgi_env_add(p->fcgi_env, CONST_STR_LEN("HTTPS"), CONST_STR_LEN("on"));
+ FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("HTTPS"), CONST_STR_LEN("on")),con)
}
#endif
- fcgi_env_add_request_headers(srv, con, p);
+ FCGI_ENV_ADD_CHECK(fcgi_env_add_request_headers(srv, con, p), con);
fcgi_header(&(header), FCGI_PARAMS, request_id, p->fcgi_env->used, 0);
buffer_append_memory(b, (const char *)&header, sizeof(header));
@@ -2924,10 +2947,8 @@
}
/* fall through */
- fcgi_create_env(srv, hctx, hctx->request_id);
-
+ if (-1 == fcgi_create_env(srv, hctx, hctx->request_id)) return HANDLER_ERROR;
fcgi_set_state(srv, hctx, FCGI_STATE_WRITE);
-
/* fall through */
case FCGI_STATE_WRITE:
ret = srv->network_backend_write(srv, con, hctx->fd, hctx->wb);
@@ -3109,7 +3130,7 @@
buffer_reset(con->physical.path);
con->mode = DIRECT;
- con->http_status = 503;
+ if (con->http_status != 400) con->http_status = 503;
joblist_append(srv, con); /* really ? */
return HANDLER_FINISHED;
Modified: lighttpd/trunk/src/mod_mysql_vhost.c
===================================================================
--- lighttpd/trunk/src/mod_mysql_vhost.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/mod_mysql_vhost.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -222,7 +222,7 @@
s->mysql_pre = buffer_init();
s->mysql_post = buffer_init();
- if (sel->used && (qmark = index(sel->ptr, '?'))) {
+ if (sel->used && (qmark = strchr(sel->ptr, '?'))) {
*qmark = '\0';
buffer_copy_string(s->mysql_pre, sel->ptr);
buffer_copy_string(s->mysql_post, qmark+1);
Modified: lighttpd/trunk/src/server.c
===================================================================
--- lighttpd/trunk/src/server.c 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/src/server.c 2007-09-11 10:47:39 UTC (rev 276)
@@ -68,6 +68,7 @@
static volatile sig_atomic_t graceful_shutdown = 0;
static volatile sig_atomic_t handle_sig_alarm = 1;
static volatile sig_atomic_t handle_sig_hup = 0;
+static volatile sig_atomic_t forwarded_sig_hup = 0;
#if defined(HAVE_SIGACTION) && defined(SA_SIGINFO)
static volatile siginfo_t last_sigterm_info;
@@ -94,8 +95,19 @@
handle_sig_alarm = 1;
break;
case SIGHUP:
- handle_sig_hup = 1;
- memcpy(&last_sighup_info, si, sizeof(*si));
+ /**
+ * we send the SIGHUP to all procs in the process-group
+ * this includes ourself
+ *
+ * make sure we only send it once and don't create a
+ * infinite loop
+ */
+ if (!forwarded_sig_hup) {
+ handle_sig_hup = 1;
+ memcpy(&last_sighup_info, si, sizeof(*si));
+ } else {
+ forwarded_sig_hup = 0;
+ }
break;
case SIGCHLD:
break;
@@ -775,7 +787,10 @@
setuid(pwd->pw_uid);
}
#endif
-#ifdef HAVE_SYS_PRCTL_H
+#if defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_DUMPABLE)
+ /**
+ * on IRIX 6.5.30 they have prctl() but no DUMPABLE
+ */
if (srv->srvconf.enable_cores) {
prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
}
@@ -985,7 +1000,7 @@
num_childs = srv->srvconf.max_worker;
if (num_childs > 0) {
int child = 0;
- while (!child && !srv_shutdown) {
+ while (!child && !srv_shutdown && !graceful_shutdown) {
if (num_childs > 0) {
switch (fork()) {
case -1:
@@ -1000,14 +1015,61 @@
} else {
int status;
- /* ignore EINTR */
- if (-1 != wait(&status)) num_childs++;
+ if (-1 != wait(&status)) {
+ /**
+ * one of our workers went away
+ */
+ num_childs++;
+ } else {
+ switch (errno) {
+ case EINTR:
+ /**
+ * if we receive a SIGHUP we have to close our logs ourself as we don't
+ * have the mainloop who can help us here
+ */
+ if (handle_sig_hup) {
+ handle_sig_hup = 0;
+
+ log_error_cycle(srv);
+
+ /**
+ * forward to all procs in the process-group
+ *
+ * we also send it ourself
+ */
+ if (!forwarded_sig_hup) {
+ forwarded_sig_hup = 1;
+ kill(0, SIGHUP);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
}
}
- if (srv_shutdown) {
- kill(0, SIGTERM);
+
+ /**
+ * for the parent this is the exit-point
+ */
+ if (!child) {
+ /**
+ * kill all children too
+ */
+ if (graceful_shutdown) {
+ kill(0, SIGINT);
+ } else if (srv_shutdown) {
+ kill(0, SIGTERM);
+ }
+
+ log_error_close(srv);
+ network_close(srv);
+ connections_free(srv);
+ plugins_free(srv);
+ server_free(srv);
+ return 0;
}
- if (!child) return 0;
}
#endif
@@ -1098,9 +1160,9 @@
#ifdef HAVE_SIGACTION
log_error_write(srv, __FILE__, __LINE__, "sdsd",
"logfiles cycled UID =",
- last_sigterm_info.si_uid,
+ last_sighup_info.si_uid,
"PID =",
- last_sigterm_info.si_pid);
+ last_sighup_info.si_pid);
#else
log_error_write(srv, __FILE__, __LINE__, "s",
"logfiles cycled");
Modified: lighttpd/trunk/tests/mod-redirect.t
===================================================================
--- lighttpd/trunk/tests/mod-redirect.t 2007-09-11 10:44:41 UTC (rev 275)
+++ lighttpd/trunk/tests/mod-redirect.t 2007-09-11 10:47:39 UTC (rev 276)
@@ -8,7 +8,7 @@
use strict;
use IO::Socket;
-use Test::More tests => 6;
+use Test::More tests => 7;
use LightyTest;
my $tf = LightyTest->new();
@@ -24,6 +24,14 @@
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/' } ];
ok($tf->handle_http($t) == 0, 'external redirect');
+$t->{REQUEST} = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/', 'Content-Length' => '0' } ];
+ok($tf->handle_http($t) == 0, 'external redirect should have a Content-Length: 0');
+
$t->{REQUEST} = ( <<EOF
GET /redirect/ HTTP/1.0
Host: zzz.example.org
More information about the pkg-lighttpd-maintainers
mailing list