tsocket: allow AF_UNIX sockaddrs smaller than sizeof(sockaddr_un)
authorStefan Metzmacher <metze@samba.org>
Wed, 23 Dec 2009 18:31:41 +0000 (19:31 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 11 May 2010 12:51:18 +0000 (14:51 +0200)
This is needed as getpeername() truncates the length to 2 if the
peer socket has no name.

metze
(cherry picked from commit 4784c8c3bea98592486ca973d57c99671eb68cb2)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
lib/tsocket/tsocket_bsd.c

index 201788e9223b3b9ffc807485f458180fc46a2a51..6f6b4229f9f8cc632daeb2d460e867f13f20258b 100644 (file)
@@ -210,12 +210,13 @@ int _tsocket_address_bsd_from_sockaddr(TALLOC_CTX *mem_ctx,
        struct tsocket_address *addr;
        struct tsocket_address_bsd *bsda;
 
+       if (sa_socklen < sizeof(sa->sa_family)) {
+               errno = EINVAL;
+               return -1;
+       }
+
        switch (sa->sa_family) {
        case AF_UNIX:
-               if (sa_socklen < sizeof(struct sockaddr_un)) {
-                       errno = EINVAL;
-                       return -1;
-               }
                break;
        case AF_INET:
                if (sa_socklen < sizeof(struct sockaddr_in)) {