You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by jo...@apache.org on 2012/07/24 14:17:00 UTC

svn commit: r1365001 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/proxy/mod_proxy.h modules/proxy/mod_proxy_connect.c modules/proxy/mod_proxy_ftp.c modules/proxy/proxy_util.c

Author: jorton
Date: Tue Jul 24 12:17:00 2012
New Revision: 1365001

URL: http://svn.apache.org/viewvc?rev=1365001&view=rev
Log:
Fix handling of ProxyBlock if a forward proxy is configured, and fix
mod_proxy_connect to avoid an inappropriate DNS lookup:

* modules/proxy/proxy_util.c (ap_proxy_checkproxyblock): Take hostname
  argument, make address argument optional.  Check names against
  hostname arg, omit if addr not given.
  (ap_proxy_determine_connection): Adjust for the above; pass hostname
  from URI not the next hop.

* modules/proxy/mod_proxy_ftp.c (proxy_ftp_handler): Adjust for
  ap_proxy_checkproxyblock change.

* modules/proxy/mod_proxy_connect.c (proxy_connect_handler): Adjust
  similarly, and avoid the DNS lookup on the request-URI hostname if a
  proxy is used.

* include/ap_mmn.h: Bump MMN.

PR: 43697

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/include/ap_mmn.h
    httpd/httpd/trunk/modules/proxy/mod_proxy.h
    httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
    httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c
    httpd/httpd/trunk/modules/proxy/proxy_util.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Tue Jul 24 12:17:00 2012
@@ -1,6 +1,12 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_proxy: Check hostname from request URI against ProxyBlock list,
+     not forward proxy, if ProxyRemote* is configured.  [Joe Orton]
+
+  *) mod_proxy_connect: Avoid DNS lookup on hostname from request URI 
+     if ProxyRemote* is configured.  PR 43697.  [Joe Orton]
+
   *) mod_lbmethod_heartbeat, mod_heartmonitor: Respect DefaultRuntimeDir/
      DEFAULT_REL_RUNTIMEDIR for the heartbeat storage file.  [Jeff Trawick]
 

Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Tue Jul 24 12:17:00 2012
@@ -397,14 +397,15 @@
  * 20120211.2 (2.5.0-dev)  Add ap_runtime_dir_relative
  * 20120211.3 (2.5.0-dev)  Add forcerecovery to proxy_balancer_shared struct
  * 20120211.4 (2.5.0-dev)  Add missing HTTP status codes registered with IANA.
+ * 20120724.0 (2.5.0-dev)  Add hostname argument to ap_proxy_checkproxyblock.
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
 
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20120211
+#define MODULE_MAGIC_NUMBER_MAJOR 20120724
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 4                   /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 0                   /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Tue Jul 24 12:17:00 2012
@@ -533,7 +533,19 @@ PROXY_DECLARE(char *)ap_proxy_canonenc(a
 PROXY_DECLARE(char *)ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
                                            char **passwordp, char **hostp, apr_port_t *port);
 PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message);
-PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr);
+
+/** Test whether the hostname/address of the request are blocked by the ProxyBlock
+ * configuration.
+ * @param r         request
+ * @param conf      server configuration
+ * @param hostname  hostname from request URI
+ * @param addr      resolved address of hostname, or NULL if not known
+ * @return OK on success, or else an errro
+ */
+PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, 
+                                            const char *hostname, apr_sockaddr_t *addr);
+
+
 PROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r);
 /* DEPRECATED (will be replaced with ap_proxy_connect_backend */
 PROXY_DECLARE(int) ap_proxy_connect_to_backend(apr_socket_t **, const char *, apr_sockaddr_t *, const char *, proxy_server_conf *, request_rec *);

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c Tue Jul 24 12:17:00 2012
@@ -205,7 +205,7 @@ static int proxy_connect_handler(request
     conn_rec *backconn;
 
     apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
-    apr_status_t err, rv;
+    apr_status_t rv;
     apr_size_t nbytes;
     char buffer[HUGE_STRING_LEN];
     apr_socket_t *client_socket = ap_get_conn_socket(c);
@@ -216,7 +216,7 @@ static int proxy_connect_handler(request
     const apr_pollfd_t *signalled;
     apr_int32_t pollcnt, pi;
     apr_int16_t pollevent;
-    apr_sockaddr_t *uri_addr, *connect_addr;
+    apr_sockaddr_t *nexthop;
 
     apr_uri_t uri;
     const char *connectname;
@@ -246,37 +246,32 @@ static int proxy_connect_handler(request
     ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01019)
                   "connecting %s to %s:%d", url, uri.hostname, uri.port);
 
-    /* do a DNS lookup for the destination host */
-    err = apr_sockaddr_info_get(&uri_addr, uri.hostname, APR_UNSPEC, uri.port,
-                                0, p);
-    if (APR_SUCCESS != err) {
+    /* Determine host/port of next hop; from request URI or of a proxy. */
+    connectname = proxyname ? proxyname : uri.hostname;
+    connectport = proxyname ? proxyport : uri.port;
+
+    /* Do a DNS lookup for the next hop */
+    rv = apr_sockaddr_info_get(&nexthop, connectname, APR_UNSPEC, 
+                               connectport, 0, p);
+    if (rv != APR_SUCCESS) {
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO()
+                      "failed to resolve hostname '%s'", connectname);
         return ap_proxyerror(r, HTTP_BAD_GATEWAY,
                              apr_pstrcat(p, "DNS lookup failure for: ",
-                                         uri.hostname, NULL));
+                                         connectname, NULL));
     }
 
-    /* are we connecting directly, or via a proxy? */
-    if (proxyname) {
-        connectname = proxyname;
-        connectport = proxyport;
-        err = apr_sockaddr_info_get(&connect_addr, proxyname, APR_UNSPEC,
-                                    proxyport, 0, p);
-    }
-    else {
-        connectname = uri.hostname;
-        connectport = uri.port;
-        connect_addr = uri_addr;
+    /* Check ProxyBlock directive on the hostname/address.  */
+    if (ap_proxy_checkproxyblock(r, conf, uri.hostname, 
+                                 proxyname ? NULL : nexthop) != OK) {
+        return ap_proxyerror(r, HTTP_FORBIDDEN,
+                             "Connect to remote machine blocked");
     }
+
     ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r,
                   "connecting to remote proxy %s on port %d",
                   connectname, connectport);
 
-    /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, uri_addr)) {
-        return ap_proxyerror(r, HTTP_FORBIDDEN,
-                             "Connect to remote machine blocked");
-    }
-
     /* Check if it is an allowed port */
     if(!allowed_port(c_conf, uri.port)) {
               return ap_proxyerror(r, HTTP_FORBIDDEN,
@@ -289,15 +284,6 @@ static int proxy_connect_handler(request
      * We have determined who to connect to. Now make the connection.
      */
 
-    /* get all the possible IP addresses for the destname and loop through them
-     * until we get a successful connection
-     */
-    if (APR_SUCCESS != err) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             apr_pstrcat(p, "DNS lookup failure for: ",
-                                         connectname, NULL));
-    }
-
     /*
      * At this point we have a list of one or more IP addresses of
      * the machine to connect to. If configured, reorder this
@@ -308,7 +294,7 @@ static int proxy_connect_handler(request
      * For now we do nothing, ie we get DNS round robin.
      * XXX FIXME
      */
-    failed = ap_proxy_connect_to_backend(&sock, "CONNECT", connect_addr,
+    failed = ap_proxy_connect_to_backend(&sock, "CONNECT", nexthop,
                                          connectname, conf, r);
 
     /* handle a permanent error from the above loop */
@@ -355,7 +341,7 @@ static int proxy_connect_handler(request
         /* peer reset */
         ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(01021)
                       "an error occurred creating a new connection "
-                      "to %pI (%s)", connect_addr, connectname);
+                      "to %pI (%s)", nexthop, connectname);
         apr_socket_close(sock);
         return HTTP_INTERNAL_SERVER_ERROR;
     }
