PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_cache: Make caching of reverse SSL proxies possible again.
- PR 39593.
- Trunk version of patch:
- http://svn.apache.org/viewvc?rev=407357&view=rev
- http://svn.apache.org/viewvc?rev=408154&view=rev
- http://svn.apache.org/viewvc?rev=408729&view=rev
- 2.2.x version of patch:
- Trunk version works
- +1: rpluem, jim, pquerna
-
* Add optional 'scheme://' part to ServerName directive for cases
where httpd runs behind an external SSL processor and has to
learn from its configuration how to generate correct
apr_status_t cache_generate_key_default(request_rec *r, apr_pool_t* p,
char**key)
{
- char *port_str, *scheme, *hn;
- const char * hostname;
+ char *port_str, *hn, *lcs;
+ const char *hostname, *scheme;
int i;
/*
}
else if(r->parsed_uri.hostname) {
/* Copy the parsed uri hostname */
- hn = apr_pcalloc(p, strlen(r->parsed_uri.hostname) + 1);
- for (i = 0; r->parsed_uri.hostname[i]; i++) {
- hn[i] = apr_tolower(r->parsed_uri.hostname[i]);
- }
+ hn = apr_pstrdup(p, r->parsed_uri.hostname);
+ ap_str_tolower(hn);
/* const work-around */
hostname = hn;
}
hostname = "_default_";
}
- /* Copy the scheme, ensuring that it is lower case. If the parsed uri
- * contains no string or if this is not a proxy request.
+ /*
+ * Copy the scheme, ensuring that it is lower case. If the parsed uri
+ * contains no string or if this is not a proxy request get the http
+ * scheme for this request. As r->parsed_uri.scheme is not set if this
+ * is a reverse proxy request, it is ensured that the cases
+ * "no proxy request" and "reverse proxy request" are handled in the same
+ * manner (see above why this is needed).
*/
if (r->proxyreq && r->parsed_uri.scheme) {
- /* Copy the scheme */
- scheme = apr_pcalloc(p, strlen(r->parsed_uri.scheme) + 1);
- for (i = 0; r->parsed_uri.scheme[i]; i++) {
- scheme[i] = apr_tolower(r->parsed_uri.scheme[i]);
- }
+ /* Copy the scheme and lower-case it */
+ lcs = apr_pstrdup(p, r->parsed_uri.scheme);
+ ap_str_tolower(lcs);
+ /* const work-around */
+ scheme = lcs;
}
else {
- scheme = "http";
+ scheme = ap_http_scheme(r);
}
- /* If the content is locally generated, use the port-number of the
- * current server. Otherwise. copy the URI's port-string (which may be a
- * service name). If the URI contains no port-string, use apr-util's
- * notion of the default port for that scheme - if available.
+ /*
+ * If this is a proxy request, but not a reverse proxy request (see comment
+ * above why these cases must be handled in the same manner), copy the
+ * URI's port-string (which may be a service name). If the URI contains
+ * no port-string, use apr-util's notion of the default port for that
+ * scheme - if available. Otherwise use the port-number of the current
+ * server.
*/
- if(r->proxyreq) {
+ if(r->proxyreq && (r->proxyreq != PROXYREQ_REVERSE)) {
if (r->parsed_uri.port_str) {
port_str = apr_pcalloc(p, strlen(r->parsed_uri.port_str) + 2);
port_str[0] = ':';