# This is a patch to make lingerd work with Apache and mod_ssl together. # # Installation instructions: # # 1) untar apache, mod_ssl and lingerd # # 2) install mod_ssl, per the instructions in mod_ssl_2.x/INSTALL, # using "the flexible APACI-only way", which copies files over into # apache's source tree, but doesn't compile Apache just yet. # # 3) install lingerd per the instructions in lingerd-0.9x/INSTALL. # when patching the Apache source, use aplinger-ssl.diff (this file) # instead of the regular apache-1.3/aplinger.diff. # diff -urNp -x '*.orig' apache_1.3.42.org/src/main/Makefile.tmpl apache_1.3.42/src/main/Makefile.tmpl --- apache_1.3.42.org/src/main/Makefile.tmpl 2004-11-24 20:10:19.000000000 +0100 +++ apache_1.3.42/src/main/Makefile.tmpl 2023-02-02 22:44:19.209834916 +0100 @@ -5,13 +5,13 @@ INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXT LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS) LIB= libmain.a -HEADERS= test_char.h uri_delims.h +HEADERS= test_char.h uri_delims.h li_config.h OBJS= alloc.o buff.o \ http_config.o http_core.o http_log.o \ http_main.o http_protocol.o http_request.o http_vhost.o \ util.o util_date.o util_script.o util_uri.o util_md5.o \ - rfc1413.o + rfc1413.o ap_lingerd.o .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $< diff -urNp -x '*.orig' apache_1.3.42.org/src/main/http_main.c apache_1.3.42/src/main/http_main.c --- apache_1.3.42.org/src/main/http_main.c 2023-02-02 22:44:18.889834915 +0100 +++ apache_1.3.42/src/main/http_main.c 2023-02-02 22:44:19.213168249 +0100 @@ -60,6 +60,10 @@ int ap_main(int argc, char *argv[]); #include "http_vhost.h" #include "util_script.h" /* to force util_script.c linking */ #include "util_uri.h" +#define IN_APACHE +#include "li_config.h" +void lingerd_connect(void); +int lingerd_sendfd(int); #include "scoreboard.h" #include "multithread.h" #include @@ -1993,6 +1997,19 @@ static void lingering_close(request_rec return; } + /* + * Try to feed the socket to the linger daemon. If it fails and + * we're configured to do so, do a lingering close anyway. + * Otherwise just close the socket; lingerd will linger on its copy + * of it. + */ + + if (lingerd_sendfd(lsd) == 0 || !(LINGER_ON_FAILURE)) { + ap_bclose(r->connection->client); + ap_kill_timeout(r); + return; + } + /* Set up to wait for readable data on socket... */ FD_ZERO(&lfds); @@ -4538,6 +4555,8 @@ static void common_init(void) ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *)); ap_server_config_defines = ap_make_array(pcommands, 1, sizeof(char *)); + lingerd_connect(); + #ifdef EAPI ap_hook_init(); ap_hook_configure("ap::buff::read",