@@ -370,7 +356,7 @@ static int proxy_connect_handler(request
 
     ap_log_rerror(APLOG_MARK, APLOG_TRACE3, 0, r,
                   "connection complete to %pI (%s)",
-                  connect_addr, connectname);
+                  nexthop, connectname);
     apr_table_setn(r->notes, "proxy-source-port", apr_psprintf(r->pool, "%hu",
                    backconn->local_addr->port));
 

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c Tue Jul 24 12:17:00 2012
@@ -1143,7 +1143,7 @@ static int proxy_ftp_handler(request_rec
     }
 
     /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, connect_addr)) {
+    if (OK != ap_proxy_checkproxyblock(r, conf, connectname, connect_addr)) {
         return ap_proxyerror(r, HTTP_FORBIDDEN,
                              "Connect to remote machine blocked");
     }

Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=1365001&r1=1365000&r2=1365001&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Tue Jul 24 12:17:00 2012
@@ -759,29 +759,36 @@ static int proxy_match_word(struct dirco
     return host != NULL && ap_strstr_c(host, This->name) != NULL;
 }
 
-/* checks whether a host in uri_addr matches proxyblock */
 PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf,
-                             apr_sockaddr_t *uri_addr)
+                                            const char *hostname, apr_sockaddr_t *addr)
 {
     int j;
-    apr_sockaddr_t * src_uri_addr = uri_addr;
+
     /* XXX FIXME: conf->noproxies->elts is part of an opaque structure */
     for (j = 0; j < conf->noproxies->nelts; j++) {
         struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
         struct apr_sockaddr_t *conf_addr = npent[j].addr;
-        uri_addr = src_uri_addr;
+
         ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
                       "checking remote machine [%s] against [%s]",
-                      uri_addr->hostname, npent[j].name);
-        if (ap_strstr_c(uri_addr->hostname, npent[j].name)
+                      hostname, npent[j].name);
+        if (ap_strstr_c(hostname, npent[j].name)
             || npent[j].name[0] == '*') {
             ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(00916)
                           "connect to remote machine %s blocked: name %s "
-                          "matched", uri_addr->hostname, npent[j].name);
+                          "matched", hostname, npent[j].name);
             return HTTP_FORBIDDEN;
         }
+
+        /* No IP address checks if no IP address was passed in,
+         * i.e. the forward address proxy case, where this server does
+         * not resolve the hostname.  */
+        if (!addr)
+            continue;
+
         while (conf_addr) {
-            uri_addr = src_uri_addr;
+            apr_sockaddr_t *uri_addr = addr;
+
             while (uri_addr) {
                 char *conf_ip;
                 char *uri_ip;
@@ -792,8 +799,8 @@ PROXY_DECLARE(int) ap_proxy_checkproxybl
                               uri_ip);
                 if (!apr_strnatcasecmp(conf_ip, uri_ip)) {
                     ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(00917)
-                                 "connect to remote machine %s blocked: "
-                                 "IP %s matched", uri_addr->hostname, conf_ip);
+                                  "connect to remote machine %s blocked: "
+                                  "IP %s matched", hostname, conf_ip);
                     return HTTP_FORBIDDEN;
                 }
                 uri_addr = uri_addr->next;
@@ -2128,7 +2135,8 @@ ap_proxy_determine_connection(apr_pool_t
         }
     }
     /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, conn->addr)) {
+    if (OK != ap_proxy_checkproxyblock(r, conf, uri->hostname, 
+                                       proxyname ? NULL : conn->addr)) {
         return ap_proxyerror(r, HTTP_FORBIDDEN,
                              "Connect to remote machine blocked");
     }



Re: svn commit: r1365001 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/proxy/mod_proxy.h modules/proxy/mod_proxy_connect.c modules/proxy/mod_proxy_ftp.c modules/proxy/proxy_util.c

Posted by Guenter Knauf <fu...@apache.org>.
Hi Joe,
Am 21.08.2012 09:32, schrieb Joe Orton:
> On Mon, Aug 20, 2012 at 10:38:14AM +0200, Guenter Knauf wrote:
>> your commit is missing a log number ...
>>
>> mod_proxy_connect.c
>> .\mod_proxy_connect.c(257) : warning C4003: not enough actual
>> parameters for macro 'APLOGNO'
>
> Damn, sorry about that Guenter, does this break the build for you?
naaa, only a warning ;-)
> Fixed in r1375407.
cool, thanks!

