##
## Annotated patch file: eapi.patch
## Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved.
-## Created on: 01-Feb-2002
+## 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
| patches and configured the shared memory support via the MM library.
+---------------------------------------------------------------------------
Index: src/Configuration.tmpl
---- src/Configuration.tmpl 2002/01/28 19:21:21 1.1.1.7
-+++ src/Configuration.tmpl 2002/01/28 19:40:56 1.23
+--- 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=
| Patch in implementation of the EAPI rule.
+---------------------------------------------------------------------------
Index: src/Configure
---- src/Configure 2002/01/28 19:21:21 1.1.1.17
-+++ src/Configure 2002/01/28 19:40:56 1.19
+--- 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
+ esac
+ # MM Shared Memory Library support for EAPI
+ if [ "x$EAPI_MM" = "x" ]; then
-+ EAPI_MM=`egrep '^EAPI_MM=' $file | tail -1 | awk -F= '{print $2}'`
++ 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
| Add the build support for the ap_hook.c and ap_ctx.c sources (Unix)
+---------------------------------------------------------------------------
Index: src/ap/Makefile.tmpl
---- src/ap/Makefile.tmpl 2001/05/20 08:16:15 1.1.1.7
-+++ src/ap/Makefile.tmpl 2001/05/20 08:23:01 1.7
-@@ -6,7 +6,8 @@
+--- src/ap/Makefile.tmpl 20 May 2001 08:16:15 -0000 1.1.1.7
++++ src/ap/Makefile.tmpl 20 May 2001 08:23:01 -0000 1.7
+@@ -6,8 +6,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_slack.o ap_snprintf.o ap_sha1.o ap_checkpass.o ap_base64.o ap_ebcdic.o \
-+ ap_hook.o ap_ctx.o ap_mm.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 2001/10/16 11:47:06 1.1.1.9
-+++ src/ap/ap.mak 2001/10/16 11:57:38 1.9
+--- 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"
| EAPI-aware modules and standard modules.
+---------------------------------------------------------------------------
Index: src/include/ap_mmn.h
---- src/include/ap_mmn.h 2002/01/28 19:21:22 1.1.1.9
-+++ src/include/ap_mmn.h 2002/01/28 19:40:56 1.9
+--- 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
*/
| shared memory pools.
+---------------------------------------------------------------------------
Index: src/include/ap_alloc.h
---- src/include/ap_alloc.h 2002/01/28 19:21:22 1.1.1.4
-+++ src/include/ap_alloc.h 2002/01/28 19:40:56 1.5
+--- 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);
| Add the additional context variable `ctx' for BUFF structures.
+---------------------------------------------------------------------------
Index: src/include/buff.h
---- src/include/buff.h 2002/01/28 19:21:23 1.1.1.5
-+++ src/include/buff.h 2002/01/28 19:40:56 1.9
+--- 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;
| Add the four additional Apache API module hooks.
+---------------------------------------------------------------------------
Index: src/include/http_config.h
---- src/include/http_config.h 2002/01/28 19:21:23 1.1.1.9
-+++ src/include/http_config.h 2002/01/28 19:40:56 1.11
+--- 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
| global module context.
+---------------------------------------------------------------------------
Index: src/include/http_conf_globals.h
---- src/include/http_conf_globals.h 2002/01/28 19:21:22 1.1.1.10
-+++ src/include/http_conf_globals.h 2002/01/28 19:40:56 1.11
+--- 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;
| function.
+---------------------------------------------------------------------------
Index: src/include/httpd.h
---- src/include/httpd.h 2002/01/28 19:21:23 1.1.1.17
-+++ src/include/httpd.h 2002/01/28 19:40:56 1.27
+--- 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... */
| Patch the shared memory pool support into the Apache pool facility.
+---------------------------------------------------------------------------
Index: src/main/alloc.c
---- src/main/alloc.c 2002/01/28 19:21:24 1.1.1.11
-+++ src/main/alloc.c 2002/01/28 19:40:56 1.18
+--- 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 @@
*/
(void) ap_acquire_mutex(alloc_mutex);
old_free_list = block_freelist;
block_freelist = blok;
-@@ -342,7 +369,11 @@
+@@ -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
+ #endif
}
-
@@ -350,7 +381,11 @@
* if necessary. Must be called with alarms blocked.
*/
| modules to intercept the I/O processing via hooks.
+---------------------------------------------------------------------------
Index: src/main/buff.c
---- src/main/buff.c 2002/01/28 19:21:24 1.1.1.11
-+++ src/main/buff.c 2002/01/28 19:40:57 1.19
-@@ -273,6 +273,9 @@
+--- 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
rv = read(fb->fd_in, buf, nbyte);
return rv;
-@@ -284,6 +287,9 @@
+@@ -304,6 +307,9 @@
#if defined (WIN32) || defined(NETWARE) || defined(CYGWIN_WINSOCK)
if (fb->flags & B_SOCKET) {
rv = ap_recvwithtimeout(fb->fd_in, buf, nbyte, 0);
if (rv == SOCKET_ERROR)
errno = WSAGetLastError();
-@@ -331,6 +337,9 @@
+@@ -351,6 +357,9 @@
}
else
#endif
#if defined (B_SFIO)
rv = sfwrite(fb->sf_out, buf, nbyte);
#else
-@@ -361,6 +370,9 @@
+@@ -381,6 +390,9 @@
#if defined(WIN32) || defined(NETWARE)
if (fb->flags & B_SOCKET) {
rv = ap_sendwithtimeout(fb->fd, buf, nbyte, 0);
if (rv == SOCKET_ERROR)
errno = WSAGetLastError();
-@@ -444,6 +456,10 @@
+@@ -464,6 +476,10 @@
fb->callback_data = NULL;
fb->filter_callback = NULL;
return fb;
}
-@@ -1096,6 +1112,9 @@
+@@ -1116,6 +1132,9 @@
i = 0;
while (i < nvec) {
do
| variables are initialized.
+---------------------------------------------------------------------------
Index: src/main/http_config.c
---- src/main/http_config.c 2002/01/28 19:21:24 1.1.1.13
-+++ src/main/http_config.c 2002/01/28 19:40:57 1.16
+--- 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;
}
| is added plus the initialization of one more `ctx' variable.
+---------------------------------------------------------------------------
Index: src/main/http_main.c
---- src/main/http_main.c 2002/01/28 19:21:24 1.1.1.16
-+++ src/main/http_main.c 2002/01/28 19:40:57 1.38
+--- 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;
#ifndef NETWARE
static APACHE_TLS int volatile exit_after_unblock = 0;
#endif
-@@ -1509,6 +1536,10 @@
+@@ -1513,6 +1540,10 @@
ap_log_transaction(log_req);
}
ap_bsetflag(save_req->connection->client, B_EOUT, 1);
ap_bclose(save_req->connection->client);
-@@ -1517,6 +1548,9 @@
+@@ -1521,6 +1552,9 @@
ap_longjmp(jmpbuffer, 1);
}
else { /* abort the connection */
ap_bsetflag(current_conn->client, B_EOUT, 1);
ap_bclose(current_conn->client);
current_conn->aborted = 1;
-@@ -1818,10 +1852,16 @@
+@@ -1823,10 +1857,16 @@
/* Send any leftover data to the client, but never try to again */
if (ap_bflush(r->connection->client) == -1) {
ap_bsetflag(r->connection->client, B_EOUT, 1);
/* Close our half of the connection --- send the client a FIN */
-@@ -2549,6 +2589,9 @@
+@@ -2554,6 +2594,9 @@
/* Clear the pool - including any registered cleanups */
ap_destroy_pool(pglobal);
#endif
exit(code);
}
-@@ -3544,7 +3587,25 @@
+@@ -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
+ (*m->new_connection)(conn);
+ }
+#endif /* EAPI */
-+
+
return conn;
}
-
-@@ -3972,6 +4033,15 @@
+@@ -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 TPF
show_os_specific_compile_settings();
#endif
-@@ -4144,6 +4214,22 @@
+@@ -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 *));
}
#ifndef MULTITHREAD
-@@ -4576,6 +4662,9 @@
+@@ -4592,6 +4678,9 @@
ap_sync_scoreboard_image();
if (ap_scoreboard_image->global.running_generation != ap_my_generation) {
ap_bclose(conn_io);
clean_child_exit(0);
}
-@@ -4604,6 +4693,9 @@
+@@ -4620,6 +4709,9 @@
*/
#ifdef NO_LINGCLOSE
ap_bclose(conn_io); /* just close it */
#else
if (r && r->connection
-@@ -4614,6 +4706,9 @@
+@@ -4630,6 +4722,9 @@
lingering_close(r);
}
else {
ap_bsetflag(conn_io, B_EOUT, 1);
ap_bclose(conn_io);
}
-@@ -5373,16 +5468,31 @@
+@@ -5389,16 +5484,31 @@
usage(argv[0]);
}
}
}
child_timeouts = !ap_standalone || one_process;
-@@ -5513,6 +5623,10 @@
+@@ -5529,6 +5639,10 @@
ap_destroy_pool(r->pool);
}
ap_bclose(cio);
}
exit(0);
-@@ -5889,6 +6003,9 @@
+@@ -5905,6 +6019,9 @@
ap_kill_cleanups_for_socket(ptrans, csd);
#ifdef NO_LINGCLOSE
ap_bclose(conn_io); /* just close it */
#else
if (r && r->connection
-@@ -5899,6 +6016,9 @@
+@@ -5915,6 +6032,9 @@
lingering_close(r);
}
else {
ap_bsetflag(conn_io, B_EOUT, 1);
ap_bclose(conn_io);
}
-@@ -7444,6 +7564,10 @@
+@@ -7478,6 +7598,10 @@
if (!conf_specified)
ap_cpystrn(ap_server_confname, SERVER_CONFIG_FILE, sizeof(ap_server_confname));
if (!ap_os_is_path_absolute(ap_server_confname))
ap_cpystrn(ap_server_confname,
ap_server_root_relative(pcommands, ap_server_confname),
-@@ -7483,6 +7607,9 @@
+@@ -7517,6 +7641,9 @@
}
#else /* ndef WIN32 */
server_conf = ap_read_config(pconf, ptrans, ap_server_confname);
| conn_rec structures.
+---------------------------------------------------------------------------
Index: src/main/http_request.c
---- src/main/http_request.c 2002/01/28 19:21:25 1.1.1.13
-+++ src/main/http_request.c 2002/01/28 19:40:57 1.13
+--- 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;
| request_rec structures.
+---------------------------------------------------------------------------
Index: src/main/http_protocol.c
---- src/main/http_protocol.c 2002/01/28 19:21:25 1.1.1.15
-+++ src/main/http_protocol.c 2002/01/28 19:40:57 1.15
+--- 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;
| Add support for loading both EAPI and AP13 modules.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_so.c
---- src/modules/standard/mod_so.c 2002/01/28 19:21:28 1.1.1.8
-+++ src/modules/standard/mod_so.c 2002/01/28 19:40:57 1.9
+--- 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
*
| one hook for creating new %x tags at all.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_log_config.c
---- src/modules/standard/mod_log_config.c 2001/01/23 11:35:12 1.1.1.11
-+++ src/modules/standard/mod_log_config.c 2001/01/23 11:48:08 1.24
+--- 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 *);
| variables from other modules.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_rewrite.c
---- src/modules/standard/mod_rewrite.c 2002/01/28 19:21:27 1.1.1.13
-+++ src/modules/standard/mod_rewrite.c 2002/01/28 19:40:57 1.11
+--- 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*/
| the status HTML page.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_status.c
---- src/modules/standard/mod_status.c 2002/01/28 19:21:28 1.1.1.13
-+++ src/modules/standard/mod_status.c 2002/01/28 19:40:57 1.10
+--- 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
| recognize more schemes by intercepting this processing.
+---------------------------------------------------------------------------
Index: src/modules/proxy/mod_proxy.c
---- src/modules/proxy/mod_proxy.c 2002/01/28 19:21:26 1.1.1.10
-+++ src/modules/proxy/mod_proxy.c 2002/01/28 19:40:57 1.17
+--- src/modules/proxy/mod_proxy.c 27 Mar 2002 15:23:03 -0000 1.1.1.11
++++ src/modules/proxy/mod_proxy.c 27 Mar 2002 15:30:03 -0000 1.18
@@ -215,6 +215,9 @@
static int proxy_fixup(request_rec *r)
{
/* an error or success */
if (rc != DECLINED && rc != HTTP_BAD_GATEWAY)
@@ -392,6 +449,14 @@
- * give up??
- */
+ */
+
/* handle the scheme */
+#ifdef EAPI
+ if (ap_hook_use("ap::mod_proxy::handler",
+ NULL, 0, scheme) && rc != DECLINED)
+ return rc;
+#endif /* EAPI */
- if (r->method_number == M_CONNECT)
+ if (r->method_number == M_CONNECT) {
return ap_proxy_connect_handler(r, cr, url, NULL, 0);
- if (strcasecmp(scheme, "http") == 0)
-@@ -956,6 +1021,12 @@
+ }
+@@ -973,6 +1038,12 @@
NULL, /* child_init */
NULL, /* child_exit */
proxy_detect /* post read-request */
| to enhance it by intercepting this processing.
+---------------------------------------------------------------------------
Index: src/modules/proxy/proxy_http.c
---- src/modules/proxy/proxy_http.c 2002/01/28 19:21:26 1.1.1.12
-+++ src/modules/proxy/proxy_http.c 2002/01/28 19:40:57 1.20
+--- src/modules/proxy/proxy_http.c 27 Mar 2002 15:23:04 -0000 1.1.1.13
++++ src/modules/proxy/proxy_http.c 27 Mar 2002 15:30:03 -0000 1.21
@@ -166,6 +166,9 @@
- char *destportstr = NULL;
const char *urlptr = NULL;
const char *datestr, *urlstr;
+ const char *content_length;
+#ifdef EAPI
+ char *peer;
+#endif
+#endif /* EAPI */
+
ap_hard_timeout("proxy send", r);
- ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.0" CRLF,
- NULL);
+ ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.1" CRLF,
+ NULL);
+#ifdef EAPI
+ {
+ int rc = DECLINED;
| Add EAPI hooks in module structure for APXS generated samples.
+---------------------------------------------------------------------------
Index: src/support/apxs.pl
---- src/support/apxs.pl 2001/05/20 08:16:25 1.1.1.10
-+++ src/support/apxs.pl 2001/05/20 08:23:03 1.10
-@@ -703,5 +703,11 @@
+--- 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 */
| and similar braindead platforms as DSO.
+---------------------------------------------------------------------------
Index: src/support/httpd.exp
---- src/support/httpd.exp 2001/02/28 19:40:56 1.1.1.9
-+++ src/support/httpd.exp 2001/02/28 19:44:35 1.11
-@@ -422,3 +422,59 @@
+--- 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
| Windows 95 and similar braindead platforms as DDL.
+---------------------------------------------------------------------------
Index: src/ApacheCore.def
---- src/ApacheCore.def 2002/01/28 19:21:21 1.1.1.8
-+++ src/ApacheCore.def 2002/01/28 19:40:56 1.12
-@@ -442,3 +442,67 @@
- ap_update_child_status @434
- ap_sendwithtimeout @435
- ap_recvwithtimeout @436
+--- 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_getline @439
+ ap_get_chunk_size @440
+ ap_escape_logitem @441
+
+ ; EAPI extended symbols
+ ; note; no ID's, so these all bind by name rather than ordinal since