]> granicus.if.org Git - apache/commitdiff
Fix potential proxy segfault
authorNick Kew <niq@apache.org>
Fri, 31 Aug 2007 10:13:59 +0000 (10:13 +0000)
committerNick Kew <niq@apache.org>
Fri, 31 Aug 2007 10:13:59 +0000 (10:13 +0000)
PR 40756.  Patch adapted from 2.0 patch by Trevin Beattie

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@571414 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/proxy/mod_proxy_connect.c

diff --git a/CHANGES b/CHANGES
index b6ae84446efe1e6acda21e9aea8373bd94e22765..ebcb0a7dbfd39cdd59f82e708deb7b0b83591f4d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.3.0
 
+  *) mod_proxy_connect: avoid segfault on DNS lookup failure.
+     PR 40756 [Trevin Beattie <tbeattie boingo.com>]
+
   *) mod_proxy: enable Ignore Errors option on ProxyPass Status.
      PR 43167 [Francisco Gimeno <kikov kikov.org>
 
index eb9b7de77a5b6994bc629bedb17586f1872f5246..0c2d67076f31cf236eae20da0f8588aa4c78405a 100644 (file)
@@ -125,18 +125,24 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker,
 
     /* are we connecting directly, or via a proxy? */
     if (proxyname) {
-    connectname = proxyname;
-    connectport = proxyport;
+        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;
+        connectname = uri.hostname;
+        connectport = uri.port;
+        connect_addr = uri_addr;
     }
     ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
          "proxy: CONNECT: connecting to remote proxy %s on port %d", connectname, connectport);
 
+    if (APR_SUCCESS != err) {
+       return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_pstrcat(p,
+                            "DNS lookup failure for: ",
+                            uri.hostname, NULL));
+    }
     /* check if ProxyBlock directive on this host */
     if (OK != ap_proxy_checkproxyblock(r, conf, uri_addr)) {
     return ap_proxyerror(r, HTTP_FORBIDDEN,