tsocket: only copy the specific part of sockaddr*
authorStefan Metzmacher <metze@samba.org>
Wed, 23 Dec 2009 18:34:32 +0000 (19:34 +0100)
committerKarolin Seeger <kseeger@samba.org>
Mon, 17 May 2010 07:50:19 +0000 (09:50 +0200)
This makes sure we fill the unspefic bytes with 0
and have zero termination for sockaddr_un.

metze
(cherry picked from commit 17c804a67593cdb4d8646b5be6b50fddf56b3e27)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
(cherry picked from commit e96605da78f1a0afbaf3b0aedaf7a4730d64d3a5)

lib/tsocket/tsocket_bsd.c

index 6f6b4229f9f8cc632daeb2d460e867f13f20258b..c44ba4e714fe2735bd787003e4b468d918a0b850 100644 (file)
@@ -217,12 +217,16 @@ int _tsocket_address_bsd_from_sockaddr(TALLOC_CTX *mem_ctx,
 
        switch (sa->sa_family) {
        case AF_UNIX:
+               if (sa_socklen > sizeof(struct sockaddr_un)) {
+                       sa_socklen = sizeof(struct sockaddr_un);
+               }
                break;
        case AF_INET:
                if (sa_socklen < sizeof(struct sockaddr_in)) {
                        errno = EINVAL;
                        return -1;
                }
+               sa_socklen = sizeof(struct sockaddr_in);
                break;
 #ifdef HAVE_IPV6
        case AF_INET6:
@@ -230,6 +234,7 @@ int _tsocket_address_bsd_from_sockaddr(TALLOC_CTX *mem_ctx,
                        errno = EINVAL;
                        return -1;
                }
+               sa_socklen = sizeof(struct sockaddr_in6);
                break;
 #endif
        default: