socket_wrapper: fill in sa.sa_len if the system supports it
authorStefan Metzmacher <metze@samba.org>
Fri, 5 Nov 2010 08:43:05 +0000 (09:43 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 5 Nov 2010 14:40:00 +0000 (14:40 +0000)
metze

Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Fri Nov  5 14:40:00 UTC 2010 on sn-devel-104

lib/socket_wrapper/socket_wrapper.c

index c52d98cf91ddcc41a72922c409fd36a3363851d0..2985d007ece785a543c095d37771da34a726c771 100644 (file)
@@ -584,10 +584,14 @@ static struct socket_info *find_socket_info(int fd)
 static int sockaddr_convert_to_un(struct socket_info *si, const struct sockaddr *in_addr, socklen_t in_len, 
                                  struct sockaddr_un *out_addr, int alloc_sock, int *bcast)
 {
+       struct sockaddr *out = (struct sockaddr *)(void *)out_addr;
        if (!out_addr)
                return 0;
 
-       out_addr->sun_family = AF_UNIX;
+       out->sa_family = AF_UNIX;
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+       out->sa_len = sizeof(*out_addr);
+#endif
 
        switch (in_addr->sa_family) {
        case AF_INET:
@@ -622,6 +626,8 @@ static int sockaddr_convert_from_un(const struct socket_info *si,
                                    struct sockaddr *out_addr,
                                    socklen_t *out_addrlen)
 {
+       int ret;
+
        if (out_addr == NULL || out_addrlen == NULL) 
                return 0;
 
@@ -643,7 +649,11 @@ static int sockaddr_convert_from_un(const struct socket_info *si,
                        errno = ESOCKTNOSUPPORT;
                        return -1;
                }
-               return convert_un_in(in_addr, out_addr, out_addrlen);
+               ret = convert_un_in(in_addr, out_addr, out_addrlen);
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+               out_addr->sa_len = *out_addrlen;
+#endif
+               return ret;
        default:
                break;
        }