]> granicus.if.org Git - apache/commitdiff
Make REDIRECT_URL a complete URL (where set).
authorNick Kew <niq@apache.org>
Mon, 4 May 2015 22:05:14 +0000 (22:05 +0000)
committerNick Kew <niq@apache.org>
Mon, 4 May 2015 22:05:14 +0000 (22:05 +0000)
PR 57785

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

CHANGES
server/util_script.c

diff --git a/CHANGES b/CHANGES
index d3c80fb718fe691349c1a97e756a3446273205fd..351deff5553085590e4859076f98c72928c5c260 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) core/util_script: make REDIRECT_URL a full URL.  PR 57785. [Nick Kew]
+
   *) mod_ssl: Check for the Entropy Gathering Daemon (EGD) availability at
      configure time (RAND_egd), and complain if SSLRandomSeed requires using
      it otherwise.  [Bernard Spil <pil.oss gmail com>, Stefan Sperling,
index a8d9ebc4f015194458d5f826c251c643c126c679..14991cd0ff21ba1378f379309ef4f380c05a5c2a 100644 (file)
@@ -282,12 +282,25 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
     /* Apache custom error responses. If we have redirected set two new vars */
 
     if (r->prev) {
+        /* PR#57785: reconstruct full URL here */
+        apr_uri_t *uri = &r->prev->parsed_uri;
+        if (!uri->scheme) {
+            uri->scheme = (char*)ap_http_scheme(r->prev);
+        }
+        if (!uri->port) {
+            uri->port = ap_get_server_port(r->prev);
+            uri->port_str = apr_psprintf(r->pool, "%u", uri->port);
+        }
+        if (!uri->hostname) {
+            uri->hostname = (char*)ap_get_server_name_for_url(r->prev);
+        }
         add_unless_null(e, "REDIRECT_QUERY_STRING", r->prev->args);
-        add_unless_null(e, "REDIRECT_URL", r->prev->uri);
+        add_unless_null(e, "REDIRECT_URL",
+                        apr_uri_unparse(r->pool, uri, 0));
     }
 
     if (e != r->subprocess_env) {
-      apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
+        apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
     }
 }