summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Leggett <minfrin@apache.org>2015-09-26 22:44:23 +0000
committerGraham Leggett <minfrin@apache.org>2015-09-26 22:44:23 +0000
commitf6cd7e170fb7fc2f8ff3aa25d83bf01b17bfdb7c (patch)
tree70e384f984d763cf0d307304e2d018a08eb303eb
parent7b14c8c87650e9e71783f7b8c6d3faba1f2e850e (diff)
downloadhttpd-f6cd7e170fb7fc2f8ff3aa25d83bf01b17bfdb7c.tar.gz
util_script: Make REDIRECT_URL a complete URL (where set).
PR 57785 Submitted by: niq Reviewed by: jim, minfrin git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1705496 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--CHANGES2
-rw-r--r--STATUS5
-rw-r--r--server/util_script.c17
3 files changed, 17 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 562b1e0ee0..3155c1a343 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@
Changes with Apache 2.4.17
+ *) core/util_script: make REDIRECT_URL a full URL. PR 57785. [Nick Kew]
+
*) MPMs: Support SO_REUSEPORT to create multiple duplicated listener
records for scalability. [Yingqi Lu <yingqi.lu@intel.com>,
Jeff Trawick, Jim Jagielski, Yann Ylavic]
diff --git a/STATUS b/STATUS
index 41ce371fc3..8e6c179a03 100644
--- a/STATUS
+++ b/STATUS
@@ -109,11 +109,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- *) util_script: Make REDIRECT_URL a complete URL (where set).
- PR 57785
- trunk: http://svn.apache.org/viewvc?view=revision&revision=1677702
- 2.4.x: trunk patch applies.
- +1: niq, jim, minfrin
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
diff --git a/server/util_script.c b/server/util_script.c
index a8d9ebc4f0..14991cd0ff 100644
--- a/server/util_script.c
+++ b/server/util_script.c
@@ -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);
}
}