]> granicus.if.org Git - apache/commitdiff
Enable mod_rewrite to recognize SSL variables (using ssl_var_lookup)
authorMadhusudan Mathihalli <madhum@apache.org>
Tue, 9 Mar 2004 17:33:15 +0000 (17:33 +0000)
committerMadhusudan Mathihalli <madhum@apache.org>
Tue, 9 Mar 2004 17:33:15 +0000 (17:33 +0000)
Submitted by: Joe Orton
Reviewed by: Madhusudan Mathihalli

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102904 13f79535-47bb-0310-9956-ffa450edef68

modules/mappers/mod_rewrite.c

index 94ef586bc3d77087cbdf6efd78bfce0b64879cb5..15976223c4a711ca4b77360d8107b64670f1cdea 100644 (file)
@@ -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,9 @@ static apr_global_mutex_t *rewrite_mapr_lock_acquire = NULL;
 static apr_global_mutex_t *rewrite_log_lock = NULL;
 #endif
 
+/* Optional functions imported from mod_ssl when loaded: */
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *rewrite_ssl_lookup = NULL;
+static APR_OPTIONAL_FN_TYPE(ssl_is_https) *rewrite_is_https = NULL;
 
 /*
  * +-------------------------------------------------------+
@@ -1610,6 +1615,10 @@ static char *lookup_variable(char *var, rewrite_ctx *ctx)
                 result = getenv(var);
             }
         }
+        else if (var[4] && !strncasecmp(var, "SSL", 3) && rewrite_ssl_lookup) {
+            result = rewrite_ssl_lookup(r->pool, r->server, r->connection, r,
+                                        var + 4);
+        }
     }
     else if (var[4] == ':') {
         if (var[5]) {
@@ -1693,6 +1702,13 @@ static char *lookup_variable(char *var, rewrite_ctx *ctx)
                 return (char *)result;
             }
             break;
+            
+        case  5:
+            if (!strcmp(var, "HTTPS")) {
+                int flag = rewrite_is_https && rewrite_is_https(r->connection);
+                return apr_pstrdup(r->pool, flag ? "on" : "off");
+            }
+            break;
 
         case  8:
             switch (var[6]) {
@@ -3996,6 +4012,9 @@ static int post_config(apr_pool_t *p,
         }
     }
 
+    rewrite_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
+    rewrite_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
+
     return OK;
 }