[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Aug 27 22:00:02 UTC 2020


The branch, master has been updated
       via  afb5cee6e78 s3:smbd: Fix strict aliasing in get_socket_port()
      from  811e2f55290 GPO: Add rsop output for Messages policy

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit afb5cee6e783048fccc1f2d8fed462adecce4d9a
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 2 14:16:10 2020 +0200

    s3:smbd: Fix strict aliasing in get_socket_port()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Aug 27 21:59:17 UTC 2020 on sn-devel-184

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/reply.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 63d62a88a46..debdb8487b6 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -549,14 +549,15 @@ bool check_fsp_ntquota_handle(connection_struct *conn, struct smb_request *req,
 
 static int get_socket_port(int fd)
 {
-	struct sockaddr_storage sa;
-	socklen_t length = sizeof(sa);
+	struct samba_sockaddr saddr = {
+		.sa_socklen = sizeof(struct sockaddr_storage),
+	};
 
 	if (fd == -1) {
 		return -1;
 	}
 
-	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
+	if (getsockname(fd, &saddr.u.sa, &saddr.sa_socklen) < 0) {
 		int level = (errno == ENOTCONN) ? 2 : 0;
 		DEBUG(level, ("getsockname failed. Error was %s\n",
 			       strerror(errno)));
@@ -564,14 +565,12 @@ static int get_socket_port(int fd)
 	}
 
 #if defined(HAVE_IPV6)
-	if (sa.ss_family == AF_INET6) {
-		struct sockaddr_in6 *sa_in6 = (struct sockaddr_in6 *)&sa;
-		return ntohs(sa_in6->sin6_port);
+	if (saddr.u.sa.sa_family == AF_INET6) {
+		return ntohs(saddr.u.in6.sin6_port);
 	}
 #endif
-	if (sa.ss_family == AF_INET) {
-		struct sockaddr_in *sa_in = (struct sockaddr_in *)&sa;
-		return ntohs(sa_in->sin_port);
+	if (saddr.u.sa.sa_family == AF_INET) {
+		return ntohs(saddr.u.in.sin_port);
 	}
 	return -1;
 }


-- 
Samba Shared Repository



More information about the samba-cvs mailing list