[tor-commits] [torsocks/master] Fix: use getsockname instead of getsockopt to get socket family

dgoulet at torproject.org dgoulet at torproject.org
Mon Nov 10 18:47:47 UTC 2014


commit 8406ef884df2fb7dbdfd475ea7e548a40dcdce3f
Author: David Goulet <dgoulet at ev0ke.net>
Date:   Sat Oct 25 12:33:00 2014 -0400

    Fix: use getsockname instead of getsockopt to get socket family
    
    Seems that OS X 10.10 Yosemite does not support the SO_DOMAIN anymore so
    use a known compatible call to get the socket family in recv(2).
    
    Fixes #13571
    
    Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
 src/lib/recv.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/lib/recv.c b/src/lib/recv.c
index b034d72..6e8a20a 100644
--- a/src/lib/recv.c
+++ b/src/lib/recv.c
@@ -60,23 +60,23 @@ static void close_fds(int *fds, size_t count)
  */
 LIBC_RECVMSG_RET_TYPE tsocks_recvmsg(LIBC_RECVMSG_SIG)
 {
-	int sock_domain;
-	socklen_t optlen;
+	socklen_t addrlen;
 	ssize_t ret = 0;
 	char dummy, recv_fd[CMSG_SPACE(SCM_MAX_FD)];
 	struct iovec iov[1];
 	struct cmsghdr *cmsg;
 	struct msghdr msg_hdr;
+	struct sockaddr addr;
 
 	/* Don't bother if the socket family is NOT Unix. */
-	optlen = sizeof(sock_domain);
-	ret = getsockopt(sockfd, SOL_SOCKET, SO_DOMAIN, &sock_domain, &optlen);
+	addrlen = sizeof(addr);
+	ret = getsockname(sockfd, &addr, &addrlen);
 	if (ret < 0) {
-		DBG("[recvmsg] Fail getsockopt() on sock %d", sockfd);
+		DBG("[recvmsg] Fail getsockname() on sock %d", sockfd);
 		errno = EBADF;
 		goto error;
 	}
-	if (sock_domain != AF_UNIX) {
+	if (addr.sa_family != AF_UNIX) {
 		goto libc;
 	}
 



More information about the tor-commits mailing list