}
scheme = apr_pstrndup(r->pool, uri, p - uri);
+
+ if (strcmp(scheme, "auto") == 0) {
+ apr_table_set(r->notes, "auto", uri);
+ uri = apr_pstrcat(r->pool, ap_http_scheme(r), p, NULL);
+ }
/* Check URI's destination host against NoProxy hosts */
/* Bypass ProxyRemote server lookup if configured as NoProxy */
for (direct_connect = i = 0; i < conf->dirconn->nelts &&
/* handle the scheme */
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01143)
- "Running scheme %s handler (attempt %d)",
- scheme, attempts);
+ "Running scheme %s handler for %s (attempt %d)",
+ scheme, url, attempts);
AP_PROXY_RUN(r, worker, conf, url, attempts);
access_status = proxy_run_scheme_handler(r, worker, conf,
url, NULL, 0);
static char *de_socketfy(apr_pool_t *p, char *url)
{
- char *ptr;
+ char *ptr, *ret = url;
/*
* We could be passed a URL during the config stage that contains
* the UDS path... ignore it
if (!strncasecmp(url, "unix:", 5) &&
((ptr = ap_strchr(url, '|')) != NULL)) {
/* move past the 'unix:...|' UDS path info */
- char *ret, *c;
+ char *c;
ret = ptr + 1;
/* special case: "unix:....|scheme:" is OK, expand
return NULL;
}
if (c[1] == '\0') {
- return apr_pstrcat(p, ret, "//localhost", NULL);
- }
- else {
- return ret;
+ ret = apr_pstrcat(p, ret, "//localhost", NULL);
}
}
- return url;
+ return ret;
}
static const char *
access_status = proxy_run_pre_request(worker, balancer, r, conf, url);
if (access_status == DECLINED && *balancer == NULL) {
- *worker = ap_proxy_get_worker(r->pool, NULL, conf, *url);
+ const char *murl;
+ if ((murl = apr_table_get(r->notes, "auto")) == NULL) {
+ murl = *url;
+ }
+ *worker = ap_proxy_get_worker(r->pool, NULL, conf, murl);
if (*worker) {
ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
"%s: found worker %s for %s",