]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:winbindd: make use of samba_sockaddr in set_remote_addresses() to avoid warnings
authorStefan Metzmacher <metze@samba.org>
Tue, 1 Oct 2024 13:42:50 +0000 (15:42 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 5 Dec 2024 16:46:37 +0000 (16:46 +0000)
../../source3/winbindd/winbindd_dual_ndr.c: In function ‘set_remote_addresses’:
../../source3/winbindd/winbindd_dual_ndr.c:467:51: warning: dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing]
  467 |         struct sockaddr *sar = (struct sockaddr *)&st;

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/winbindd/winbindd_dual_ndr.c

index 718405cc1370d36bbc18d7a5f62cf95042e25f8b..4fd7fb7c8c3971399e5fe35b34ed12a48cf3f627 100644 (file)
@@ -463,23 +463,24 @@ fail:
 static NTSTATUS set_remote_addresses(struct dcesrv_connection *conn,
                                     int sock)
 {
-       struct sockaddr_storage st = { 0 };
-       struct sockaddr *sar = (struct sockaddr *)&st;
+       struct samba_sockaddr ssa;
        struct tsocket_address *remote = NULL;
        struct tsocket_address *local = NULL;
-       socklen_t sa_len = sizeof(st);
        NTSTATUS status;
        int ret;
 
-       ZERO_STRUCT(st);
-       ret = getpeername(sock, sar, &sa_len);
+       ssa = (struct samba_sockaddr) { .sa_socklen = sizeof(ssa.u.ss), };
+       ret = getpeername(sock, &ssa.u.sa, &ssa.sa_socklen);
        if (ret != 0) {
                status = map_nt_error_from_unix(ret);
                DBG_ERR("getpeername failed: %s\n", nt_errstr(status));
                return status;
        }
 
-       ret = tsocket_address_bsd_from_sockaddr(conn, sar, sa_len, &remote);
+       ret = tsocket_address_bsd_from_sockaddr(conn,
+                                               &ssa.u.sa,
+                                               ssa.sa_socklen,
+                                               &remote);
        if (ret != 0) {
                status = map_nt_error_from_unix(ret);
                DBG_ERR("tsocket_address_bsd_from_sockaddr failed: %s\n",
@@ -487,15 +488,18 @@ static NTSTATUS set_remote_addresses(struct dcesrv_connection *conn,
                return status;
        }
 
-       ZERO_STRUCT(st);
-       ret = getsockname(sock, sar, &sa_len);
+       ssa = (struct samba_sockaddr) { .sa_socklen = sizeof(ssa.u.ss), };
+       ret = getsockname(sock, &ssa.u.sa, &ssa.sa_socklen);
        if (ret != 0) {
                status = map_nt_error_from_unix(ret);
                DBG_ERR("getsockname failed: %s\n", nt_errstr(status));
                return status;
        }
 
-       ret = tsocket_address_bsd_from_sockaddr(conn, sar, sa_len, &local);
+       ret = tsocket_address_bsd_from_sockaddr(conn,
+                                               &ssa.u.sa,
+                                               ssa.sa_socklen,
+                                               &local);
        if (ret != 0) {
                status = map_nt_error_from_unix(ret);
                DBG_ERR("tsocket_address_bsd_from_sockaddr failed: %s\n",