This patch makes Set...Filter replace all configed filters and
introduces Push...Filters to provide the current Set...Filter
functionality.
- Barrie
diff -ur httpd-2.0/include/http_core.h httpd-2.0-f/include/http_core.h
--- httpd-2.0/include/http_core.h Fri Apr 13 01:19:25 2001
+++ httpd-2.0-f/include/http_core.h Thu May 17 11:59:23 2001
@@ -464,6 +464,8 @@
apr_array_header_t *output_filters;
apr_array_header_t *input_filters;
+ int clear_output_filters;
+ int clear_input_filters;
} core_dir_config;
/* Per-server core configuration */
Only in httpd-2.0-f/server: .core.c.swp
diff -ur httpd-2.0/server/core.c httpd-2.0-f/server/core.c
--- httpd-2.0/server/core.c Thu May 10 13:27:57 2001
+++ httpd-2.0-f/server/core.c Thu May 17 14:02:59 2001
@@ -299,9 +299,16 @@
conf->add_default_charset_name = new->add_default_charset_name;
}
}
- conf->output_filters = apr_array_append(a, base->output_filters,
- new->output_filters);
- conf->input_filters = apr_array_append(a, base->input_filters,
+
+ if ( new->clear_output_filters )
+ conf->output_filters = new->output_filters;
+ else
+ conf->output_filters = apr_array_append(a, base->output_filters,
+ new->output_filters);
+ if ( new->clear_input_filters )
+ conf->input_filters = new->input_filters;
+ else
+ conf->input_filters = apr_array_append(a, base->input_filters,
new->input_filters);
return (void*)conf;
@@ -1887,7 +1894,7 @@
return NULL;
}
-static const char *add_filter(cmd_parms *cmd, void *dummy, const char *arg)
+static const char *add_output_filter(cmd_parms *cmd, void *dummy, const char *arg)
{
core_dir_config *conf = dummy;
char **newfilter;
@@ -1907,6 +1914,22 @@
return NULL;
}
+static const char *set_output_filter(cmd_parms *cmd, void *dummy, const char *arg)
+{
+ core_dir_config *conf = dummy;
+
+ conf->clear_output_filters = 1;
+ return add_output_filter( cmd, dummy, arg ) ;
+}
+
+static const char *set_input_filter(cmd_parms *cmd, void *dummy, const char *arg)
+{
+ core_dir_config *conf = dummy;
+
+ conf->clear_input_filters = 1 ;
+ return add_input_filter( cmd, dummy, arg ) ;
+}
+
static const char *set_server_string_slot(cmd_parms *cmd, void *dummy,
const char *arg)
{
@@ -2848,10 +2871,14 @@
* to leave it just in the conf file. Other should feel free to disagree
* with me. Rbb.
*/
-AP_INIT_ITERATE("SetOutputFilter", add_filter, NULL, ACCESS_CONF,
- "filters to be run"),
-AP_INIT_ITERATE("SetInputFilter", add_input_filter, NULL, ACCESS_CONF,
- "filters to be run on the request body"),
+AP_INIT_ITERATE("PushOutputFilter", add_output_filter, NULL, ACCESS_CONF,
+ "additional filters to be run"),
+AP_INIT_ITERATE("PushInputFilter", add_input_filter, NULL, ACCESS_CONF,
+ "additional filters to be run on the request body"),
+AP_INIT_ITERATE("SetOutputFilter", set_output_filter, NULL, ACCESS_CONF,
+ "replace filters to be run"),
+AP_INIT_ITERATE("SetInputFilter", set_input_filter, NULL, ACCESS_CONF,
+ "replace filters to be run on the request body"),
{ NULL }
};