diff options
author | jdolecek <jdolecek@pkgsrc.org> | 2002-06-19 11:03:58 +0000 |
---|---|---|
committer | jdolecek <jdolecek@pkgsrc.org> | 2002-06-19 11:03:58 +0000 |
commit | d94ae5e1919c31cc761afd4d239a4bd06d5941e7 (patch) | |
tree | 52f464f9c89ee0d45167687bee5e070389f6f724 /www | |
parent | 08d20c20ef84ff6b7f31635f1a754d00dd10ea1e (diff) | |
download | pkgsrc-d94ae5e1919c31cc761afd4d239a4bd06d5941e7.tar.gz |
update for now-available mod_ssl-2.8.9-1.3.26
Diffstat (limited to 'www')
-rw-r--r-- | www/ap-ssl/Makefile | 11 | ||||
-rw-r--r-- | www/ap-ssl/distinfo | 6 | ||||
-rw-r--r-- | www/apache/Makefile | 9 | ||||
-rw-r--r-- | www/apache/distinfo | 6 | ||||
-rw-r--r-- | www/apache/files/mod_ssl-2.2.8-1.3.26-eapi.patch | 2011 |
5 files changed, 13 insertions, 2030 deletions
diff --git a/www/ap-ssl/Makefile b/www/ap-ssl/Makefile index 332f1546bbb..3b7de1916c8 100644 --- a/www/ap-ssl/Makefile +++ b/www/ap-ssl/Makefile @@ -1,8 +1,7 @@ -# $NetBSD: Makefile,v 1.50 2002/06/19 10:20:06 jdolecek Exp $ +# $NetBSD: Makefile,v 1.51 2002/06/19 11:03:58 jdolecek Exp $ -DISTNAME= mod_ssl-2.8.8-1.3.24 -PKGREVISION= 1 -PKGNAME= ap-ssl-2.8.8 +DISTNAME= mod_ssl-2.8.9-1.3.26 +PKGNAME= ap-ssl-2.8.9 CATEGORIES= www security MASTER_SITES= http://www.modssl.org/source/ \ ftp://ftp.pca.dfn.de/pub/tools/net/mod_ssl/source/ \ @@ -47,10 +46,6 @@ post-extract: cd ${WRKSRC}/pkg.contrib; ${MV} -f loadcacert.cgi loadcacert.cgi.in cd ${WRKSRC}/pkg.sslsup; ${MV} -f mkcert.sh mkcert.sh.in -# XXX hack - remove once version distributed for 1.3.26 would be avilable -pre-configure: - echo mod_ssl/2.8.8-1.3.26 > ${WRKSRC}/pkg.sslmod/libssl.version - post-build: @${SED} -e "s|^#!/.*|#!${PERL5}|g" \ ${WRKSRC}/pkg.contrib/loadcacert.cgi.in \ diff --git a/www/ap-ssl/distinfo b/www/ap-ssl/distinfo index 6e98181fce7..b7dc8e8b855 100644 --- a/www/ap-ssl/distinfo +++ b/www/ap-ssl/distinfo @@ -1,6 +1,6 @@ -$NetBSD: distinfo,v 1.10 2002/04/02 14:22:23 jlam Exp $ +$NetBSD: distinfo,v 1.11 2002/06/19 11:03:58 jdolecek Exp $ -SHA1 (mod_ssl-2.8.8-1.3.24.tar.gz) = 9d9e7d0b78591a56b3c251a25a47e394719c8e36 -Size (mod_ssl-2.8.8-1.3.24.tar.gz) = 752322 bytes +SHA1 (mod_ssl-2.8.9-1.3.26.tar.gz) = 3075124cce758f06b292baa754d55eab639cdfc9 +Size (mod_ssl-2.8.9-1.3.26.tar.gz) = 752613 bytes SHA1 (patch-aa) = 6b66b8d9e8bd03613376dca3b4e0dad3a2e7ed15 SHA1 (patch-ab) = bd1d4eeff91f87a2b46f1ce0ad95dab8a3c23c84 diff --git a/www/apache/Makefile b/www/apache/Makefile index 0ac23e2985d..ef9cb0b5273 100644 --- a/www/apache/Makefile +++ b/www/apache/Makefile @@ -1,10 +1,11 @@ -# $NetBSD: Makefile,v 1.95 2002/06/19 10:17:58 jdolecek Exp $ +# $NetBSD: Makefile,v 1.96 2002/06/19 11:03:59 jdolecek Exp $ # # This pkg does not compile in mod_ssl, only the `mod_ssl EAPI' (a set of # code hooks that allow mod_ssl to be compiled separately later, if desired). DISTNAME= apache_1.3.26 PKGNAME= apache-1.3.26 +PKGREVISION= 1 CATEGORIES= www MASTER_SITES= http://httpd.apache.org/dist/httpd/ \ http://www.apache.de/dist/httpd/ @@ -16,7 +17,7 @@ NETBSD_LOGO= sitedrivenby.gif SITES_${NETBSD_LOGO}= http://www.netbsd.org/images/logos/ DISTFILES+= ${NETBSD_LOGO} -MODSSL_DISTNAME= mod_ssl-2.8.8-1.3.24 +MODSSL_DISTNAME= mod_ssl-2.8.9-1.3.26 MODSSL_DIST= ${MODSSL_DISTNAME}${EXTRACT_SUFX} MODSSL_SRC= ${WRKDIR}/${MODSSL_DISTNAME} SITES_${MODSSL_DIST}= http://www.modssl.org/source/ @@ -125,12 +126,10 @@ post-extract: ${CP} ${MODSSL_SRC}/pkg.eapi/*.c ${WRKSRC}/src/ap ${CP} ${MODSSL_SRC}/pkg.eapi/*.h ${WRKSRC}/src/include -# XXX one mod_ssl-2.2.801.3.26 would be available, use their own patch -# and g/c files/mod_ssl-2.2.8-1.3.26-eapi.patch pre-patch: cd ${WRKSRC} && ${CAT} \ ${MODSSL_SRC}/pkg.addon/addon.patch \ - ${FILESDIR}/mod_ssl-2.2.8-1.3.26-eapi.patch \ + ${MODSSL_SRC}/pkg.eapi/eapi.patch \ ${MODSSL_SRC}/pkg.sslcfg/sslcfg.patch \ ${MODSSL_SRC}/pkg.sslmod/sslmod.patch \ ${MODSSL_SRC}/pkg.sslsup/sslsup.patch \ diff --git a/www/apache/distinfo b/www/apache/distinfo index db82cdb12b6..c9fc8fdf165 100644 --- a/www/apache/distinfo +++ b/www/apache/distinfo @@ -1,11 +1,11 @@ -$NetBSD: distinfo,v 1.18 2002/06/19 10:31:01 jdolecek Exp $ +$NetBSD: distinfo,v 1.19 2002/06/19 11:03:59 jdolecek Exp $ SHA1 (apache_1.3.26.tar.gz) = c8ab59541267c3e570592115b280e6cb2fb2b30f Size (apache_1.3.26.tar.gz) = 2303147 bytes SHA1 (sitedrivenby.gif) = 7671e9a8ec2cad3961b268befd33c0920e07c658 Size (sitedrivenby.gif) = 8519 bytes -SHA1 (mod_ssl-2.8.8-1.3.24.tar.gz) = 9d9e7d0b78591a56b3c251a25a47e394719c8e36 -Size (mod_ssl-2.8.8-1.3.24.tar.gz) = 752322 bytes +SHA1 (mod_ssl-2.8.9-1.3.26.tar.gz) = 3075124cce758f06b292baa754d55eab639cdfc9 +Size (mod_ssl-2.8.9-1.3.26.tar.gz) = 752613 bytes SHA1 (patch-aa) = 9ebfc626364271a60a4db4b1b0c28c92060a9f35 SHA1 (patch-ab) = 71ea1f3a59e0f7bc37175b0eefd462a1f7ca4fb6 SHA1 (patch-ac) = 12347c7a306d3e898b032c2b4b3b01670b62d4fd diff --git a/www/apache/files/mod_ssl-2.2.8-1.3.26-eapi.patch b/www/apache/files/mod_ssl-2.2.8-1.3.26-eapi.patch deleted file mode 100644 index 5b1841d6bfa..00000000000 --- a/www/apache/files/mod_ssl-2.2.8-1.3.26-eapi.patch +++ /dev/null @@ -1,2011 +0,0 @@ -# $NetBSD: mod_ssl-2.2.8-1.3.26-eapi.patch,v 1.1 2002/06/19 10:18:00 jdolecek Exp $ - -## _____ _ ____ ___ -## | ____| / \ | _ \_ _| -## | _| / _ \ | |_) | | -## | |__ / ___ \| __/| | -## |____/_/ \_\_| |___| Extended API for Apache -## ____________________________________________________________________________ -## -## Annotated patch file: eapi.patch -## Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved. -## Created on: 27-Mar-2002 -## -## This file assembles changes to existing Apache source files -## between the original Apache and the patched variant. It can be -## automatically applied to a vanilla Apache source tree with the -## 'patch' tool to upgrade those files. Each patch snippet is -## annotated with a short description. -## -## This file contains all patches to the Apache source -## tree which add the Extended API (EAPI) support. -## - -+--------------------------------------------------------------------------- -| Add the EAPI and EAPI_MM configuration entries which triggers the EAPI -| patches and configured the shared memory support via the MM library. -+--------------------------------------------------------------------------- -Index: src/Configuration.tmpl ---- src/Configuration.tmpl 28 Jan 2002 19:21:21 -0000 1.1.1.7 -+++ src/Configuration.tmpl 28 Jan 2002 19:40:56 -0000 1.23 -@@ -68,6 +105,24 @@ - #TARGET= - - ################################################################ -+# Extended API (EAPI) support: -+# -+# EAPI: -+# The EAPI rule enables more module hooks, a generic low-level hook -+# mechanism, a generic context mechanism and shared memory based pools. -+# -+# EAPI_MM: -+# Set the EAPI_MM variable to either the directory of a MM Shared Memory -+# Library source tree or the installation tree of MM. Alternatively you can -+# also use the value 'SYSTEM' which then indicates that MM is installed -+# under various system locations. When the MM library files cannot be found -+# the EAPI still can be built, but without shared memory pool support, of -+# course. -+ -+Rule EAPI=no -+#EAPI_MM=SYSTEM -+ -+################################################################ - # Dynamic Shared Object (DSO) support - # - # There is experimental support for compiling the Apache core and - -+--------------------------------------------------------------------------- -| Patch in implementation of the EAPI rule. -+--------------------------------------------------------------------------- -Index: src/Configure ---- src/Configure 27 Mar 2002 15:22:54 -0000 1.1.1.18 -+++ src/Configure 27 Mar 2002 15:30:02 -0000 1.21 -@@ -1866,6 +1866,72 @@ - fi - - #################################################################### -+## Extended API (EAPI) support: -+## -+if [ "x$RULE_EAPI" = "x" ]; then -+ RULE_EAPI=`./helpers/CutRule EAPI $file` -+fi -+if [ "x$RULE_EAPI" = "xyes" ]; then -+ echo " + enabling Extended API (EAPI)" -+ CFLAGS="$CFLAGS -DEAPI" -+ # some vendor compilers are too restrictive -+ # for our ap_hook and ap_ctx sources. -+ case "$OS:$CC" in -+ *IRIX-32*:*/cc|*IRIX-32*:cc ) -+ CFLAGS="$CFLAGS -woff 1048,1110,1164" -+ ;; -+ esac -+ # MM Shared Memory Library support for EAPI -+ if [ "x$EAPI_MM" = "x" ]; then -+ EAPI_MM=`egrep '^EAPI_MM=' $file | sed -n -e '$p' | awk -F= '{print $2}'` -+ fi -+ if [ "x$EAPI_MM" != "x" ]; then -+ case $EAPI_MM in -+ SYSTEM|/* ) ;; -+ * ) for p in . .. ../..; do -+ if [ -d "$p/$EAPI_MM" ]; then -+ EAPI_MM="`echo $p/$EAPI_MM | sed -e 's;/\./;/;g'`" -+ break -+ fi -+ done -+ ;; -+ esac -+ if [ "x$EAPI_MM" = "xSYSTEM" ]; then -+ echo " using MM library for EAPI: (system-wide)" -+ CFLAGS="$CFLAGS -DEAPI_MM" -+ __INCLUDES="`mm-config --cflags`" -+ if [ "x$__INCLUDES" != "x-I/usr/include" ]; then -+ INCLUDES="$INCLUDES $__INCLUDES" -+ fi -+ LDFLAGS="$LDFLAGS `mm-config --ldflags`" -+ LIBS="$LIBS `mm-config --libs`" -+ else -+ if [ -f "$EAPI_MM/.libs/libmm.a" -a -f "$EAPI_MM/mm.h" ]; then -+ echo " using MM library: $EAPI_MM (source-tree only)" -+ case $EAPI_MM in -+ /* ) ;; -+ * ) EAPI_MM="\$(SRCDIR)/$EAPI_MM" ;; -+ esac -+ CFLAGS="$CFLAGS -DEAPI_MM" -+ INCLUDES="$INCLUDES -I$EAPI_MM" -+ LDFLAGS="$LDFLAGS -L$EAPI_MM/.libs" -+ LIBS="$LIBS -lmm" -+ elif [ -f "$EAPI_MM/bin/mm-config" ]; then -+ echo " using MM library: $EAPI_MM (installed)" -+ CFLAGS="$CFLAGS -DEAPI_MM" -+ INCLUDES="$INCLUDES `$EAPI_MM/bin/mm-config --cflags`" -+ LDFLAGS="$LDFLAGS `$EAPI_MM/bin/mm-config --ldflags`" -+ LIBS="$LIBS `$EAPI_MM/bin/mm-config --libs`" -+ else -+ echo "Configure:Error: Cannot find MM library under $EAPI_MM" 1>&2 -+ exit 1 -+ fi -+ fi -+ fi -+fi -+ -+ -+#################################################################### - ## Add in the Expat library if needed/wanted. - ## - - -+--------------------------------------------------------------------------- -| Add the build support for the ap_hook.c and ap_ctx.c sources (Unix) -+--------------------------------------------------------------------------- ---- src/ap/Makefile.tmpl.orig Tue Jun 18 02:34:35 2002 -+++ src/ap/Makefile.tmpl Wed Jun 19 11:22:54 2002 -@@ -7,7 +7,8 @@ LIB=libap.a - - OBJS=ap_cpystrn.o ap_execve.o ap_fnmatch.o ap_getpass.o ap_md5c.o ap_signal.o \ - ap_slack.o ap_snprintf.o ap_sha1.o ap_checkpass.o ap_base64.o ap_ebcdic.o \ -- ap_strtol.o -+ ap_strtol.o \ -+ ap_hook.o ap_ctx.o ap_mm.o - - .c.o: - $(CC) -c $(INCLUDES) $(CFLAGS) $< -+--------------------------------------------------------------------------- -| Add the build support for the ap_hook.c and ap_ctx.c sources (Win32) -+--------------------------------------------------------------------------- -Index: src/ap/ap.mak ---- src/ap/ap.mak 16 Oct 2001 11:47:06 -0000 1.1.1.9 -+++ src/ap/ap.mak 16 Oct 2001 11:57:38 -0000 1.9 -@@ -50,6 +50,9 @@ - -@erase "$(INTDIR)\ap_cpystrn.obj" - -@erase "$(INTDIR)\ap_fnmatch.obj" - -@erase "$(INTDIR)\ap_md5c.obj" -+ -@erase "$(INTDIR)\ap_hook.obj" -+ -@erase "$(INTDIR)\ap_ctx.obj" -+ -@erase "$(INTDIR)\ap_mm.obj" - -@erase "$(INTDIR)\ap_sha1.obj" - -@erase "$(INTDIR)\ap_signal.obj" - -@erase "$(INTDIR)\ap_slack.obj" -@@ -108,6 +111,9 @@ - "$(INTDIR)\ap_cpystrn.obj" \ - "$(INTDIR)\ap_fnmatch.obj" \ - "$(INTDIR)\ap_md5c.obj" \ -+ "$(INTDIR)\ap_hook.obj" \ -+ "$(INTDIR)\ap_ctx.obj" \ -+ "$(INTDIR)\ap_mm.obj" \ - "$(INTDIR)\ap_sha1.obj" \ - "$(INTDIR)\ap_signal.obj" \ - "$(INTDIR)\ap_slack.obj" \ -@@ -144,6 +150,9 @@ - -@erase "$(INTDIR)\ap_cpystrn.obj" - -@erase "$(INTDIR)\ap_fnmatch.obj" - -@erase "$(INTDIR)\ap_md5c.obj" -+ -@erase "$(INTDIR)\ap_hook.obj" -+ -@erase "$(INTDIR)\ap_ctx.obj" -+ -@erase "$(INTDIR)\ap_mm.obj" - -@erase "$(INTDIR)\ap_sha1.obj" - -@erase "$(INTDIR)\ap_signal.obj" - -@erase "$(INTDIR)\ap_slack.obj" -@@ -202,6 +211,9 @@ - "$(INTDIR)\ap_cpystrn.obj" \ - "$(INTDIR)\ap_fnmatch.obj" \ - "$(INTDIR)\ap_md5c.obj" \ -+ "$(INTDIR)\ap_hook.obj" \ -+ "$(INTDIR)\ap_ctx.obj" \ -+ "$(INTDIR)\ap_mm.obj" \ - "$(INTDIR)\ap_sha1.obj" \ - "$(INTDIR)\ap_signal.obj" \ - "$(INTDIR)\ap_slack.obj" \ - -+--------------------------------------------------------------------------- -| Replace the MODULE_MAGIC_COOKIE to allow us to distinguish between -| EAPI-aware modules and standard modules. -+--------------------------------------------------------------------------- -Index: src/include/ap_mmn.h ---- src/include/ap_mmn.h 27 Mar 2002 15:22:57 -0000 1.1.1.10 -+++ src/include/ap_mmn.h 27 Mar 2002 15:30:02 -0000 1.10 -@@ -237,7 +237,23 @@ - * structure - */ - -+/* -+ * Under Extended API situations we replace the magic cookie "AP13" with -+ * "EAPI" to let us distinguish between the EAPI module structure (which -+ * contain additional pointers at the end) and standard module structures -+ * (which lack at least NULL's for the pointers at the end). This is -+ * important because standard ("AP13") modules would dump core when we -+ * dispatch over the additional hooks because NULL's are missing at the end of -+ * the module structure. See also the code in mod_so for details on loading -+ * (we accept both "AP13" and "EAPI"). -+ */ -+#ifdef EAPI -+#define MODULE_MAGIC_COOKIE_AP13 0x41503133UL /* "AP13" */ -+#define MODULE_MAGIC_COOKIE_EAPI 0x45415049UL /* "EAPI" */ -+#define MODULE_MAGIC_COOKIE MODULE_MAGIC_COOKIE_EAPI -+#else - #define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */ -+#endif - - #ifndef MODULE_MAGIC_NUMBER_MAJOR - #define MODULE_MAGIC_NUMBER_MAJOR 19990320 - -+--------------------------------------------------------------------------- -| Add the additional prototypes and defines for the -| shared memory pools. -+--------------------------------------------------------------------------- -Index: src/include/ap_alloc.h ---- src/include/ap_alloc.h 27 Mar 2002 15:22:56 -0000 1.1.1.5 -+++ src/include/ap_alloc.h 27 Mar 2002 15:30:02 -0000 1.6 -@@ -95,6 +95,15 @@ - API_EXPORT(pool *) ap_init_alloc(void); /* Set up everything */ - void ap_cleanup_alloc(void); - API_EXPORT(pool *) ap_make_sub_pool(pool *); /* All pools are subpools of permanent_pool */ -+#if defined(EAPI) -+typedef enum { AP_POOL_RD, AP_POOL_RW } ap_pool_lock_mode; -+int ap_shared_pool_possible(void); -+void ap_init_alloc_shared(int); -+void ap_kill_alloc_shared(void); -+API_EXPORT(pool *) ap_make_shared_sub_pool(pool *); -+API_EXPORT(int) ap_acquire_pool(pool *, ap_pool_lock_mode); -+API_EXPORT(int) ap_release_pool(pool *); -+#endif - API_EXPORT(void) ap_destroy_pool(pool *); - - /* pools have nested lifetimes -- sub_pools are destroyed when the - -+--------------------------------------------------------------------------- -| Add the additional context variable `ctx' for BUFF structures. -+--------------------------------------------------------------------------- -Index: src/include/buff.h ---- src/include/buff.h 27 Mar 2002 15:22:57 -0000 1.1.1.6 -+++ src/include/buff.h 27 Mar 2002 15:30:02 -0000 1.10 -@@ -125,6 +125,10 @@ - /* transport handle, for RPC binding handle or some such */ - void *t_handle; - -+#ifdef EAPI -+ ap_ctx *ctx; -+#endif /* EAPI */ -+ - #ifdef B_SFIO - Sfio_t *sf_in; - Sfio_t *sf_out; -@@ -180,6 +184,10 @@ - /* Internal routines */ - API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb); - API_EXPORT(int) ap_bfilbuf(BUFF *fb); -+ -+#ifdef EAPI -+#define ap_bpeekc(fb) ( ((fb)->incnt == 0) ? EOF : *((fb)->inptr) ) -+#endif - - #ifndef CHARSET_EBCDIC - - -+--------------------------------------------------------------------------- -| Add the four additional Apache API module hooks. -+--------------------------------------------------------------------------- -Index: src/include/http_config.h ---- src/include/http_config.h 27 Mar 2002 15:22:57 -0000 1.1.1.10 -+++ src/include/http_config.h 27 Mar 2002 15:30:02 -0000 1.12 -@@ -276,6 +276,65 @@ - void (*child_exit) (server_rec *, pool *); - #endif - int (*post_read_request) (request_rec *); -+ -+#ifdef EAPI -+ /* -+ * ANSI C guarantees us that we can at least _extend_ the module structure -+ * with additional hooks without the need to change all existing modules. -+ * Because: ``If there are fewer initializers in the list than members of -+ * the structure, the trailing members are initialized with 0.'' (The C -+ * Programming Language, 2nd Ed., A8.7 Initialization). So we just -+ * have to put our additional hooks here: -+ * -+ * add_module: -+ * Called from within ap_add_module() right after the module structure -+ * was linked into the Apache internal module list. It is mainly -+ * intended to be used to define configuration defines (<IfDefine>) -+ * which have to be available directly after a LoadModule/AddModule. -+ * Actually this is the earliest possible hook a module can use. -+ * -+ * remove_module: -+ * Called from within ap_remove_module() right before the module -+ * structure is kicked out from the Apache internal module list. -+ * Actually this is last possible hook a module can use and exists for -+ * consistency with the add_module hook. -+ * -+ * rewrite_command: -+ * Called right after a configuration directive line was read and -+ * before it is processed. It is mainly intended to be used for -+ * rewriting directives in order to provide backward compatibility to -+ * old directive variants. -+ * -+ * new_connection: -+ * Called from within the internal new_connection() function, right -+ * after the conn_rec structure for the new established connection was -+ * created and before Apache starts processing the request with -+ * ap_read_request(). It is mainly intended to be used to setup/run -+ * connection dependent things like sending start headers for -+ * on-the-fly compression, etc. -+ * -+ * close_connection: -+ * Called from within the Apache dispatching loop just before any -+ * ap_bclose() is performed on the socket connection, but a long time -+ * before any pool cleanups are done for the connection (which can be -+ * too late for some applications). It is mainly intended to be used -+ * to close/finalize connection dependent things like sending end -+ * headers for on-the-fly compression, etc. -+ */ -+#ifdef ULTRIX_BRAIN_DEATH -+ void (*add_module) (); -+ void (*remove_module) (); -+ char *(*rewrite_command) (); -+ void (*new_connection) (); -+ void (*close_connection) (); -+#else -+ void (*add_module) (struct module_struct *); -+ void (*remove_module) (struct module_struct *); -+ char *(*rewrite_command) (cmd_parms *, void *config, const char *); -+ void (*new_connection) (conn_rec *); -+ void (*close_connection) (conn_rec *); -+#endif -+#endif /* EAPI */ - } module; - - /* Initializer for the first few module slots, which are only - -+--------------------------------------------------------------------------- -| Add the additional variable `ap_global_ctx' for holding -| global module context. -+--------------------------------------------------------------------------- -Index: src/include/http_conf_globals.h ---- src/include/http_conf_globals.h 27 Mar 2002 15:22:57 -0000 1.1.1.11 -+++ src/include/http_conf_globals.h 27 Mar 2002 15:30:02 -0000 1.12 -@@ -95,6 +95,9 @@ - #endif - extern int ap_dump_settings; - extern API_VAR_EXPORT int ap_extended_status; -+#ifdef EAPI -+extern API_VAR_EXPORT ap_ctx *ap_global_ctx; -+#endif /* EAPI */ - - extern API_VAR_EXPORT char *ap_pid_fname; - extern API_VAR_EXPORT char *ap_scoreboard_fname; - -+--------------------------------------------------------------------------- -| Export the ap_set_callback_and_alarm() function because this -| first is a useful thing and second we need it because all -| other API/timeout functions deal with a request_rec while -| some modules need a generic timeout mechanism. -+--------------------------------------------------------------------------- -Index: src/include/http_main.h - -+--------------------------------------------------------------------------- -| First add support for the HTTPS protocol scheme via hooks, -| second add the additional context variable `ctx' for the -| conn_rec, server_rec and request_rec structures. And third -| add a prototype for the additional ap_add_config_define() -| function. -+--------------------------------------------------------------------------- -Index: src/include/httpd.h ---- src/include/httpd.h 27 Mar 2002 15:22:59 -0000 1.1.1.18 -+++ src/include/httpd.h 27 Mar 2002 15:30:02 -0000 1.28 -@@ -70,7 +70,19 @@ - /* Headers in which EVERYONE has an interest... */ - - #include "ap_config.h" -+#ifdef EAPI -+#include "ap_mm.h" -+#endif - #include "ap_alloc.h" -+/* -+ * Include the Extended API headers. -+ * Don't move the position. It has to be after ap_alloc.h because it uses the -+ * pool stuff but before buff.h because the buffer stuff uses the EAPI, too. -+ */ -+#ifdef EAPI -+#include "ap_hook.h" -+#include "ap_ctx.h" -+#endif /* EAPI */ - #include "buff.h" - #include "ap.h" - -@@ -141,12 +153,17 @@ - #define DEFAULT_HTTP_PORT 80 - #define DEFAULT_HTTPS_PORT 443 - #define ap_is_default_port(port,r) ((port) == ap_default_port(r)) -+#ifdef EAPI -+#define ap_http_method(r) (((r)->ctx != NULL && ap_ctx_get((r)->ctx, "ap::http::method") != NULL) ? ((char *)ap_ctx_get((r)->ctx, "ap::http::method")) : "http") -+#define ap_default_port(r) (((r)->ctx != NULL && ap_ctx_get((r)->ctx, "ap::default::port") != NULL) ? atoi((char *)ap_ctx_get((r)->ctx, "ap::default::port")) : DEFAULT_HTTP_PORT) -+#else /* EAPI */ - #ifdef NETWARE - #define ap_http_method(r) ap_os_http_method(r) - #else - #define ap_http_method(r) "http" - #endif - #define ap_default_port(r) DEFAULT_HTTP_PORT -+#endif /* EAPI */ - - /* --------- Default user name and group name running standalone ---------- */ - /* --- These may be specified as numbers by placing a # before a number --- */ -@@ -360,6 +377,19 @@ - #define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 - #endif - -+/* -+ * Unix only: -+ * Path to Shared Memory Files -+ */ -+#ifdef EAPI -+#ifndef EAPI_MM_CORE_PATH -+#define EAPI_MM_CORE_PATH "logs/mm" -+#endif -+#ifndef EAPI_MM_CORE_MAXSIZE -+#define EAPI_MM_CORE_MAXSIZE 1024*1024*1 /* max. 1MB */ -+#endif -+#endif -+ - /* Number of requests to try to handle in a single process. If <= 0, - * the children don't die off. That's the default here, since I'm still - * interested in finding and stanching leaks. -@@ -452,6 +482,9 @@ - API_EXPORT(const char *) ap_get_server_version(void); - API_EXPORT(void) ap_add_version_component(const char *component); - API_EXPORT(const char *) ap_get_server_built(void); -+#ifdef EAPI -+API_EXPORT(void) ap_add_config_define(const char *define); -+#endif /* EAPI */ - - /* Numeric release version identifier: MMNNFFRBB: major minor fix final beta - * Always increases along the same track as the source branch. -@@ -855,6 +888,10 @@ - * record to improve 64bit alignment the next time we need to break - * binary compatibility for some other reason. - */ -+ -+#ifdef EAPI -+ ap_ctx *ctx; -+#endif /* EAPI */ - }; - - -@@ -903,6 +940,9 @@ - char *local_host; /* used for ap_get_server_name when - * UseCanonicalName is set to DNS - * (ignores setting of HostnameLookups) */ -+#ifdef EAPI -+ ap_ctx *ctx; -+#endif /* EAPI */ - }; - - /* Per-vhost config... */ -@@ -975,6 +1015,10 @@ - int limit_req_line; /* limit on size of the HTTP request line */ - int limit_req_fieldsize; /* limit on size of any request header field */ - int limit_req_fields; /* limit on number of request header fields */ -+ -+#ifdef EAPI -+ ap_ctx *ctx; -+#endif /* EAPI */ - }; - - /* These are more like real hosts than virtual hosts */ - -+--------------------------------------------------------------------------- -| Patch the shared memory pool support into the Apache pool facility. -+--------------------------------------------------------------------------- -Index: src/main/alloc.c ---- src/main/alloc.c 27 Mar 2002 15:23:00 -0000 1.1.1.12 -+++ src/main/alloc.c 27 Mar 2002 15:30:02 -0000 1.19 -@@ -64,6 +64,10 @@ - */ - - #include "httpd.h" -+#ifdef EAPI -+#include "http_config.h" -+#include "http_conf_globals.h" -+#endif - #include "multithread.h" - #include "http_log.h" - -@@ -138,6 +142,10 @@ - #define BLOCK_MINALLOC 0 - #endif - -+#if defined(EAPI) && defined(EAPI_MM) -+static AP_MM *mm = NULL; -+#endif -+ - /***************************************************************** - * - * Managing free storage blocks... -@@ -166,6 +174,9 @@ - char *endp; - union block_hdr *next; - char *first_avail; -+#if defined(EAPI) && defined(EAPI_MM) -+ int is_shm; -+#endif - #ifdef POOL_DEBUG - union block_hdr *global_next; - struct pool *owning_pool; -@@ -216,7 +227,11 @@ - /* Get a completely new block from the system pool. Note that we rely on - malloc() to provide aligned memory. */ - -+#if defined(EAPI) && defined(EAPI_MM) -+static union block_hdr *malloc_block(int size, int is_shm) -+#else - static union block_hdr *malloc_block(int size) -+#endif - { - union block_hdr *blok; - -@@ -230,12 +245,20 @@ - ++num_malloc_calls; - num_malloc_bytes += size + sizeof(union block_hdr); - #endif -+#if defined(EAPI) && defined(EAPI_MM) -+ if (is_shm) -+ blok = (union block_hdr *)ap_mm_malloc(mm, size + sizeof(union block_hdr)); -+ else -+#endif - blok = (union block_hdr *) malloc(size + sizeof(union block_hdr)); - if (blok == NULL) { - fprintf(stderr, "Ouch! malloc failed in malloc_block()\n"); - exit(1); - } - debug_fill(blok, size + sizeof(union block_hdr)); -+#if defined(EAPI) && defined(EAPI_MM) -+ blok->h.is_shm = is_shm; -+#endif - blok->h.next = NULL; - blok->h.first_avail = (char *) (blok + 1); - blok->h.endp = size + blok->h.first_avail; -@@ -296,6 +319,10 @@ - if (blok == NULL) - return; /* Sanity check --- freeing empty pool? */ - -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - old_free_list = block_freelist; - block_freelist = blok; -@@ -342,6 +369,10 @@ - #endif - - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - #endif - } - -@@ -350,7 +381,11 @@ - * if necessary. Must be called with alarms blocked. - */ - -+#if defined(EAPI) && defined(EAPI_MM) -+static union block_hdr *new_block(int min_size, int is_shm) -+#else - static union block_hdr *new_block(int min_size) -+#endif - { - union block_hdr **lastptr = &block_freelist; - union block_hdr *blok = block_freelist; -@@ -360,7 +395,12 @@ - */ - - while (blok != NULL) { -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm == is_shm && -+ min_size + BLOCK_MINFREE <= blok->h.endp - blok->h.first_avail) { -+#else - if (min_size + BLOCK_MINFREE <= blok->h.endp - blok->h.first_avail) { -+#endif - *lastptr = blok->h.next; - blok->h.next = NULL; - debug_verify_filled(blok->h.first_avail, blok->h.endp, -@@ -376,7 +416,11 @@ - /* Nope. */ - - min_size += BLOCK_MINFREE; -+#if defined(EAPI) && defined(EAPI_MM) -+ blok = malloc_block((min_size > BLOCK_MINALLOC) ? min_size : BLOCK_MINALLOC, is_shm); -+#else - blok = malloc_block((min_size > BLOCK_MINALLOC) ? min_size : BLOCK_MINALLOC); -+#endif - return blok; - } - -@@ -426,6 +470,9 @@ - #ifdef POOL_DEBUG - struct pool *joined; - #endif -+#if defined(EAPI) && defined(EAPI_MM) -+ int is_shm; -+#endif - }; - - static pool *permanent_pool; -@@ -440,16 +487,28 @@ - #define POOL_HDR_CLICKS (1 + ((sizeof(struct pool) - 1) / CLICK_SZ)) - #define POOL_HDR_BYTES (POOL_HDR_CLICKS * CLICK_SZ) - -+#if defined(EAPI) && defined(EAPI_MM) -+static struct pool *make_sub_pool_internal(struct pool *p, int is_shm) -+#else - API_EXPORT(struct pool *) ap_make_sub_pool(struct pool *p) -+#endif - { - union block_hdr *blok; - pool *new_pool; - - ap_block_alarms(); - -+#if defined(EAPI) && defined(EAPI_MM) -+ if (is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - -+#if defined(EAPI) && defined(EAPI_MM) -+ blok = new_block(POOL_HDR_BYTES, is_shm); -+#else - blok = new_block(POOL_HDR_BYTES); -+#endif - new_pool = (pool *) blok->h.first_avail; - blok->h.first_avail += POOL_HDR_BYTES; - #ifdef POOL_DEBUG -@@ -468,12 +527,38 @@ - p->sub_pools = new_pool; - } - -+#if defined(EAPI) && defined(EAPI_MM) -+ new_pool->is_shm = is_shm; -+#endif -+ - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - ap_unblock_alarms(); - - return new_pool; - } - -+#if defined(EAPI) -+#if defined(EAPI_MM) -+API_EXPORT(struct pool *) ap_make_sub_pool(struct pool *p) -+{ -+ return make_sub_pool_internal(p, 0); -+} -+API_EXPORT(struct pool *) ap_make_shared_sub_pool(struct pool *p) -+{ -+ return make_sub_pool_internal(p, 1); -+} -+#else -+API_EXPORT(struct pool *) ap_make_shared_sub_pool(struct pool *p) -+{ -+ return NULL; -+} -+#endif -+#endif -+ - #ifdef POOL_DEBUG - static void stack_var_init(char *s) - { -@@ -488,6 +573,13 @@ - } - #endif - -+#if defined(EAPI) -+int ap_shared_pool_possible(void) -+{ -+ return ap_mm_useable(); -+} -+#endif -+ - #ifdef ALLOC_STATS - static void dump_stats(void) - { -@@ -520,6 +612,58 @@ - return permanent_pool; - } - -+#if defined(EAPI) -+void ap_init_alloc_shared(int early) -+{ -+#if defined(EAPI_MM) -+ int mm_size; -+ char *mm_path; -+ char *err1, *err2; -+ -+ if (early) { -+ /* process very early on startup */ -+ mm_size = ap_mm_maxsize(); -+ if (mm_size > EAPI_MM_CORE_MAXSIZE) -+ mm_size = EAPI_MM_CORE_MAXSIZE; -+ mm_path = ap_server_root_relative(permanent_pool, -+ ap_psprintf(permanent_pool, "%s.%ld", -+ EAPI_MM_CORE_PATH, (long)getpid())); -+ if ((mm = ap_mm_create(mm_size, mm_path)) == NULL) { -+ fprintf(stderr, "Ouch! ap_mm_create(%d, \"%s\") failed\n", mm_size, mm_path); -+ err1 = ap_mm_error(); -+ if (err1 == NULL) -+ err1 = "-unknown-"; -+ err2 = strerror(errno); -+ if (err2 == NULL) -+ err2 = "-unknown-"; -+ fprintf(stderr, "Error: MM: %s: OS: %s\n", err1, err2); -+ exit(1); -+ } -+ } -+ else { -+ /* process a lot later on startup */ -+#ifdef WIN32 -+ ap_mm_permission(mm, (_S_IREAD|_S_IWRITE), ap_user_id, -1); -+#else -+ ap_mm_permission(mm, (S_IRUSR|S_IWUSR), ap_user_id, -1); -+#endif -+ } -+#endif /* EAPI_MM */ -+ return; -+} -+ -+void ap_kill_alloc_shared(void) -+{ -+#if defined(EAPI_MM) -+ if (mm != NULL) { -+ ap_mm_destroy(mm); -+ mm = NULL; -+ } -+#endif /* EAPI_MM */ -+ return; -+} -+#endif /* EAPI */ -+ - void ap_cleanup_alloc(void) - { - ap_destroy_mutex(alloc_mutex); -@@ -530,10 +674,18 @@ - { - ap_block_alarms(); - -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - while (a->sub_pools) - ap_destroy_pool(a->sub_pools); - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - /* Don't hold the mutex during cleanups. */ - run_cleanups(a->cleanups); - a->cleanups = NULL; -@@ -567,6 +719,10 @@ - ap_block_alarms(); - ap_clear_pool(a); - -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - if (a->parent) { - if (a->parent->sub_pools == a) -@@ -577,6 +733,10 @@ - a->sub_next->sub_prev = a->sub_prev; - } - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - - free_blocks(a->first); - ap_unblock_alarms(); -@@ -591,6 +751,30 @@ - return bytes_in_block_list(block_freelist); - } - -+#if defined(EAPI) -+API_EXPORT(int) ap_acquire_pool(pool *p, ap_pool_lock_mode mode) -+{ -+#if defined(EAPI_MM) -+ if (!p->is_shm) -+ return 1; -+ return ap_mm_lock(mm, mode == AP_POOL_RD ? AP_MM_LOCK_RD : AP_MM_LOCK_RW); -+#else -+ return 1; -+#endif -+} -+ -+API_EXPORT(int) ap_release_pool(pool *p) -+{ -+#if defined(EAPI_MM) -+ if (!p->is_shm) -+ return 1; -+ return ap_mm_unlock(mm); -+#else -+ return 1; -+#endif -+} -+#endif /* EAPI */ -+ - /***************************************************************** - * POOL_DEBUG support - */ -@@ -756,16 +940,31 @@ - - ap_block_alarms(); - -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - -+#if defined(EAPI) && defined(EAPI_MM) -+ blok = new_block(size, a->is_shm); -+#else - blok = new_block(size); -+#endif - a->last->h.next = blok; - a->last = blok; - #ifdef POOL_DEBUG - blok->h.owning_pool = a; - #endif -+#if defined(EAPI) && defined(EAPI_MM) -+ blok->h.is_shm = a->is_shm; -+#endif - - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (a->is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - - ap_unblock_alarms(); - -@@ -877,6 +1076,11 @@ - char *ptr; - - size = (char *)ps->vbuff.curpos - ps->base; -+#if defined(EAPI) && defined(EAPI_MM) -+ if (ps->block->h.is_shm) -+ ptr = ap_mm_realloc(ps->base, 2*size); -+ else -+#endif - ptr = realloc(ps->base, 2*size); - if (ptr == NULL) { - fputs("Ouch! Out of memory!\n", stderr); -@@ -897,9 +1101,21 @@ - cur_len = strp - blok->h.first_avail; - - /* must try another blok */ -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ nblok = new_block(2 * cur_len, blok->h.is_shm); -+#else - nblok = new_block(2 * cur_len); -+#endif - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - memcpy(nblok->h.first_avail, blok->h.first_avail, cur_len); - ps->vbuff.curpos = nblok->h.first_avail + cur_len; - /* save a byte for the NUL terminator */ -@@ -908,10 +1124,18 @@ - /* did we allocate the current blok? if so free it up */ - if (ps->got_a_new_block) { - debug_fill(blok->h.first_avail, blok->h.endp - blok->h.first_avail); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_lock(mm, AP_MM_LOCK_RW); -+#endif - (void) ap_acquire_mutex(alloc_mutex); - blok->h.next = block_freelist; - block_freelist = blok; - (void) ap_release_mutex(alloc_mutex); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (blok->h.is_shm) -+ (void)ap_mm_unlock(mm); -+#endif - } - ps->blok = nblok; - ps->got_a_new_block = 1; -@@ -930,6 +1154,11 @@ - void *ptr; - - ap_block_alarms(); -+#if defined(EAPI) && defined(EAPI_MM) -+ if (p->is_shm) -+ ps.base = ap_mm_malloc(mm, 512); -+ else -+#endif - ps.base = malloc(512); - if (ps.base == NULL) { - fputs("Ouch! Out of memory!\n", stderr); -@@ -942,6 +1171,11 @@ - *ps.vbuff.curpos++ = '\0'; - ptr = ps.base; - /* shrink */ -+#if defined(EAPI) && defined(EAPI_MM) -+ if (p->is_shm) -+ ptr = ap_mm_realloc(ptr, (char *)ps.vbuff.curpos - (char *)ptr); -+ else -+#endif - ptr = realloc(ptr, (char *)ps.vbuff.curpos - (char *)ptr); - if (ptr == NULL) { - fputs("Ouch! Out of memory!\n", stderr); - -+--------------------------------------------------------------------------- -| Patch the low-level buffer routines to additionally allow -| modules to intercept the I/O processing via hooks. -+--------------------------------------------------------------------------- -Index: src/main/buff.c ---- src/main/buff.c 27 Mar 2002 15:23:00 -0000 1.1.1.12 -+++ src/main/buff.c 27 Mar 2002 15:30:02 -0000 1.20 -@@ -293,6 +293,9 @@ - } - else - #endif -+#ifdef EAPI -+ if (!ap_hook_call("ap::buff::read", &rv, fb, buf, nbyte)) -+#endif /* EAPI */ - rv = read(fb->fd_in, buf, nbyte); - - return rv; -@@ -304,6 +307,9 @@ - - #if defined (WIN32) || defined(NETWARE) || defined(CYGWIN_WINSOCK) - if (fb->flags & B_SOCKET) { -+#ifdef EAPI -+ if (!ap_hook_call("ap::buff::recvwithtimeout", &rv, fb, buf, nbyte)) -+#endif /* EAPI */ - rv = ap_recvwithtimeout(fb->fd_in, buf, nbyte, 0); - if (rv == SOCKET_ERROR) - errno = WSAGetLastError(); -@@ -351,6 +357,9 @@ - } - else - #endif -+#ifdef EAPI -+ if (!ap_hook_call("ap::buff::write", &rv, fb, buf, nbyte)) -+#endif /* EAPI */ - #if defined (B_SFIO) - rv = sfwrite(fb->sf_out, buf, nbyte); - #else -@@ -381,6 +390,9 @@ - - #if defined(WIN32) || defined(NETWARE) - if (fb->flags & B_SOCKET) { -+#ifdef EAPI -+ if (!ap_hook_call("ap::buff::sendwithtimeout", &rv, fb, buf, nbyte)) -+#endif /* EAPI */ - rv = ap_sendwithtimeout(fb->fd, buf, nbyte, 0); - if (rv == SOCKET_ERROR) - errno = WSAGetLastError(); -@@ -464,6 +476,10 @@ - fb->callback_data = NULL; - fb->filter_callback = NULL; - -+#ifdef EAPI -+ fb->ctx = ap_ctx_new(p); -+#endif /* EAPI */ -+ - return fb; - } - -@@ -1116,6 +1132,9 @@ - i = 0; - while (i < nvec) { - do -+#ifdef EAPI -+ if (!ap_hook_call("ap::buff::writev", &rv, fb, &vec[i], nvec -i)) -+#endif /* EAPI */ - rv = writev(fb->fd, &vec[i], nvec - i); - while (rv == -1 && (errno == EINTR || errno == EAGAIN) - && !(fb->flags & B_EOUT)); - -+--------------------------------------------------------------------------- -| Add the implementation of the additional `add_module' and -| `rewrite_command' module hooks. Additionally the `ctx' -| variables are initialized. -+--------------------------------------------------------------------------- -Index: src/main/http_config.c ---- src/main/http_config.c 27 Mar 2002 15:23:00 -0000 1.1.1.14 -+++ src/main/http_config.c 27 Mar 2002 15:30:02 -0000 1.17 -@@ -599,6 +599,20 @@ - m->name = tmp; - } - #endif /*_OSD_POSIX*/ -+ -+#ifdef EAPI -+ /* -+ * Invoke the `add_module' hook inside the now existing set -+ * of modules to let them all now that this module was added. -+ */ -+ { -+ module *m2; -+ for (m2 = top_module; m2 != NULL; m2 = m2->next) -+ if (m2->magic == MODULE_MAGIC_COOKIE_EAPI) -+ if (m2->add_module != NULL) -+ (*m2->add_module)(m); -+ } -+#endif /* EAPI */ - } - - /* -@@ -613,6 +627,21 @@ - { - module *modp; - -+#ifdef EAPI -+ /* -+ * Invoke the `remove_module' hook inside the now existing -+ * set of modules to let them all now that this module is -+ * beeing removed. -+ */ -+ { -+ module *m2; -+ for (m2 = top_module; m2 != NULL; m2 = m2->next) -+ if (m2->magic == MODULE_MAGIC_COOKIE_EAPI) -+ if (m2->remove_module != NULL) -+ (*m2->remove_module)(m); -+ } -+#endif /* EAPI */ -+ - modp = top_module; - if (modp == m) { - /* We are the top module, special case */ -@@ -1006,6 +1035,27 @@ - const command_rec *cmd; - module *mod = top_module; - -+#ifdef EAPI -+ /* -+ * Invoke the `rewrite_command' of modules to allow -+ * they to rewrite the directive line before we -+ * process it. -+ */ -+ { -+ module *m; -+ char *cp; -+ for (m = top_module; m != NULL; m = m->next) { -+ if (m->magic == MODULE_MAGIC_COOKIE_EAPI) { -+ if (m->rewrite_command != NULL) { -+ cp = (m->rewrite_command)(parms, config, l); -+ if (cp != NULL) -+ l = cp; -+ } -+ } -+ } -+ } -+#endif /* EAPI */ -+ - if ((l[0] == '#') || (!l[0])) - return NULL; - -@@ -1440,6 +1490,10 @@ - s->limit_req_fieldsize = main_server->limit_req_fieldsize; - s->limit_req_fields = main_server->limit_req_fields; - -+#ifdef EAPI -+ s->ctx = ap_ctx_new(p); -+#endif /* EAPI */ -+ - *ps = s; - - return ap_parse_vhost_addrs(p, hostname, s); -@@ -1550,6 +1604,10 @@ - - s->module_config = create_server_config(p, s); - s->lookup_defaults = create_default_per_dir_config(p); -+ -+#ifdef EAPI -+ s->ctx = ap_ctx_new(p); -+#endif /* EAPI */ - - return s; - } - -+--------------------------------------------------------------------------- -| Add the ap_global_ctx variable and the new -| ap_add_config_define() function. Additionally the -| implementation of the additional `new_connection' module hook -| is added plus the initialization of one more `ctx' variable. -+--------------------------------------------------------------------------- -Index: src/main/http_main.c ---- src/main/http_main.c 27 Mar 2002 15:23:01 -0000 1.1.1.17 -+++ src/main/http_main.c 27 Mar 2002 15:30:02 -0000 1.39 -@@ -279,6 +279,9 @@ - - int ap_dump_settings = 0; - API_VAR_EXPORT int ap_extended_status = 0; -+#ifdef EAPI -+API_VAR_EXPORT ap_ctx *ap_global_ctx; -+#endif /* EAPI */ - - /* - * The max child slot ever assigned, preserved across restarts. Necessary -@@ -461,6 +464,30 @@ - } - } - -+#ifdef EAPI -+API_EXPORT(void) ap_add_config_define(const char *define) -+{ -+ char **var; -+ var = (char **)ap_push_array(ap_server_config_defines); -+ *var = ap_pstrdup(pcommands, define); -+ return; -+} -+ -+/* -+ * Invoke the `close_connection' hook of modules to let them do -+ * some connection dependent actions before we close it. -+ */ -+static void ap_call_close_connection_hook(conn_rec *c) -+{ -+ module *m; -+ for (m = top_module; m != NULL; m = m->next) -+ if (m->magic == MODULE_MAGIC_COOKIE_EAPI) -+ if (m->close_connection != NULL) -+ (*m->close_connection)(c); -+ return; -+} -+#endif /* EAPI */ -+ - #ifndef NETWARE - static APACHE_TLS int volatile exit_after_unblock = 0; - #endif -@@ -1513,6 +1540,10 @@ - ap_log_transaction(log_req); - } - -+#ifdef EAPI -+ ap_call_close_connection_hook(save_req->connection); -+#endif /* EAPI */ -+ - ap_bsetflag(save_req->connection->client, B_EOUT, 1); - ap_bclose(save_req->connection->client); - -@@ -1521,6 +1552,9 @@ - ap_longjmp(jmpbuffer, 1); - } - else { /* abort the connection */ -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bsetflag(current_conn->client, B_EOUT, 1); - ap_bclose(current_conn->client); - current_conn->aborted = 1; -@@ -1823,10 +1857,16 @@ - /* Send any leftover data to the client, but never try to again */ - - if (ap_bflush(r->connection->client) == -1) { -+#ifdef EAPI -+ ap_call_close_connection_hook(r->connection); -+#endif /* EAPI */ - ap_kill_timeout(r); - ap_bclose(r->connection->client); - return; - } -+#ifdef EAPI -+ ap_call_close_connection_hook(r->connection); -+#endif /* EAPI */ - ap_bsetflag(r->connection->client, B_EOUT, 1); - - /* Close our half of the connection --- send the client a FIN */ -@@ -2554,6 +2594,9 @@ - /* Clear the pool - including any registered cleanups */ - ap_destroy_pool(pglobal); - #endif -+#ifdef EAPI -+ ap_kill_alloc_shared(); -+#endif - exit(code); - } - -@@ -3549,6 +3592,24 @@ - conn->remote_addr = *remaddr; - conn->remote_ip = ap_pstrdup(conn->pool, - inet_ntoa(conn->remote_addr.sin_addr)); -+#ifdef EAPI -+ conn->ctx = ap_ctx_new(conn->pool); -+#endif /* EAPI */ -+ -+#ifdef EAPI -+ /* -+ * Invoke the `new_connection' hook of modules to let them do -+ * some connection dependent actions before we go on with -+ * processing the request on this connection. -+ */ -+ { -+ module *m; -+ for (m = top_module; m != NULL; m = m->next) -+ if (m->magic == MODULE_MAGIC_COOKIE_EAPI) -+ if (m->new_connection != NULL) -+ (*m->new_connection)(conn); -+ } -+#endif /* EAPI */ - - return conn; - } -@@ -3977,6 +4038,15 @@ - printf("Server's Module Magic Number: %u:%u\n", - MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR); - printf("Server compiled with....\n"); -+#ifdef EAPI -+ printf(" -D EAPI\n"); -+#endif -+#ifdef EAPI_MM -+ printf(" -D EAPI_MM\n"); -+#ifdef EAPI_MM_CORE_PATH -+ printf(" -D EAPI_MM_CORE_PATH=\"" EAPI_MM_CORE_PATH "\"\n"); -+#endif -+#endif - #ifdef TPF - show_os_specific_compile_settings(); - #endif -@@ -4149,6 +4219,22 @@ - ap_server_pre_read_config = ap_make_array(pcommands, 1, sizeof(char *)); - ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *)); - ap_server_config_defines = ap_make_array(pcommands, 1, sizeof(char *)); -+ -+#ifdef EAPI -+ ap_hook_init(); -+ ap_hook_configure("ap::buff::read", -+ AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_configure("ap::buff::write", -+ AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_configure("ap::buff::writev", -+ AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_configure("ap::buff::sendwithtimeout", -+ AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_configure("ap::buff::recvwithtimeout", -+ AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST); -+ -+ ap_global_ctx = ap_ctx_new(NULL); -+#endif /* EAPI */ - } - - #ifndef MULTITHREAD -@@ -4592,6 +4678,9 @@ - - ap_sync_scoreboard_image(); - if (ap_scoreboard_image->global.running_generation != ap_my_generation) { -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bclose(conn_io); - clean_child_exit(0); - } -@@ -4620,6 +4709,9 @@ - */ - - #ifdef NO_LINGCLOSE -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bclose(conn_io); /* just close it */ - #else - if (r && r->connection -@@ -4630,6 +4722,9 @@ - lingering_close(r); - } - else { -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bsetflag(conn_io, B_EOUT, 1); - ap_bclose(conn_io); - } -@@ -5389,16 +5484,31 @@ - usage(argv[0]); - } - } -+#ifdef EAPI -+ ap_init_alloc_shared(TRUE); -+#endif - - ap_suexec_enabled = init_suexec(); - server_conf = ap_read_config(pconf, ptrans, ap_server_confname); - -+#ifdef EAPI -+ ap_init_alloc_shared(FALSE); -+#endif -+ - if (ap_configtestonly) { - fprintf(stderr, "Syntax OK\n"); -+#ifdef EAPI -+ clean_parent_exit(0); -+#else - exit(0); -+#endif - } - if (ap_dump_settings) { -+#ifdef EAPI -+ clean_parent_exit(0); -+#else - exit(0); -+#endif - } - - child_timeouts = !ap_standalone || one_process; -@@ -5529,6 +5639,10 @@ - ap_destroy_pool(r->pool); - } - -+#ifdef EAPI -+ ap_call_close_connection_hook(conn); -+#endif /* EAPI */ -+ - ap_bclose(cio); - } - exit(0); -@@ -5905,6 +6019,9 @@ - ap_kill_cleanups_for_socket(ptrans, csd); - - #ifdef NO_LINGCLOSE -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bclose(conn_io); /* just close it */ - #else - if (r && r->connection -@@ -5915,6 +6032,9 @@ - lingering_close(r); - } - else { -+#ifdef EAPI -+ ap_call_close_connection_hook(current_conn); -+#endif /* EAPI */ - ap_bsetflag(conn_io, B_EOUT, 1); - ap_bclose(conn_io); - } -@@ -7478,6 +7598,10 @@ - if (!conf_specified) - ap_cpystrn(ap_server_confname, SERVER_CONFIG_FILE, sizeof(ap_server_confname)); - -+#ifdef EAPI -+ ap_init_alloc_shared(TRUE); -+#endif -+ - if (!ap_os_is_path_absolute(ap_server_confname)) - ap_cpystrn(ap_server_confname, - ap_server_root_relative(pcommands, ap_server_confname), -@@ -7517,6 +7641,9 @@ - } - #else /* ndef WIN32 */ - server_conf = ap_read_config(pconf, ptrans, ap_server_confname); -+#endif -+#ifdef EAPI -+ ap_init_alloc_shared(FALSE); - #endif - - if (ap_configtestonly) { - -+--------------------------------------------------------------------------- -| Just add the initialization of the `ctx' variable for -| conn_rec structures. -+--------------------------------------------------------------------------- -Index: src/main/http_request.c ---- src/main/http_request.c 27 Mar 2002 15:23:02 -0000 1.1.1.14 -+++ src/main/http_request.c 27 Mar 2002 15:30:02 -0000 1.14 -@@ -1375,6 +1375,10 @@ - - new->method = r->method; - new->method_number = r->method_number; -+#ifdef EAPI -+ /* initialize context _BEFORE_ ap_parse_uri() call */ -+ new->ctx = r->ctx; -+#endif /* EAPI */ - ap_parse_uri(new, new_uri); - new->request_config = ap_create_request_config(r->pool); - new->per_dir_config = r->server->lookup_defaults; - -+--------------------------------------------------------------------------- -| Just add the initialization of the `ctx' variable for -| request_rec structures. -+--------------------------------------------------------------------------- -Index: src/main/http_protocol.c ---- src/main/http_protocol.c 27 Mar 2002 15:23:02 -0000 1.1.1.16 -+++ src/main/http_protocol.c 27 Mar 2002 15:30:02 -0000 1.16 -@@ -1151,6 +1151,10 @@ - r->status = HTTP_REQUEST_TIME_OUT; /* Until we get a request */ - r->the_request = NULL; - -+#ifdef EAPI -+ r->ctx = ap_ctx_new(r->pool); -+#endif /* EAPI */ -+ - #ifdef CHARSET_EBCDIC - ap_bsetflag(r->connection->client, B_ASCII2EBCDIC, r->ebcdic.conv_in = 1); - ap_bsetflag(r->connection->client, B_EBCDIC2ASCII, r->ebcdic.conv_out = 1); -@@ -1299,6 +1303,11 @@ - rnew->read_body = REQUEST_NO_BODY; - - rnew->main = (request_rec *) r; -+ -+#ifdef EAPI -+ rnew->ctx = r->ctx; -+#endif /* EAPI */ -+ - } - - API_EXPORT(void) ap_finalize_sub_req_protocol(request_rec *sub) - -+--------------------------------------------------------------------------- -| Add support for loading both EAPI and AP13 modules. -+--------------------------------------------------------------------------- -Index: src/modules/standard/mod_so.c ---- src/modules/standard/mod_so.c 27 Mar 2002 15:23:06 -0000 1.1.1.9 -+++ src/modules/standard/mod_so.c 27 Mar 2002 15:30:03 -0000 1.10 -@@ -269,11 +269,24 @@ - * Make sure the found module structure is really a module structure - * - */ -+#ifdef EAPI -+ if ( modp->magic != MODULE_MAGIC_COOKIE_AP13 -+ && modp->magic != MODULE_MAGIC_COOKIE_EAPI) { -+#else - if (modp->magic != MODULE_MAGIC_COOKIE) { -+#endif - return ap_pstrcat(cmd->pool, "API module structure `", modname, - "' in file ", szModuleFile, " is garbled -" - " perhaps this is not an Apache module DSO?", NULL); - } -+#ifdef EAPI -+ if (modp->magic == MODULE_MAGIC_COOKIE_AP13) { -+ ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, NULL, -+ "Loaded DSO %s uses plain Apache 1.3 API, " -+ "this module might crash under EAPI! " -+ "(please recompile it with -DEAPI)", filename); -+ } -+#endif - - /* - * Add this module to the Apache core structures - -+--------------------------------------------------------------------------- -| Add additional logging functions to the CustomLog directive -| which can be used by other modules to create additional -| logfile tags. Actually we add two types of hooks: One hook -| for intercepting the new and generic %x (eXtension) tag and -| one hook for creating new %x tags at all. -+--------------------------------------------------------------------------- -Index: src/modules/standard/mod_log_config.c ---- src/modules/standard/mod_log_config.c 27 Mar 2002 15:23:05 -0000 1.1.1.12 -+++ src/modules/standard/mod_log_config.c 27 Mar 2002 15:30:03 -0000 1.25 -@@ -262,6 +262,9 @@ - typedef const char *(*item_key_func) (request_rec *, char *); - - typedef struct { -+#ifdef EAPI -+ char ch; -+#endif - item_key_func func; - char *arg; - int condition_sense; -@@ -573,15 +576,36 @@ - } - }; - -+#ifdef EAPI -+static struct log_item_list *find_log_func(pool *p, char k) -+#else /* EAPI */ - static struct log_item_list *find_log_func(char k) -+#endif /* EAPI */ - { - int i; -+#ifdef EAPI -+ struct log_item_list *lil; -+#endif /* EAPI */ - - for (i = 0; log_item_keys[i].ch; ++i) - if (k == log_item_keys[i].ch) { - return &log_item_keys[i]; - } - -+#ifdef EAPI -+ if (ap_hook_status(ap_psprintf(p, "ap::mod_log_config::log_%c", k)) -+ != AP_HOOK_STATE_NOTEXISTANT) { -+ lil = (struct log_item_list *) -+ ap_pcalloc(p, sizeof(struct log_item_list)); -+ if (lil == NULL) -+ return NULL; -+ lil->ch = k; -+ lil->func = NULL; -+ lil->want_orig_default = 0; -+ return lil; -+ } -+#endif /* EAPI */ -+ - return NULL; - } - -@@ -707,7 +731,11 @@ - break; - - default: -+#ifdef EAPI -+ l = find_log_func(p, *s++); -+#else /* EAPI */ - l = find_log_func(*s++); -+#endif /* EAPI */ - if (!l) { - char dummy[2]; - -@@ -716,6 +744,9 @@ - return ap_pstrcat(p, "Unrecognized LogFormat directive %", - dummy, NULL); - } -+#ifdef EAPI -+ it->ch = s[-1]; -+#endif - it->func = l->func; - if (it->want_orig == -1) { - it->want_orig = l->want_orig_default; -@@ -777,6 +808,15 @@ - - /* We do. Do it... */ - -+#ifdef EAPI -+ if (item->func == NULL) { -+ cp = NULL; -+ ap_hook_use(ap_psprintf(r->pool, "ap::mod_log_config::log_%c", item->ch), -+ AP_HOOK_SIG3(ptr,ptr,ptr), AP_HOOK_DECLINE(NULL), -+ &cp, r, item->arg); -+ } -+ else -+#endif - cp = (*item->func) (item->want_orig ? orig : r, item->arg); - return cp ? cp : "-"; - } - -+--------------------------------------------------------------------------- -| Allow RewriteCond and RewriteRule directives to lookup -| variables from other modules. -+--------------------------------------------------------------------------- -Index: src/modules/standard/mod_rewrite.c ---- src/modules/standard/mod_rewrite.c 27 Mar 2002 15:23:06 -0000 1.1.1.14 -+++ src/modules/standard/mod_rewrite.c 27 Mar 2002 15:30:03 -0000 1.12 -@@ -3678,6 +3678,15 @@ - } - #endif /* ndef WIN32 && NETWARE*/ - -+#ifdef EAPI -+ else { -+ ap_hook_use("ap::mod_rewrite::lookup_variable", -+ AP_HOOK_SIG3(ptr,ptr,ptr), -+ AP_HOOK_DECLINE(NULL), -+ &result, r, var); -+ } -+#endif -+ - if (result == NULL) { - return ap_pstrdup(r->pool, ""); - } - -+--------------------------------------------------------------------------- -| Add an EAPI hook to allow other modules to add content to -| the status HTML page. -+--------------------------------------------------------------------------- -Index: src/modules/standard/mod_status.c ---- src/modules/standard/mod_status.c 27 Mar 2002 15:23:06 -0000 1.1.1.14 -+++ src/modules/standard/mod_status.c 27 Mar 2002 15:30:03 -0000 1.11 -@@ -717,6 +754,12 @@ - </table>\n", r); - #endif - } -+ -+#ifdef EAPI -+ ap_hook_use("ap::mod_status::display", -+ AP_HOOK_SIG4(void,ptr,int,int), AP_HOOK_ALL, -+ r, no_table_report, short_report); -+#endif - - } else { - - -+--------------------------------------------------------------------------- -| Add hooks to the scheme processing to allow other modules to -| recognize more schemes by intercepting this processing. -+--------------------------------------------------------------------------- ---- src/modules/proxy/mod_proxy.c.orig Tue Jun 18 02:59:59 2002 -+++ src/modules/proxy/mod_proxy.c Wed Jun 19 11:36:53 2002 -@@ -218,6 +218,9 @@ - static int proxy_fixup(request_rec *r) - { - char *url, *p; -+#ifdef EAPI -+ int rc; -+#endif /* EAPI */ - - if (r->proxyreq == NOT_PROXY || strncmp(r->filename, "proxy:", 6) != 0) - return DECLINED; -@@ -225,6 +228,14 @@ - url = &r->filename[6]; - - /* canonicalise each specific scheme */ -+#ifdef EAPI -+ if (ap_hook_use("ap::mod_proxy::canon", -+ AP_HOOK_SIG3(int,ptr,ptr), -+ AP_HOOK_DECLINE(DECLINED), -+ &rc, r, url) && rc != DECLINED) -+ return rc; -+ else -+#endif /* EAPI */ - if (strncasecmp(url, "http:", 5) == 0) - return ap_proxy_http_canon(r, url + 5, "http", DEFAULT_HTTP_PORT); - else if (strncasecmp(url, "ftp:", 4) == 0) -@@ -240,9 +251,44 @@ - static void proxy_init(server_rec *r, pool *p) - { - ap_proxy_garbage_init(r, p); -+#ifdef EAPI -+ ap_hook_use("ap::mod_proxy::init", -+ AP_HOOK_SIG3(void,ptr,ptr), AP_HOOK_ALL, r, p); -+#endif - } - -- -+#ifdef EAPI -+static void proxy_addmod(module *m) -+{ -+ /* export: ap_proxy_http_canon() as `ap::mod_proxy::http::canon' */ -+ ap_hook_configure("ap::mod_proxy::http::canon", -+ AP_HOOK_SIG5(int,ptr,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_register("ap::mod_proxy::http::canon", -+ ap_proxy_http_canon, AP_HOOK_NOCTX); -+ -+ /* export: ap_proxy_http_handler() as `ap::mod_proxy::http::handler' */ -+ ap_hook_configure("ap::mod_proxy::http::handler", -+ AP_HOOK_SIG6(int,ptr,ptr,ptr,ptr,int), AP_HOOK_TOPMOST); -+ ap_hook_register("ap::mod_proxy::http::handler", -+ ap_proxy_http_handler, AP_HOOK_NOCTX); -+ -+ /* export: ap_proxyerror() as `ap::mod_proxy::error' */ -+ ap_hook_configure("ap::mod_proxy::error", -+ AP_HOOK_SIG3(int,ptr,ptr), AP_HOOK_TOPMOST); -+ ap_hook_register("ap::mod_proxy::error", -+ ap_proxyerror, AP_HOOK_NOCTX); -+ return; -+} -+ -+static void proxy_remmod(module *m) -+{ -+ /* remove the hook references */ -+ ap_hook_unregister("ap::mod_proxy::http::canon", ap_proxy_http_canon); -+ ap_hook_unregister("ap::mod_proxy::http::handler", ap_proxy_http_handler); -+ ap_hook_unregister("ap::mod_proxy::error", ap_proxyerror); -+ return; -+} -+#endif /* EAPI */ - - /* Send a redirection if the request contains a hostname which is not */ - /* fully qualified, i.e. doesn't have a domain name appended. Some proxy */ -@@ -374,6 +420,14 @@ - * CONNECT is a special method that bypasses the normal proxy - * code. - */ -+#ifdef EAPI -+ if (!ap_hook_use("ap::mod_proxy::handler", -+ AP_HOOK_SIG7(int,ptr,ptr,ptr,ptr,int,ptr), -+ AP_HOOK_DECLINE(DECLINED), -+ &rc, r, cr, url, -+ ents[i].hostname, ents[i].port, -+ ents[i].protocol) || rc == DECLINED) { -+#endif /* EAPI */ - if (r->method_number == M_CONNECT) - rc = ap_proxy_connect_handler(r, cr, url, ents[i].hostname, - ents[i].port); -@@ -383,6 +437,9 @@ - ents[i].port); - else - rc = DECLINED; -+#ifdef EAPI -+ } -+#endif /* EAPI */ - - /* an error or success */ - if (rc != DECLINED && rc != HTTP_BAD_GATEWAY) -@@ -397,6 +454,15 @@ - */ - - /* handle the scheme */ -+#ifdef EAPI -+ if (ap_hook_use("ap::mod_proxy::handler", -+ AP_HOOK_SIG7(int,ptr,ptr,ptr,ptr,int,ptr), -+ AP_HOOK_DECLINE(DECLINED), -+ &rc, r, cr, url, -+ NULL, 0, scheme) && rc != DECLINED) -+ return rc; -+#endif /* EAPI */ -+ - if (r->method_number == M_CONNECT) { - return ap_proxy_connect_handler(r, cr, url, NULL, 0); - } -@@ -994,4 +1060,10 @@ - NULL, /* child_init */ - NULL, /* child_exit */ - proxy_detect /* post read-request */ -+#ifdef EAPI -+ ,proxy_addmod, /* EAPI: add_module */ -+ proxy_remmod, /* EAPI: remove_module */ -+ NULL, /* EAPI: rewrite_command */ -+ NULL /* EAPI: new_connection */ -+#endif - }; - -+--------------------------------------------------------------------------- -| Add hooks to the HTTP processing to allow other modules -| to enhance it by intercepting this processing. -+--------------------------------------------------------------------------- ---- src/modules/proxy/proxy_http.c.orig Tue Jun 18 02:59:59 2002 -+++ src/modules/proxy/proxy_http.c Wed Jun 19 11:39:55 2002 -@@ -168,6 +168,9 @@ - char *destportstr = NULL; - const char *urlptr = NULL; - const char *datestr, *urlstr; -+#ifdef EAPI -+ char *peer; -+#endif - int result, major, minor; - const char *content_length; - -@@ -191,6 +194,12 @@ - return HTTP_BAD_REQUEST; - urlptr += 3; - destport = DEFAULT_HTTP_PORT; -+#ifdef EAPI -+ ap_hook_use("ap::mod_proxy::http::handler::set_destport", -+ AP_HOOK_SIG2(int,ptr), -+ AP_HOOK_TOPMOST, -+ &destport, r); -+#endif /* EAPI */ - strp = strchr(urlptr, '/'); - if (strp == NULL) { - desthost = ap_pstrdup(p, urlptr); -@@ -228,12 +237,18 @@ - err = ap_proxy_host2addr(proxyhost, &server_hp); - if (err != NULL) - return DECLINED; /* try another */ -+#ifdef EAPI -+ peer = ap_psprintf(p, "%s:%u", proxyhost, proxyport); -+#endif - } - else { - server.sin_port = htons((unsigned short)destport); - err = ap_proxy_host2addr(desthost, &server_hp); - if (err != NULL) - return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err); -+#ifdef EAPI -+ peer = ap_psprintf(p, "%s:%u", desthost, destport); -+#endif - } - - -@@ -308,14 +323,42 @@ - f = ap_bcreate(p, B_RDWR | B_SOCKET); - ap_bpushfd(f, sock, sock); - -+#ifdef EAPI -+ { -+ char *errmsg = NULL; -+ ap_hook_use("ap::mod_proxy::http::handler::new_connection", -+ AP_HOOK_SIG4(ptr,ptr,ptr,ptr), -+ AP_HOOK_DECLINE(NULL), -+ &errmsg, r, f, peer); -+ if (errmsg != NULL) -+ return ap_proxyerror(r, HTTP_BAD_GATEWAY, errmsg); -+ } -+#endif /* EAPI */ -+ - ap_hard_timeout("proxy send", r); - ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.1" CRLF, - NULL); -+#ifdef EAPI -+ { -+ int rc = DECLINED; -+ ap_hook_use("ap::mod_proxy::http::handler::write_host_header", -+ AP_HOOK_SIG6(int,ptr,ptr,ptr,int,ptr), -+ AP_HOOK_DECLINE(DECLINED), -+ &rc, r, f, desthost, destport, destportstr); -+ if (rc == DECLINED) { -+ if (destportstr != NULL && destport != DEFAULT_HTTP_PORT) -+ ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL); -+ else -+ ap_bvputs(f, "Host: ", desthost, CRLF, NULL); -+ } -+ } -+#else /* EAPI */ - /* Send Host: now, adding it to req_hdrs wouldn't be much better */ - if (destportstr != NULL && destport != DEFAULT_HTTP_PORT) - ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL); - else - ap_bvputs(f, "Host: ", desthost, CRLF, NULL); -+#endif - - if (conf->viaopt == via_block) { - /* Block all outgoing Via: headers */ - -+--------------------------------------------------------------------------- -| Add EAPI hooks in module structure for APXS generated samples. -+--------------------------------------------------------------------------- -Index: src/support/apxs.pl ---- src/support/apxs.pl 27 Mar 2002 15:23:11 -0000 1.1.1.11 -+++ src/support/apxs.pl 27 Mar 2002 15:30:03 -0000 1.11 -@@ -704,5 +704,11 @@ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* [#0] post read-request */ -+#ifdef EAPI -+ ,NULL, /* EAPI: add_module */ -+ NULL, /* EAPI: remove_module */ -+ NULL, /* EAPI: rewrite_command */ -+ NULL /* EAPI: new_connection */ -+#endif - }; - - -+--------------------------------------------------------------------------- -| Add the EAPI functions, so the stuff can be built under AIX -| and similar braindead platforms as DSO. -+--------------------------------------------------------------------------- -Index: src/support/httpd.exp ---- src/support/httpd.exp 27 Mar 2002 15:23:12 -0000 1.1.1.10 -+++ src/support/httpd.exp 27 Mar 2002 15:30:03 -0000 1.12 -@@ -423,3 +423,59 @@ - XML_SetUnparsedEntityDeclHandler - XML_SetUserData - XML_UseParserAsHandlerArg -+ap_add_config_define -+ap_make_shared_sub_pool -+ap_global_ctx -+ap_ctx_new -+ap_ctx_get -+ap_ctx_set -+ap_hook_init -+ap_hook_kill -+ap_hook_configure -+ap_hook_register_I -+ap_hook_unregister_I -+ap_hook_status -+ap_hook_use -+ap_hook_call -+ap_mm_useable -+ap_MM_create -+ap_MM_permission -+ap_MM_destroy -+ap_MM_lock -+ap_MM_unlock -+ap_MM_malloc -+ap_MM_realloc -+ap_MM_free -+ap_MM_calloc -+ap_MM_strdup -+ap_MM_sizeof -+ap_MM_maxsize -+ap_MM_available -+ap_MM_error -+ap_mm_create -+ap_mm_permission -+ap_mm_destroy -+ap_mm_lock -+ap_mm_unlock -+ap_mm_malloc -+ap_mm_realloc -+ap_mm_free -+ap_mm_calloc -+ap_mm_strdup -+ap_mm_sizeof -+ap_mm_maxsize -+ap_mm_available -+ap_mm_error -+ap_mm_display_info -+ap_mm_core_create -+ap_mm_core_permission -+ap_mm_core_delete -+ap_mm_core_size -+ap_mm_core_lock -+ap_mm_core_unlock -+ap_mm_core_maxsegsize -+ap_mm_core_align2page -+ap_mm_core_align2word -+ap_mm_lib_error_set -+ap_mm_lib_error_get -+ap_mm_lib_version - -+--------------------------------------------------------------------------- -| Add the EAPI functions, so the stuff can be built under -| Windows 95 and similar braindead platforms as DDL. -+--------------------------------------------------------------------------- -Index: src/ApacheCore.def ---- src/ApacheCore.def 27 Mar 2002 15:22:53 -0000 1.1.1.9 -+++ src/ApacheCore.def 27 Mar 2002 15:30:02 -0000 1.13 -@@ -444,3 +444,67 @@ - ap_recvwithtimeout @436 - ap_caret_escape_args @437 - ap_double_quotes @438 -+ -+ ; EAPI extended symbols -+ ; note; no ID's, so these all bind by name rather than ordinal since -+ ; their ordinals would change with symbol changes in the distribution -+ ap_add_config_define -+ ap_global_ctx DATA -+ ap_ctx_new -+ ap_ctx_get -+ ap_ctx_overlay -+ ap_ctx_set -+ ap_hook_init -+ ap_hook_kill -+ ap_hook_configure -+ ap_hook_register_I -+ ap_hook_unregister_I -+ ap_hook_status -+ ap_hook_use -+ ap_hook_call -+ ap_set_callback_and_alarm -+ ap_acquire_pool -+ ap_make_shared_sub_pool -+ ap_release_pool -+ ap_mm_useable -+ ap_MM_create -+ ap_MM_permission -+ ap_MM_destroy -+ ap_MM_lock -+ ap_MM_unlock -+ ap_MM_malloc -+ ap_MM_realloc -+ ap_MM_free -+ ap_MM_calloc -+ ap_MM_strdup -+ ap_MM_sizeof -+ ap_MM_maxsize -+ ap_MM_available -+ ap_MM_error -+ ap_mm_create -+ ap_mm_permission -+ ap_mm_destroy -+ ap_mm_lock -+ ap_mm_unlock -+ ap_mm_malloc -+ ap_mm_realloc -+ ap_mm_free -+ ap_mm_calloc -+ ap_mm_strdup -+ ap_mm_sizeof -+ ap_mm_maxsize -+ ap_mm_available -+ ap_mm_error -+ ap_mm_display_info -+ ap_mm_core_create -+ ap_mm_core_permission -+ ap_mm_core_delete -+ ap_mm_core_size -+ ap_mm_core_lock -+ ap_mm_core_unlock -+ ap_mm_core_align2page -+ ap_mm_core_align2word -+ ap_mm_lib_error_set -+ ap_mm_lib_error_get -+ ap_mm_lib_version -+ |