Here's a slightly modified version of Joe's patch to 
- not segfault if rewrite_ssl_var_lookup is not available (mod_ssl not loaded)
- use SSL environment variables as %{ENV:HTTPS} or %{ENV:SSL_PROTOCOL}

I tested the patch with the following rules, and it appeared to work without causing 
any problems.

RewriteCond %{ENV:HTTPS} =on
RewriteCond %{ENV:SSL_CIPHER_USEKEYSIZE} =128
RewriteRule ^/manual.*html$ /manual.html [L]
RewriteRule ^.*$       -       [F]


-Madhu

Index: mod_rewrite.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/mappers/mod_rewrite.c,v
retrieving revision 1.252
diff -u -r1.252 mod_rewrite.c
--- mod_rewrite.c       9 Feb 2004 20:29:20 -0000       1.252
+++ mod_rewrite.c       3 Mar 2004 22:59:07 -0000
@@ -380,6 +380,13 @@
 static apr_global_mutex_t *rewrite_log_lock = NULL;
 #endif
 
+/* support for ssl_var_lookup() */
+APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
+                        (apr_pool_t *, server_rec *,
+                         conn_rec *, request_rec *,
+                         char *));
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *rewrite_ssl_var_lookup = NULL;
+
 
 /*
  * +-------------------------------------------------------+
@@ -1601,7 +1608,15 @@
     if (var[3] == ':') {
         if (var[4] && !strncasecmp(var, "ENV", 3)) {
             var += 4;
-            result = apr_table_get(r->notes, var);
+            if (!strncasecmp(var, "SSL", 3) || !strncasecmp(var, "HTTPS", 5)) {
+                result = ((rewrite_ssl_var_lookup == NULL) || (r == NULL))
+                           ?  (char *)NULL
+                           :  rewrite_ssl_var_lookup(r->pool, r->server,
+                                                     r->connection, r, var);
+            }
+            else {
+                result = apr_table_get(r->notes, var);
+            }
 
             if (!result) {
                 result = apr_table_get(r->subprocess_env, var);
@@ -3995,6 +4010,8 @@
             }
         }
     }
+
+    rewrite_ssl_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
 
     return OK;
 }

Reply via email to