Module: wine Branch: master Commit: befd7abe1079b1d87bee82e403d485cadb1adbcb URL: https://gitlab.winehq.org/wine/wine/-/commit/befd7abe1079b1d87bee82e403d485c...
Author: Brendan Shanks bshanks@codeweavers.com Date: Fri Mar 8 21:51:11 2024 -0800
server: Remove support for msg_accrights FD passing.
---
configure | 13 ------------- configure.ac | 2 +- include/config.h.in | 3 --- server/request.c | 44 ++++++++++++++++---------------------------- 4 files changed, 17 insertions(+), 45 deletions(-)
diff --git a/configure b/configure index 59848dcdaf4..804a03c8fd3 100755 --- a/configure +++ b/configure @@ -21014,19 +21014,6 @@ printf "%s\n" "#define HAVE_LINUX_GETHOSTBYNAME_R_6 1" >>confdefs.h
fi
-ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_accrights" "ac_cv_member_struct_msghdr_msg_accrights" "#include <sys/types.h> -#include <sys/socket.h> -#ifdef HAVE_SYS_UN_H -# include <sys/un.h> -#endif -" -if test "x$ac_cv_member_struct_msghdr_msg_accrights" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS 1" >>confdefs.h - - -fi ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" "#include <sys/types.h> #include <sys/socket.h> #ifdef HAVE_SYS_UN_H diff --git a/configure.ac b/configure.ac index 2282758fd10..872cb1591f8 100644 --- a/configure.ac +++ b/configure.ac @@ -2163,7 +2163,7 @@ AC_CACHE_CHECK([whether we can use re-entrant gethostbyname_r Linux style], fi
dnl Check for socket structure members -AC_CHECK_MEMBERS([struct msghdr.msg_accrights, struct sockaddr_un.sun_len],,, +AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,, [#include <sys/types.h> #include <sys/socket.h> #ifdef HAVE_SYS_UN_H diff --git a/include/config.h.in b/include/config.h.in index 8f4d5e575ce..184771d94f2 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -414,9 +414,6 @@ /* Define to 1 if `ips_total' is a member of `struct ip_stats'. */ #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL
-/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */ -#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS - /* Define to 1 if `mt_blkno' is a member of `struct mtget'. */ #undef HAVE_STRUCT_MTGET_MT_BLKNO
diff --git a/server/request.c b/server/request.c index 7021741c765..82b4a722d61 100644 --- a/server/request.c +++ b/server/request.c @@ -379,28 +379,22 @@ int receive_fd( struct process *process ) struct iovec vec; struct send_fd data; struct msghdr msghdr; - int fd = -1, ret; - -#ifdef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS - msghdr.msg_accrightslen = sizeof(int); - msghdr.msg_accrights = (void *)&fd; -#else /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ char cmsg_buffer[256]; - msghdr.msg_control = cmsg_buffer; - msghdr.msg_controllen = sizeof(cmsg_buffer); - msghdr.msg_flags = 0; -#endif /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ + int fd = -1, ret;
msghdr.msg_name = NULL; msghdr.msg_namelen = 0; msghdr.msg_iov = &vec; msghdr.msg_iovlen = 1; + msghdr.msg_control = cmsg_buffer; + msghdr.msg_controllen = sizeof(cmsg_buffer); + msghdr.msg_flags = 0; + vec.iov_base = (void *)&data; vec.iov_len = sizeof(data);
ret = recvmsg( get_unix_fd( process->msg_fd ), &msghdr, 0 );
-#ifndef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS if (ret > 0) { struct cmsghdr *cmsg; @@ -410,7 +404,6 @@ int receive_fd( struct process *process ) if (cmsg->cmsg_type == SCM_RIGHTS) fd = *(int *)CMSG_DATA(cmsg); } } -#endif /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
if (ret == sizeof(data)) { @@ -465,33 +458,28 @@ int send_client_fd( struct process *process, int fd, obj_handle_t handle ) { struct iovec vec; struct msghdr msghdr; - int ret; - -#ifdef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS - msghdr.msg_accrightslen = sizeof(fd); - msghdr.msg_accrights = (void *)&fd; -#else /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ char cmsg_buffer[256]; struct cmsghdr *cmsg; - msghdr.msg_control = cmsg_buffer; - msghdr.msg_controllen = sizeof(cmsg_buffer); - msghdr.msg_flags = 0; - cmsg = CMSG_FIRSTHDR( &msghdr ); - cmsg->cmsg_len = CMSG_LEN( sizeof(fd) ); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - *(int *)CMSG_DATA(cmsg) = fd; - msghdr.msg_controllen = cmsg->cmsg_len; -#endif /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ + int ret;
msghdr.msg_name = NULL; msghdr.msg_namelen = 0; msghdr.msg_iov = &vec; msghdr.msg_iovlen = 1; + msghdr.msg_control = cmsg_buffer; + msghdr.msg_controllen = sizeof(cmsg_buffer); + msghdr.msg_flags = 0;
vec.iov_base = (void *)&handle; vec.iov_len = sizeof(handle);
+ cmsg = CMSG_FIRSTHDR( &msghdr ); + cmsg->cmsg_len = CMSG_LEN( sizeof(fd) ); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + *(int *)CMSG_DATA(cmsg) = fd; + msghdr.msg_controllen = cmsg->cmsg_len; + if (debug_level) fprintf( stderr, "%04x: *fd* %04x -> %d\n", current ? current->id : process->id, handle, fd );