diff options
Diffstat (limited to 'sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c')
| -rw-r--r-- | sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c b/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c deleted file mode 100644 index b4197166e32d..000000000000 --- a/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c +++ /dev/null @@ -1,98 +0,0 @@ ---- src/common/slurm_protocol_socket.c.orig 2024-05-21 17:19:51 UTC -+++ src/common/slurm_protocol_socket.c -@@ -53,7 +53,9 @@ - #include <sys/socket.h> - #include <sys/time.h> - #include <sys/types.h> -+#include <sys/un.h> - #include <unistd.h> -+#include <fcntl.h> - - #include "slurm/slurm_errno.h" - #include "src/common/read_config.h" -@@ -74,6 +76,28 @@ - #define RANDOM_USER_PORT ((uint16_t) ((lrand48() % \ - (MAX_USER_PORT - MIN_USER_PORT + 1)) + MIN_USER_PORT)) - -+#if defined(__FreeBSD__) -+/* Normalize sockaddr length on FreeBSD and return the proper namelen */ -+static inline socklen_t _bsd_sockaddr_len_fix(struct sockaddr *sa) -+{ -+ if (!sa) return 0; -+ switch (sa->sa_family) { -+ case AF_INET: { -+ struct sockaddr_in *in = (struct sockaddr_in *)sa; -+ in->sin_len = (uint8_t)sizeof(*in); -+ return sizeof(*in); -+ } -+ case AF_INET6: { -+ struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)sa; -+ in6->sin6_len = (uint8_t)sizeof(*in6); -+ return sizeof(*in6); -+ } -+ default: -+ return sizeof(*sa); -+ } -+} -+#endif -+ - /* Static functions */ - static int _slurm_connect(int __fd, struct sockaddr const * __addr, - socklen_t __len); -@@ -115,8 +139,13 @@ static void _sock_bind_wild(int sockfd) - - slurm_setup_addr(&sin, RANDOM_USER_PORT); - -+ socklen_t blen = _bsd_sockaddr_len_fix((struct sockaddr *)&sin); - for (retry=0; retry < PORT_RETRIES ; retry++) { -+ #if defined(__FreeBSD__) -+ rc = bind(sockfd, (struct sockaddr *) &sin, blen); -+ #else - rc = bind(sockfd, (struct sockaddr *) &sin, sizeof(sin)); -+ #endif - if (rc >= 0) - break; - slurm_set_port(&sin, RANDOM_USER_PORT); -@@ -511,7 +540,13 @@ extern int slurm_init_msg_engine(slurm_addr_t *addr, b - goto error; - } - -- rc = bind(fd, (struct sockaddr const *) addr, sizeof(*addr)); -+ #if defined(__FreeBSD__) -+ /* FreeBSD: normalize sa_len and pass the exact namelen to bind() */ -+ socklen_t bind_len = _bsd_sockaddr_len_fix((struct sockaddr *)addr); -+ rc = bind(fd, (struct sockaddr const *) addr, bind_len); -+ #else -+ rc = bind(fd, (struct sockaddr const *) addr, sizeof(*addr)); -+ #endif - if (rc < 0) { - format_print(log_lvl, "Error binding slurm stream socket: %m"); - goto error; -@@ -666,7 +701,27 @@ static int _slurm_connect (int __fd, struct sockaddr c - if (fcntl(__fd, F_SETFL, flags | O_NONBLOCK) < 0) - error("%s: fcntl(F_SETFL) error: %m", __func__); - -+/* FreeBSD requires correct sa_len/namelen; recompute here */ -+#if defined(__FreeBSD__) -+ { -+ struct sockaddr *sa = (struct sockaddr *)__addr; -+ socklen_t namelen; -+ switch (sa->sa_family) { -+ case AF_UNIX: { -+ struct sockaddr_un *un = (struct sockaddr_un *)sa; -+ namelen = (socklen_t)SUN_LEN(un); -+ un->sun_len = (uint8_t)namelen; -+ break; -+ } -+ default: -+ namelen = _bsd_sockaddr_len_fix(sa); -+ break; -+ } -+ rc = connect(__fd, sa, namelen); -+ } -+#else - rc = connect(__fd , __addr , __len); -+#endif - if ((rc < 0) && (errno != EINPROGRESS)) - return errno; - if (rc == 0) |
