commit f19b2e805638478812ce0102f8c2027701183eb2
Author: Linus Nordberg <li...@nordberg.se>
Date:   Sun Aug 25 10:29:52 2013 +0200

    Use getsockname(2) for finding out socket address family
    
    Use this for portability. SO_DOMAIN seems to be a Linuxism.
    
    Signed-off-by: David Goulet <dgou...@ev0ke.net>
---
 src/lib/recv.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/lib/recv.c b/src/lib/recv.c
index 9a70dd3..895892d 100644
--- a/src/lib/recv.c
+++ b/src/lib/recv.c
@@ -64,20 +64,23 @@ LIBC_RECVMSG_RET_TYPE tsocks_recvmsg(LIBC_RECVMSG_SIG)
         * further.
         */
        if (cmsg->cmsg_type == SCM_RIGHTS || cmsg->cmsg_level == SOL_SOCKET) {
-               socklen_t optlen;
-               int sock_dom;
+               struct sockaddr_storage addr;
+               socklen_t addrlen;
+               sa_family_t family = AF_UNSPEC;
 
                memcpy(&fd, CMSG_DATA(cmsg), sizeof(fd));
 
-               /* Get socket domain. */
-               optlen = sizeof(sock_dom);
-               ret = getsockopt(fd, SOL_SOCKET, SO_DOMAIN, &sock_dom, &optlen);
+               /* Get socket protocol family. */
+               addrlen = sizeof(addr);
+               ret = getsockname(fd, (struct sockaddr *) &addr, &addrlen);
                if (ret < 0) {
-                       /* Use the getsockopt() errno value. */
+                       /* Use the getsockname() errno value. */
                        goto end;
                }
 
-               if (sock_dom == AF_INET || sock_dom == AF_INET6) {
+               family = ((struct sockaddr *) &addr)->sa_family;
+
+               if (family == AF_INET || family == AF_INET6) {
                        ERR("[recvmsg] Inet socket passing detected. Aborting 
everything! "
                                        "A non Tor socket could be used thus 
leaking information.");
                        exit(EXIT_FAILURE);



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to