]> granicus.if.org Git - apache/commitdiff
Fix computation of the size of 'struct sockaddr_un' when passed to 'connect()'.
authorChristophe Jaillet <jailletc36@apache.org>
Sun, 1 Jun 2014 06:54:15 +0000 (06:54 +0000)
committerChristophe Jaillet <jailletc36@apache.org>
Sun, 1 Jun 2014 06:54:15 +0000 (06:54 +0000)
Use the same logic as the one in ' in 'proxy_util.c'.

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

CHANGES
modules/proxy/mod_proxy_fdpass.c

diff --git a/CHANGES b/CHANGES
index 841309b74629bf7f696c370f66dbcb63cc9f9932..f49bdf973ee3da0e86eb6ba6ad7b4762e54073ac 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_proxy_fdpass: Fix computation of the size of 'struct sockaddr_un'
+     when passed to 'connec()'.
+     [Graham Dumpleton <grahamd apache org>]
+
   *) mod_socache_shmcb: Correct counting of expirations for status display.
      Expirations happening during retrieval were not counted. [Rainer Jung]
 
index 26a7b13e53c15dc4c1eb29cfcbdb5b81c9584899..1e52d677a2cdc3c2bdf39fb188455437410094a8 100644 (file)
@@ -55,6 +55,7 @@ static int proxy_fdpass_canon(request_rec *r, char *url)
 }
 
 /* TODO: In APR 2.x: Extend apr_sockaddr_t to possibly be a path !!! */
+/* XXX: The same function exists in proxy_util.c */
 static apr_status_t socket_connect_un(apr_socket_t *sock,
                                       struct sockaddr_un *sa)
 {
@@ -73,8 +74,9 @@ static apr_status_t socket_connect_un(apr_socket_t *sock,
     }
 
     do {
-        rv = connect(rawsock, (struct sockaddr*)sa,
-                               sizeof(*sa) + strlen(sa->sun_path));
+        const socklen_t addrlen = APR_OFFSETOF(struct sockaddr_un, sun_path)
+                                  + strlen(sa->sun_path) + 1;
+        rv = connect(rawsock, (struct sockaddr*)sa, addrlen);
     } while (rv == -1 && errno == EINTR);
 
     if ((rv == -1) && (errno == EINPROGRESS || errno == EALREADY)