From 3560f2e01526672460eb4107c049dfd17dc18f95 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sat, 16 Jan 2010 20:32:09 +0000 Subject: [PATCH] Turn static function get_server_name_for_url() into public function ap_get_server_name_for_url() and use it where appropriate. This fixes mod_rewrite generating invalid URLs for redirects to IPv6 literal addresses. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@900022 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 5 +++++ include/ap_mmn.h | 3 ++- include/http_core.h | 9 +++++++++ modules/mappers/mod_rewrite.c | 4 ++-- modules/ssl/ssl_engine_kernel.c | 2 +- server/core.c | 4 ++-- 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 0ef44b57e4..f2e79f286e 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,11 @@ Changes with Apache 2.3.5 + *) Turn static function get_server_name_for_url() into public + ap_get_server_name_for_url() and use it where appropriate. This + fixes mod_rewrite generating invalid URLs for redirects to IPv6 + literal addresses. [Stefan Fritsch] + *) mod_ldap: Introduce new config option LDAPTimeout to set the timeout for LDAP operations like bind and search. [Stefan Fritsch] diff --git a/include/ap_mmn.h b/include/ap_mmn.h index ceb8f0b98c..47c0bb6bfc 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -211,6 +211,7 @@ * 20091230.0 (2.3.5-dev) Move ftp_directory_charset from proxy_dir_conf * to proxy_ftp_dir_conf(mod_proxy_ftp) * 20091230.1 (2.3.5-dev) add util_ldap_state_t.opTimeout + * 20091230.2 (2.3.5-dev) add ap_get_server_name_for_url() * */ @@ -219,7 +220,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20091230 #endif -#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/include/http_core.h b/include/http_core.h index 2583493609..f6d81a4069 100644 --- a/include/http_core.h +++ b/include/http_core.h @@ -210,6 +210,15 @@ AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri, request_rec */ AP_DECLARE(const char *) ap_get_server_name(request_rec *r); +/** + * Get the current server name from the request for the purposes + * of using in a URL. If the server name is an IPv6 literal + * address, it will be returned in URL format (e.g., "[fe80::1]"). + * @param r The current request + * @return the server name + */ +AP_DECLARE(const char *) ap_get_server_name_for_url(request_rec *r); + /** * Get the current server port * @param r The current request diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index dd01c813ab..1fbd917620 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -881,7 +881,7 @@ static void fully_qualify_uri(request_rec *r) char *thisport; int port; - thisserver = ap_get_server_name(r); + thisserver = ap_get_server_name_for_url(r); port = ap_get_server_port(r); thisport = ap_is_default_port(port, r) ? "" @@ -4402,7 +4402,7 @@ static int hook_uri2file(request_rec *r) */ /* add the canonical URI of this URL */ - thisserver = ap_get_server_name(r); + thisserver = ap_get_server_name_for_url(r); port = ap_get_server_port(r); if (ap_is_default_port(port, r)) { thisport = ""; diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c index fdfcee2b5d..c9cd164661 100644 --- a/modules/ssl/ssl_engine_kernel.c +++ b/modules/ssl/ssl_engine_kernel.c @@ -151,7 +151,7 @@ int ssl_hook_ReadReq(request_rec *r) thisurl = ap_escape_html(r->pool, apr_psprintf(r->pool, "https://%s%s/", - ap_get_server_name(r), + ap_get_server_name_for_url(r), thisport)); errmsg = apr_psprintf(r->pool, diff --git a/server/core.c b/server/core.c index 7c37861aaf..239c7840f9 100644 --- a/server/core.c +++ b/server/core.c @@ -924,7 +924,7 @@ AP_DECLARE(const char *) ap_get_server_name(request_rec *r) * of using in a URL. If the server name is an IPv6 literal * address, it will be returned in URL format (e.g., "[fe80::1]"). */ -static const char *get_server_name_for_url(request_rec *r) +AP_DECLARE(const char *) ap_get_server_name_for_url(request_rec *r) { const char *plain_server_name = ap_get_server_name(r); @@ -987,7 +987,7 @@ AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r) { unsigned port = ap_get_server_port(r); - const char *host = get_server_name_for_url(r); + const char *host = ap_get_server_name_for_url(r); if (ap_is_default_port(port, r)) { return apr_pstrcat(p, ap_http_scheme(r), "://", host, uri, NULL); -- 2.40.0