From: Stefan Metzmacher Date: Fri, 5 Nov 2010 08:43:05 +0000 (+0100) Subject: socket_wrapper: fill in sa.sa_len if the system supports it X-Git-Url: http://git.samba.org/?p=abartlet%2Fsamba.git%2F.git;a=commitdiff_plain;h=c1e3c8b550e10199ad29983cc759f6e259cac613 socket_wrapper: fill in sa.sa_len if the system supports it metze Autobuild-User: Stefan Metzmacher Autobuild-Date: Fri Nov 5 14:40:00 UTC 2010 on sn-devel-104 --- diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c index c52d98cf91d..2985d007ece 100644 --- a/lib/socket_wrapper/socket_wrapper.c +++ b/lib/socket_wrapper/socket_wrapper.c @@ -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; }