Gün.




Re: svn commit: r1365001 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/proxy/mod_proxy.h modules/proxy/mod_proxy_connect.c modules/proxy/mod_proxy_ftp.c modules/proxy/proxy_util.c

Posted by Joe Orton <jo...@redhat.com>.
On Mon, Aug 20, 2012 at 10:38:14AM +0200, Guenter Knauf wrote:
> Hi Joe,
> your commit is missing a log number ...
> 
> mod_proxy_connect.c
> .\mod_proxy_connect.c(257) : warning C4003: not enough actual
> parameters for macro 'APLOGNO'

Damn, sorry about that Guenter, does this break the build for you?   
Fixed in r1375407.

Regards, Joe

Re: svn commit: r1365001 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/proxy/mod_proxy.h modules/proxy/mod_proxy_connect.c modules/proxy/mod_proxy_ftp.c modules/proxy/proxy_util.c

Posted by Guenter Knauf <fu...@apache.org>.
Hi Joe,
your commit is missing a log number ...

mod_proxy_connect.c
.\mod_proxy_connect.c(257) : warning C4003: not enough actual parameters 
for macro 'APLOGNO'


Am 24.07.2012 14:17, schrieb jorton@apache.org:
> Author: jorton
> Date: Tue Jul 24 12:17:00 2012
> New Revision: 1365001
>
> URL: http://svn.apache.org/viewvc?rev=1365001&view=rev
> Log:
> Fix handling of ProxyBlock if a forward proxy is configured, and fix
> mod_proxy_connect to avoid an inappropriate DNS lookup:
>
> * modules/proxy/proxy_util.c (ap_proxy_checkproxyblock): Take hostname
>    argument, make address argument optional.  Check names against
>    hostname arg, omit if addr not given.
>    (ap_proxy_determine_connection): Adjust for the above; pass hostname
>    from URI not the next hop.
>
> * modules/proxy/mod_proxy_ftp.c (proxy_ftp_handler): Adjust for
>    ap_proxy_checkproxyblock change.
>
> * modules/proxy/mod_proxy_connect.c (proxy_connect_handler): Adjust
>    similarly, and avoid the DNS lookup on the request-URI hostname if a
>    proxy is used.
>
> * include/ap_mmn.h: Bump MMN.
>
> PR: 43697
>
> Modified:
>      httpd/httpd/trunk/CHANGES
>      httpd/httpd/trunk/include/ap_mmn.h
>      httpd/httpd/trunk/modules/proxy/mod_proxy.h
>      httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
>      httpd/httpd/trunk/modules/proxy/mod_proxy_ftp.c
>      httpd/httpd/trunk/modules/proxy/proxy_util.c
>
...

> Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c?rev=1365001&r1=1365000&r2=1365001&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c (original)
> +++ httpd/httpd/trunk/modules/proxy/mod_proxy_connect.c Tue Jul 24 12:17:00 2012
> @@ -205,7 +205,7 @@ static int proxy_connect_handler(request
>       conn_rec *backconn;
>
>       apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
> -    apr_status_t err, rv;
> +    apr_status_t rv;
>       apr_size_t nbytes;
>       char buffer[HUGE_STRING_LEN];
>       apr_socket_t *client_socket = ap_get_conn_socket(c);
> @@ -216,7 +216,7 @@ static int proxy_connect_handler(request
>       const apr_pollfd_t *signalled;
>       apr_int32_t pollcnt, pi;
>       apr_int16_t pollevent;
> -    apr_sockaddr_t *uri_addr, *connect_addr;
> +    apr_sockaddr_t *nexthop;
>
>       apr_uri_t uri;
>       const char *connectname;
> @@ -246,37 +246,32 @@ static int proxy_connect_handler(request
>       ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01019)
>                     "connecting %s to %s:%d", url, uri.hostname, uri.port);
>
> -    /* do a DNS lookup for the destination host */
> -    err = apr_sockaddr_info_get(&uri_addr, uri.hostname, APR_UNSPEC, uri.port,
> -                                0, p);
> -    if (APR_SUCCESS != err) {
> +    /* Determine host/port of next hop; from request URI or of a proxy. */
> +    connectname = proxyname ? proxyname : uri.hostname;
> +    connectport = proxyname ? proxyport : uri.port;
> +
> +    /* Do a DNS lookup for the next hop */
> +    rv = apr_sockaddr_info_get(&nexthop, connectname, APR_UNSPEC,
> +                               connectport, 0, p);
> +    if (rv != APR_SUCCESS) {
> +        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO()
                                                        ^^^^^^^^^
> +                      "failed to resolve hostname '%s'", connectname);
>           return ap_proxyerror(r, HTTP_BAD_GATEWAY,
>                                apr_pstrcat(p, "DNS lookup failure for: ",
> -                                         uri.hostname, NULL));
> +                                         connectname, NULL));
>       }
>
> -    /* are we connecting directly, or via a proxy? */
> -    if (proxyname) {
> -        connectname = proxyname;
> -        connectport = proxyport;
> -        err = apr_sockaddr_info_get(&connect_addr, proxyname, APR_UNSPEC,
> -                                    proxyport, 0, p);
> -    }
> -    else {
> -        connectname = uri.hostname;
> -        connectport = uri.port;
> -        connect_addr = uri_addr;
> +    /* Check ProxyBlock directive on the hostname/address.  */
> +    if (ap_proxy_checkproxyblock(r, conf, uri.hostname,
> +                                 proxyname ? NULL : nexthop) != OK) {
> +        return ap_proxyerror(r, HTTP_FORBIDDEN,
> +                             "Connect to remote machine blocked");
>       }
> +
>       ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r,
>                     "connecting to remote proxy %s on port %d",
>                     connectname, connectport);
>
> -    /* check if ProxyBlock directive on this host */
> -    if (OK != ap_proxy_checkproxyblock(r, conf, uri_addr)) {
> -        return ap_proxyerror(r, HTTP_FORBIDDEN,
> -                             "Connect to remote machine blocked");
> -    }
> -
>       /* Check if it is an allowed port */
>       if(!allowed_port(c_conf, uri.port)) {
>                 return ap_proxyerror(r, HTTP_FORBIDDEN,
> @@ -289,15 +284,6 @@ static int proxy_connect_handler(request
>        * We have determined who to connect to. Now make the connection.
>        */
>
> -    /* get all the possible IP addresses for the destname and loop through them
> -     * until we get a successful connection
> -     */
> -    if (APR_SUCCESS != err) {
> -        return ap_proxyerror(r, HTTP_BAD_GATEWAY,
> -                             apr_pstrcat(p, "DNS lookup failure for: ",
> -                                         connectname, NULL));
> -    }
> -
>       /*
>        * At this point we have a list of one or more IP addresses of
>        * the machine to connect to. If configured, reorder this
> @@ -308,7 +294,7 @@ static int proxy_connect_handler(request
>        * For now we do nothing, ie we get DNS round robin.
>        * XXX FIXME
>        */
> -    failed = ap_proxy_connect_to_backend(&sock, "CONNECT", connect_addr,
> +    failed = ap_proxy_connect_to_backend(&sock, "CONNECT", nexthop,
>                                            connectname, conf, r);
>
>       /* handle a permanent error from the above loop */
> @@ -355,7 +341,7 @@ static int proxy_connect_handler(request
>           /* peer reset */
>           ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(01021)
>                         "an error occurred creating a new connection "
> -                      "to %pI (%s)", connect_addr, connectname);
> +                      "to %pI (%s)", nexthop, connectname);
>           apr_socket_close(sock);
>           return HTTP_INTERNAL_SERVER_ERROR;
>       }
> @@ -370,7 +356,7 @@ static int proxy_connect_handler(request
>
>       ap_log_rerror(APLOG_MARK, APLOG_TRACE3, 0, r,
>                     "connection complete to %pI (%s)",
> -                  connect_addr, connectname);
> +                  nexthop, connectname);
>       apr_table_setn(r->notes, "proxy-source-port", apr_psprintf(r->pool, "%hu",
>                      backconn->local_addr->port));
>
>

Gün.