On Wed, Mar 03, 2004 at 07:47:21PM +0100, André Malo wrote:
> * Joe Orton <[EMAIL PROTECTED]> wrote:
> 
> > > Sounds good. But we'd need to hook the variable creation earlier anyway,
> > > since ssl_var_lookup finally just uses r->subprocess_env.
> > 
> > I don't see how that follows; if you're just trying to retrieve a
> > non-SSL subprocess_env var via ssl_var_lookup(), why would registering
> > the SSL variables earlier make a difference?
> 
> Because ssl_var_lookup uses r->subprocess_env, which is not filled at early
> stage (and never filled without SSLOptions +StdEnvVars) with SSL stuff.

I think you've got it backwards: ssl_var_lookup always generates the SSL
variables on the fly; it is used by the fixup handler to populate
r->subprocess_env if +StdEnvVars, but works exactly the same regardless
of that config option.

What I'm proposing is something as simple as below, which lets you do
"RewriteCond %{SSL:HTTPS} =on" without needing +StdEnvVars...  are we on
the same page?

--- modules/mappers/mod_rewrite.c       9 Feb 2004 20:29:20 -0000       1.252
+++ modules/mappers/mod_rewrite.c       3 Mar 2004 20:54:15 -0000
@@ -89,6 +89,8 @@
 #include "http_protocol.h"
 #include "http_vhost.h"
 
+#include "mod_ssl.h"
+
 #include "mod_rewrite.h"
 
 #if !defined(OS2) && !defined(WIN32) && !defined(BEOS)  && !defined(NETWARE)
@@ -380,6 +382,7 @@
 static apr_global_mutex_t *rewrite_log_lock = NULL;
 #endif
 
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *rewrite_ssl_lookup = NULL;
 
 /*
  * +-------------------------------------------------------+
@@ -1610,6 +1613,10 @@
                 result = getenv(var);
             }
         }
+        else if (var[4] && !strncasecmp(var, "SSL", 3)) {
+            result = rewrite_ssl_lookup(r->pool, r->server, r->connection, r,
+                                        var + 4);
+        }
     }
     else if (var[4] == ':') {
         if (var[5]) {
@@ -3995,6 +4002,8 @@
             }
         }
     }
+
+    rewrite_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
 
     return OK;
 }

Reply via email to