[EMAIL PROTECTED] wrote:

> > How about a new hook for adding AP_FTYPE_HTTP_HEADER filters?
> 
> IMO, this should be fixed by adding the three filters above in a
> core_insert_filter phase.  Then, mod_headers can easily be run before the
> core's insert_fitler phase.  Problem solved.

The attached patch does what you suggested - mod_headers now works
correctly as an AP_FTYPE_HTTP_HEADER output filter. 

(Let's try actually add the patch this time)

Regards,
Graham
-- 
-----------------------------------------
[EMAIL PROTECTED]                "There's a moon
                                        over Bourbon Street
                                                tonight..."
diff -r -u3 --exclude=CVS 
/home/minfrin/src/apache/pristine/httpd-2.0/modules/http/http_core.c 
httpd-2.0/modules/http/http_core.c
--- /home/minfrin/src/apache/pristine/httpd-2.0/modules/http/http_core.c        Sun 
May 20 02:35:07 2001
+++ httpd-2.0/modules/http/http_core.c  Mon May 21 01:24:39 2001
@@ -295,6 +295,13 @@
     return OK;
 }
 
+static void ap_http_insert_filter(request_rec *r)
+{
+    ap_add_output_filter("BYTERANGE", NULL, r, r->connection);
+    ap_add_output_filter("CONTENT_LENGTH", NULL, r, r->connection);
+    ap_add_output_filter("HTTP_HEADER", NULL, r, r->connection);
+}
+
 static void register_hooks(apr_pool_t *p)
 {
     ap_hook_pre_connection(ap_pre_http_connection,NULL,NULL,
@@ -304,6 +311,7 @@
     ap_hook_http_method(http_method,NULL,NULL,APR_HOOK_REALLY_LAST);
     ap_hook_default_port(http_port,NULL,NULL,APR_HOOK_REALLY_LAST);
 
+    ap_hook_insert_filter(ap_http_insert_filter, NULL, NULL, APR_HOOK_REALLY_LAST);
     ap_register_input_filter("HTTP_IN", ap_http_filter, AP_FTYPE_CONNECTION);
     ap_register_input_filter("DECHUNK", ap_dechunk_filter, AP_FTYPE_TRANSCODE);
     ap_register_output_filter("HTTP_HEADER", ap_http_header_filter, 
diff -r -u3 --exclude=CVS 
/home/minfrin/src/apache/pristine/httpd-2.0/modules/http/http_request.c 
httpd-2.0/modules/http/http_request.c
--- /home/minfrin/src/apache/pristine/httpd-2.0/modules/http/http_request.c     Thu 
May 10 10:29:33 2001
+++ httpd-2.0/modules/http/http_request.c       Mon May 21 00:35:39 2001
@@ -517,10 +517,6 @@
     new->output_filters  = r->connection->output_filters;
     new->input_filters   = r->connection->input_filters;
 
-    ap_add_output_filter("BYTERANGE", NULL, new, new->connection);
-    ap_add_output_filter("CONTENT_LENGTH", NULL, new, new->connection);
-    ap_add_output_filter("HTTP_HEADER", NULL, new, new->connection);
-
     apr_table_setn(new->subprocess_env, "REDIRECT_STATUS",
        apr_psprintf(r->pool, "%d", r->status));
 
diff -r -u3 --exclude=CVS 
/home/minfrin/src/apache/pristine/httpd-2.0/modules/metadata/mod_headers.c 
httpd-2.0/modules/metadata/mod_headers.c
--- /home/minfrin/src/apache/pristine/httpd-2.0/modules/metadata/mod_headers.c  Sun 
May 20 16:35:17 2001
+++ httpd-2.0/modules/metadata/mod_headers.c    Mon May 21 01:40:04 2001
@@ -231,7 +231,7 @@
 }
 
 /* handle RequestHeader directive */
-static const char *header_in_cmd(cmd_parms *cmd, void *indirconf,
+static const char *request_header_cmd(cmd_parms *cmd, void *indirconf,
                               const char *action, const char *inhdr,
                               const char *value)
 {
@@ -317,7 +317,7 @@
 {
     AP_INIT_TAKE23("Header", header_cmd, NULL, OR_FILEINFO,
                    "an action, header and value"),
-    AP_INIT_TAKE23("RequestHeader", header_in_cmd, NULL, OR_FILEINFO,
+    AP_INIT_TAKE23("RequestHeader", request_header_cmd, NULL, OR_FILEINFO,
                    "an action, header and value"),
     {NULL}
 };
@@ -326,7 +326,7 @@
 {
     ap_hook_insert_filter(ap_headers_insert_output_filter, NULL, NULL, APR_HOOK_LAST);
     ap_hook_fixups(ap_headers_fixup, NULL, NULL, APR_HOOK_LAST);
-    ap_register_output_filter("FIXUP_HEADERS_OUT", ap_headers_output_filter, 
AP_FTYPE_CONTENT);
+    ap_register_output_filter("FIXUP_HEADERS_OUT", ap_headers_output_filter, 
+AP_FTYPE_HTTP_HEADER);
 }
 
 module AP_MODULE_DECLARE_DATA headers_module =
diff -r -u3 --exclude=CVS 
/home/minfrin/src/apache/pristine/httpd-2.0/server/protocol.c 
httpd-2.0/server/protocol.c
--- /home/minfrin/src/apache/pristine/httpd-2.0/server/protocol.c       Thu May 10 
10:32:07 2001
+++ httpd-2.0/server/protocol.c Mon May 21 00:37:21 2001
@@ -590,10 +590,6 @@
                      ? r->server->keep_alive_timeout * APR_USEC_PER_SEC
                      : r->server->timeout * APR_USEC_PER_SEC));
                      
-    ap_add_output_filter("BYTERANGE", NULL, r, r->connection);
-    ap_add_output_filter("CONTENT_LENGTH", NULL, r, r->connection);
-    ap_add_output_filter("HTTP_HEADER", NULL, r, r->connection);
-
     /* Get the request... */
     if (!read_request_line(r)) {
         if (r->status == HTTP_REQUEST_URI_TOO_LARGE) {

S/MIME Cryptographic Signature

Reply via email to