From fa0446431601699d8f1607b7d1b0995e7c52a5b6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 1 Oct 2024 15:42:50 +0200 Subject: [PATCH] s3:winbindd: make use of samba_sockaddr in set_remote_addresses() to avoid warnings MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit ../../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 Reviewed-by: Andreas Schneider --- source3/winbindd/winbindd_dual_ndr.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/source3/winbindd/winbindd_dual_ndr.c b/source3/winbindd/winbindd_dual_ndr.c index 718405cc137..4fd7fb7c8c3 100644 --- a/source3/winbindd/winbindd_dual_ndr.c +++ b/source3/winbindd/winbindd_dual_ndr.c @@ -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", -- 2.47.3