the test started failing at some point due to filter changes. i think i
heard it is not longer possible for a filter to remove itself? in any
case, mod_ssl already checks in the output filter already passes if its
ssl pointer is NULL (normally due to error). the input filter should
probably do the same too. and with that it is simple to disable the ssl
filters in the case of 'HTTP spoken on HTTPS port'
if there's a better way, that'd be great, but the patch below passes all
httpd-tests for me.
Index: modules/ssl/ssl_engine_io.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/ssl/ssl_engine_io.c,v
retrieving revision 1.70
diff -u -r1.70 ssl_engine_io.c
--- modules/ssl/ssl_engine_io.c 30 Mar 2002 05:16:55 -0000 1.70
+++ modules/ssl/ssl_engine_io.c 2 Apr 2002 16:05:32 -0000
@@ -743,6 +743,13 @@
sizeof(HTTP_ON_HTTPS_PORT) - 1, \
alloc)
+static void ssl_io_filter_disable(ap_filter_t *f)
+{
+ ssl_io_input_ctx_t *ctx = f->ctx;
+ ctx->inbio.ssl = NULL;
+ ctx->frec->pssl = NULL;
+}
+
static apr_status_t ssl_io_filter_error(ap_filter_t *f,
apr_bucket_brigade *bb,
apr_status_t status)
@@ -758,6 +765,7 @@
/* fake the request line */
bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
+ ssl_io_filter_disable(f);
break;
default:
@@ -780,6 +788,10 @@
apr_size_t len = sizeof(ctx->buffer);
int is_init = (mode == AP_MODE_INIT);
+
+ if (!ctx->inbio.ssl) {
+ return ap_get_brigade(f->next, bb, mode, block, readbytes);
+ }
/* XXX: we don't currently support anything other than these modes. */
if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE &&