On Wed 01 Apr 2009, Dan Poirier wrote:
Lars Eilebrecht l...@eilebrecht.net writes:
Torsten Foertsch wrote:
[mod_include DATE_LOCAL bug]
Is this a known bug?
It's probably this one:
https://issues.apache.org/bugzilla/show_bug.cgi?id=39369
I think that's right. It's a test for Joe's fix for 39369, that has
only been applied to trunk. It would be nice to backport that fix so
the stable release doesn't fail tests (or else do something with that
test).
Here is a patch that works for 2.2.11. The mod_rerwite patch cures the
failure in t/modules/rewrite.t:
https://issues.apache.org/bugzilla/show_bug.cgi?id=46428
in 2.2.11.
The mod_info problem in my original mail was caused by my local setup
and is rather a Apache::Test problem (if at all). I have 2 modperl
versions installed, mod_perl-debug.so and mod_perl.so. That has
confused the test.
Should I attach these patches to the problem reports in bugzilla or is
that useless because they wont be backported officially?
Torsten
--
Need professional mod_perl support?
Just hire me: torsten.foert...@gmx.net
--- modules/mappers/mod_rewrite.c.xx 2009-04-01 11:28:01.0 +0200
+++ modules/mappers/mod_rewrite.c 2009-04-01 11:35:28.0 +0200
@@ -3869,7 +3869,20 @@
* ourself).
*/
if (p-flags RULEFLAG_PROXY) {
- /* PR#39746: Escaping things here gets repeated in mod_proxy */
+/* For rules evaluated in server context, the mod_proxy fixup
+ * hook can be relied upon to escape the URI as and when
+ * necessary, since it occurs later. If in directory context,
+ * the ordering of the fixup hooks is forced such that
+ * mod_proxy comes first, so the URI must be escaped here
+ * instead. See PR 39746, 46428, and other headaches. */
+if (ctx-perdir (p-flags RULEFLAG_NOESCAPE) == 0) {
+char *old_filename = r-filename;
+
+r-filename = ap_escape_uri(r-pool, r-filename);
+rewritelog((r, 2, ctx-perdir, escaped URI in per-dir context
+for proxy, %s - %s, old_filename, r-filename));
+}
+
fully_qualify_uri(r);
rewritelog((r, 2, ctx-perdir, forcing proxy-throughput with %s,
--- modules/filters/mod_include.c.orig 2008-03-17 15:32:47.0 +0100
+++ modules/filters/mod_include.c 2009-04-01 14:45:41.0 +0200
@@ -580,7 +580,7 @@
*p = '\0';
}
-static void add_include_vars(request_rec *r, const char *timefmt)
+static void add_include_vars(request_rec *r)
{
apr_table_t *e = r-subprocess_env;
char *t;
@@ -608,26 +608,17 @@
}
}
-static const char *add_include_vars_lazy(request_rec *r, const char *var)
+static const char *add_include_vars_lazy(request_rec *r, const char *var, const char *timefmt)
{
char *val;
if (!strcasecmp(var, DATE_LOCAL)) {
-include_dir_config *conf =
-(include_dir_config *)ap_get_module_config(r-per_dir_config,
- include_module);
-val = ap_ht_time(r-pool, r-request_time, conf-default_time_fmt, 0);
+val = ap_ht_time(r-pool, r-request_time, timefmt, 0);
}
else if (!strcasecmp(var, DATE_GMT)) {
-include_dir_config *conf =
-(include_dir_config *)ap_get_module_config(r-per_dir_config,
- include_module);
-val = ap_ht_time(r-pool, r-request_time, conf-default_time_fmt, 1);
+val = ap_ht_time(r-pool, r-request_time, timefmt, 1);
}
else if (!strcasecmp(var, LAST_MODIFIED)) {
-include_dir_config *conf =
-(include_dir_config *)ap_get_module_config(r-per_dir_config,
- include_module);
-val = ap_ht_time(r-pool, r-finfo.mtime, conf-default_time_fmt, 0);
+val = ap_ht_time(r-pool, r-finfo.mtime, timefmt, 0);
}
else if (!strcasecmp(var, USER_NAME)) {
if (apr_uid_name_get(val, r-finfo.user, r-pool) != APR_SUCCESS) {
@@ -684,7 +675,7 @@
val = apr_table_get(r-subprocess_env, var);
if (val == LAZY_VALUE) {
-val = add_include_vars_lazy(r, var);
+val = add_include_vars_lazy(r, var, ctx-time_str);
}
}
@@ -2423,7 +2414,7 @@
/* get value */
val_text = elts[i].val;
if (val_text == LAZY_VALUE) {
-val_text = add_include_vars_lazy(r, elts[i].key);
+val_text = add_include_vars_lazy(r, elts[i].key, ctx-time_str);
}
val_text = ap_escape_html(ctx-dpool, elts[i].val);
v_len = strlen(val_text);
@@ -3608,7 +3599,7 @@
* environment */
ap_add_common_vars(r);
ap_add_cgi_vars(r);
-add_include_vars(r, conf-default_time_fmt);
+add_include_vars(r);
}
/* Always unset the content-length. There is no way to know if
* the content will be modified at