Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Mar 2026 13:39:24 +0000
From:      Thierry Thomas <thierry@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Cc:        GenericRikka <rikka.goering@outlook.de>
Subject:   git: 1cfa47f320fa - main - sysutils/slurm-wlm: update to 25.11.2 & fix sockaddr length handling on BSD
Message-ID:  <69b1708c.27cdb.720ee9b2@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by thierry:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1cfa47f320fa8b1fa1edba614397087aac846ab1

commit 1cfa47f320fa8b1fa1edba614397087aac846ab1
Author:     GenericRikka <rikka.goering@outlook.de>
AuthorDate: 2026-03-10 17:30:17 +0000
Commit:     Thierry Thomas <thierry@FreeBSD.org>
CommitDate: 2026-03-11 13:39:19 +0000

    sysutils/slurm-wlm: update to 25.11.2 & fix sockaddr length handling on BSD
    
    - Update to Slurm 25.11.3.
    - Fix BSD sockaddr length handling by introducing slurm_sockaddr_fixlen()
      and using it for AF_INET/AF_INET6/AF_UNIX bind/connect/getnameinfo call
      sites (avoids EINVAL and incorrect sockaddr lengths on BSD).
    - Detect/link HDF5 high-level library (-lhdf5_hl) when needed for HDF5
      profiling components.
    - Added S2N option
    - Removed outdated GUI guarding
    
    PR:             292799
    Reported by:    rikka.goering (at] outlook.de
---
 sysutils/slurm-wlm/Makefile                        |  21 +-
 sysutils/slurm-wlm/distinfo                        |   6 +-
 sysutils/slurm-wlm/files/patch-config.h.in         |  20 ++
 sysutils/slurm-wlm/files/patch-configure           | 392 +++++++++++++++++++++
 .../slurm-wlm/files/patch-src_common_Makefile.in   |  43 +++
 sysutils/slurm-wlm/files/patch-src_common_net.c    |  29 ++
 .../slurm-wlm/files/patch-src_common_sack__api.c   |  27 ++
 .../patch-src_common_slurm__protocol__socket.c     |  88 +++++
 .../files/patch-src_common_slurm__sockaddr.c       |  92 +++++
 .../files/patch-src_common_slurm__sockaddr.h       |  29 ++
 .../files/patch-src_common_stepd__proxy.c          |  27 ++
 .../slurm-wlm/files/patch-src_common_util-net.c    |  30 ++
 .../slurm-wlm/files/patch-src_common_xsystemd.c    |  28 ++
 sysutils/slurm-wlm/files/patch-src_conmgr_con.c    |  74 ++++
 ..._plugins_acct__gather__profile_hdf5_Makefile.in |  19 +
 ..._acct__gather__profile_hdf5_sh5util_Makefile.in |  24 ++
 .../files/patch-src_plugins_auth_slurm_sack.c      |  31 ++
 sysutils/slurm-wlm/files/patch-src_scrun_anchor.c  |  35 ++
 .../files/patch-src_slurmd_slurmstepd_req.c        |  44 +++
 ...otocol__pack_pack__job__alloc__info__msg-test.c |   8 +
 sysutils/slurm-wlm/pkg-plist                       |   2 +
 21 files changed, 1056 insertions(+), 13 deletions(-)

diff --git a/sysutils/slurm-wlm/Makefile b/sysutils/slurm-wlm/Makefile
index 97a1fc171086..1c676d36a530 100644
--- a/sysutils/slurm-wlm/Makefile
+++ b/sysutils/slurm-wlm/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	slurm
-DISTVERSION=	25.11.0
-PORTREVISION=	1
+DISTVERSION=	25.11.3
 CATEGORIES=	sysutils
 MASTER_SITES=	https://download.schedmd.com/slurm/
 PKGNAMESUFFIX=	-wlm
@@ -47,6 +46,7 @@ CONFIGURE_ENV=	MAKE=${GMAKE}
 
 INSTALL_TARGET=	install-strip
 TEST_TARGET=	check
+TESTING_UNSAFE=	yes
 
 CFLAGS+=	-I${WRKSRC}/slurm
 LDFLAGS+=	-lsysinfo -lprocstat -fcommon
@@ -60,7 +60,7 @@ PLIST_SUB=	GROUPS=${GROUPS} \
 		USERS=${USERS}
 PORTDOCS=	*
 
-OPTIONS_DEFINE=		CURL DOCS GUI HDF5 HWLOC IPMI
+OPTIONS_DEFINE=		CURL DOCS GUI HDF5 HWLOC IPMI S2N
 OPTIONS_DEFAULT=	HDF5 HWLOC
 OPTIONS_SUB=		yes
 
@@ -69,6 +69,7 @@ GUI_DESC=	Build sview GUI config tool
 HDF5_DESC=	Job profiling using HDF5
 HWLOC_DESC=	Portable hardware locality
 IPMI_DESC=	IPMI energy consumption accounting
+S2N_DESC=	Build tls_s2n TLS plugin
 
 CURL_LIB_DEPENDS=	libcurl.so:ftp/curl
 CURL_CONFIGURE_WITH=	libcurl
@@ -78,7 +79,8 @@ DOCS_BUILD_DEPENDS=	man2html:textproc/man2html
 GUI_BUILD_DEPENDS=	itstool:textproc/itstool
 GUI_USES=		gnome
 GUI_USE=		GNOME=cairo,gdkpixbuf,glib20,gtk20,pango
-GUI_CONFIGURE_ENABLE=	glibtest gtktest x11
+GUI_CONFIGURE_ENABLE=	sview
+GUI_CONFIGURE_OFF=	--disable-sview
 
 HDF5_LIB_DEPENDS=	libhdf5.so:science/hdf5 \
 			libhdf5_hl.so:science/hdf5
@@ -94,6 +96,10 @@ IPMI_LIB_DEPENDS=	libfreeipmi.so:sysutils/freeipmi \
 			libipmimonitoring.so:sysutils/freeipmi
 IPMI_CONFIGURE_WITH=	freeipmi
 
+S2N_LIB_DEPENDS=	libs2n.so:security/s2n-tls
+S2N_CONFIGURE_WITH=	s2n=${LOCALBASE}
+S2N_CONFIGURE_OFF=	--without-s2n
+
 _ARCH=	${ARCH:S|aarch64|aarch64elf|:S|amd64|elf_amd64|:S|powerpc64le|elf64lppc|:S|powerpc64|elf64ppc|:S|riscv64|elf64lriscv|}
 
 # SLURM's configure enables interactive jobs if pty.h exists.  Replacing
@@ -106,7 +112,7 @@ pre-configure:
 	(cd ${WRKSRC} && \
 		${GREP} -RIl '"/proc' src | ${XARGS} ${REINPLACE_CMD} \
 			-e 's|"/proc|"/compat/linux/proc|g' \
-			 -e 's|(/proc)|(/compat/linux/proc)|g')
+			-e 's|(/proc)|(/compat/linux/proc)|g')
 	@if ${WHICH} sbatch > /dev/null; then \
 		${ECHO_CMD} "********************************************"; \
 		${ECHO_CMD} "Build may fail while slurm-wlm is installed."; \
@@ -121,11 +127,6 @@ pre-configure:
 	${FIND} ${WRKSRC} -name Makefile.in | ${XARGS} \
 		${REINPLACE_CMD} -e 's|htmldir = \$${datadir.*$$|htmldir = @htmldir@|'
 
-# Hack around nonfunctional --disable-gtktest flag
-pre-configure-GUI-off:
-	 ${REINPLACE_CMD} -e 's|min_gtk_version=.*|min_gtk_version=2000.0.0|' \
-		${WRKSRC}/configure
-
 post-install:
 	@${MKDIR} ${STAGEDIR}/var/spool/slurmctld \
 		  ${STAGEDIR}${ETCDIR}
diff --git a/sysutils/slurm-wlm/distinfo b/sysutils/slurm-wlm/distinfo
index 95b9151f9a8a..d4dffa84ca5d 100644
--- a/sysutils/slurm-wlm/distinfo
+++ b/sysutils/slurm-wlm/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1762496373
-SHA256 (slurm-25.11.0.tar.bz2) = d63f585a73f3d504ddce42ed7205b75e4d79372a43e0f47535cd51ecc5383d09
-SIZE (slurm-25.11.0.tar.bz2) = 6714268
+TIMESTAMP = 1771602829
+SHA256 (slurm-25.11.3.tar.bz2) = 2928cf9be4005ae6cbc40633c375b4d0f8dcf16573256ab27e4fd84cce57ff3f
+SIZE (slurm-25.11.3.tar.bz2) = 6728996
diff --git a/sysutils/slurm-wlm/files/patch-config.h.in b/sysutils/slurm-wlm/files/patch-config.h.in
new file mode 100644
index 000000000000..fa28fb559310
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-config.h.in
@@ -0,0 +1,20 @@
+--- config.h.in.orig	2026-01-29 06:29:02 UTC
++++ config.h.in
+@@ -1,5 +1,17 @@
+ /* config.h.in.  Generated from configure.ac by autoheader.  */
+ 
++/* Define to 1 if 'sa_len' is a member of 'struct sockaddr'. */
++#undef HAVE_STRUCT_SOCKADDR_SA_LEN
++
++/* Define to 1 if 'sin_len' is a member of 'struct sockaddr_in'. */
++#undef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
++
++/* Define to 1 if 'sin6_len' is a member of 'struct sockaddr_in6'. */
++#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
++
++/* Define to 1 if 'sun_len' is a member of 'struct sockaddr_un'. */
++#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
++
+ /* Define if building universal (internal helper macro) */
+ #undef AC_APPLE_UNIVERSAL_BUILD
+ 
diff --git a/sysutils/slurm-wlm/files/patch-configure b/sysutils/slurm-wlm/files/patch-configure
new file mode 100644
index 000000000000..ff3073aa4b2c
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-configure
@@ -0,0 +1,392 @@
+--- configure.orig	2026-02-19 21:12:55 UTC
++++ configure
+@@ -784,6 +784,7 @@ HDF5_LIBS
+ HDF5_FFLAGS
+ HDF5_FC
+ HDF5_LIBS
++HDF5_HL_LIBS
+ HDF5_LDFLAGS
+ HDF5_CPPFLAGS
+ HDF5_CFLAGS
+@@ -12827,7 +12828,7 @@ printf %s "checking whether the $compiler linker ($LD)
+   hardcode_minus_L=no
+   hardcode_shlibpath_var=unsupported
+   inherit_rpath=no
+-  link_all_deplibs=unknown
++  link_all_deplibs=no
+   module_cmds=
+   module_expsym_cmds=
+   old_archive_from_new_cmds=
+@@ -13125,7 +13126,7 @@ _LT_EOF
+ 
+     *-mlibc)
+ 	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+       ;;
+ 
+     netbsd* | netbsdelf*-gnu)
+@@ -13134,7 +13135,7 @@ _LT_EOF
+ 	wlarc=
+       else
+ 	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+       fi
+       ;;
+ 
+@@ -13153,7 +13154,7 @@ _LT_EOF
+ _LT_EOF
+       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ 	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+       else
+ 	ld_shlibs=no
+       fi
+@@ -13182,7 +13183,7 @@ _LT_EOF
+ 	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ 	    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ 	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	    archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+ 	  else
+ 	    ld_shlibs=no
+ 	  fi
+@@ -13200,7 +13201,7 @@ _LT_EOF
+     *)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ 	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+       else
+ 	ld_shlibs=no
+       fi
+@@ -13865,7 +13866,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
+ 	hardcode_direct_absolute=yes
+ 	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ 	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+-	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
++	  archive_expsym_cmds='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-version-script,$lib-ver'
+ 	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ 	  export_dynamic_flag_spec='$wl-E'
+ 	else
+@@ -14734,7 +14735,7 @@ freebsd* | dragonfly* | midnightbsd*)
+   version_type=freebsd-$objformat
+   case $version_type in
+     freebsd-elf*)
+-      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
++      library_names_spec='$libname$release$shared_ext$versuffix  $libname$release$shared_ext$major	 $libname$shared_ext'			 soname_spec='$libname$release$shared_ext$major'
+       soname_spec='$libname$release$shared_ext$major'
+       need_version=no
+       need_lib_prefix=no
+@@ -16492,7 +16493,7 @@ else
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ printf "%s\n" "no" >&6; }
+ else
+-  if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
++  if $STRIP -V 2>&1 | $GREP "strip" >/dev/null; then
+     old_striplib="$STRIP --strip-debug"
+     striplib="$STRIP --strip-unneeded"
+     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -16506,7 +16507,7 @@ printf "%s\n" "yes" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ printf "%s\n" "yes" >&6; }
+       ;;
+-    freebsd*)
++dragonfly* |     freebsd*)
+       if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+         old_striplib="$STRIP --strip-debug"
+         striplib="$STRIP --strip-unneeded"
+@@ -16752,7 +16753,7 @@ module_expsym_cmds_CXX=
+ inherit_rpath_CXX=no
+ module_cmds_CXX=
+ module_expsym_cmds_CXX=
+-link_all_deplibs_CXX=unknown
++link_all_deplibs_CXX=no
+ old_archive_cmds_CXX=$old_archive_cmds
+ reload_flag_CXX=$reload_flag
+ reload_cmds_CXX=$reload_cmds
+@@ -16969,7 +16970,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
+       # archiving commands below assume that GNU ld is being used.
+       if test yes = "$with_gnu_ld"; then
+         archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+-        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++        archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+ 
+         hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+         export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+@@ -17668,7 +17669,7 @@ fi
+ 	    case `$CC -V 2>&1` in
+ 	      *"Version 7."*)
+ 	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+-		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++		archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+ 		;;
+ 	      *)  # Version 8.0 or newer
+ 	        tmp_idyn=
+@@ -17676,7 +17677,7 @@ fi
+ 		  ia64*) tmp_idyn=' -i_dynamic';;
+ 		esac
+ 	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+-		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++		archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+ 		;;
+ 	    esac
+ 	    archive_cmds_need_lc_CXX=no
+@@ -17708,7 +17709,7 @@ fi
+ 	      ;;
+ 	    *) # Version 6 and above use weak symbols
+ 	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+-	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
++	      archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$lib-ver -o $lib'
+ 	      ;;
+ 	    esac
+ 
+@@ -17719,7 +17720,7 @@ fi
+ 	  cxx*)
+ 	    # Compaq C++
+ 	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+-	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
++	    archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-version-script $wl$lib-ver'
+ 
+ 	    runpath_var=LD_RUN_PATH
+ 	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+@@ -17753,7 +17754,7 @@ fi
+ 	      # Sun C++ 5.9
+ 	      no_undefined_flag_CXX=' -zdefs'
+ 	      archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	      archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
++	      archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-version-script $wl$lib-ver'
+ 	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+ 	      whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ 	      compiler_needs_object_CXX=yes
+@@ -17825,7 +17826,7 @@ fi
+ 	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ 	  hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+ 	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+-	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
++	    archive_expsym_cmds_CXX='echo "{ global:" > $lib-ver~		 sed -e "s|$|;|" < $export_symbols >> $lib-ver~	 echo "local: *; };" >> $lib-ver~$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-version-script,$lib-ver -o $lib'
+ 	    export_dynamic_flag_spec_CXX='$wl-E'
+ 	    whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ 	  fi
+@@ -19384,7 +19385,7 @@ freebsd* | dragonfly* | midnightbsd*)
+   version_type=freebsd-$objformat
+   case $version_type in
+     freebsd-elf*)
+-      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
++      library_names_spec='$libname$release$shared_ext$versuffix  $libname$release$shared_ext$major	 $libname$shared_ext'			 soname_spec='$libname$release$shared_ext$major'
+       soname_spec='$libname$release$shared_ext$major'
+       need_version=no
+       need_lib_prefix=no
+@@ -24160,7 +24161,7 @@ case $host_os in
+ 
+ case $host_os in
+ 
+-        freebsd*)
++dragonfly* |         freebsd*)
+ 
+         # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+         # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+@@ -25027,6 +25028,7 @@ HDF5_LIBS=""
+ HDF5_CPPFLAGS=""
+ HDF5_LDFLAGS=""
+ HDF5_LIBS=""
++HDF5_HL_LIBS=""
+ HDF5_FC=""
+ HDF5_FFLAGS=""
+ HDF5_FLIBS=""
+@@ -25416,7 +25418,59 @@ printf "%s\n" "#define H5_USE_18_API 1" >>confdefs.h
+   fi
+ 
+ 
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for H5PTopen in -lhdf5_hl" >&5
++printf %s "checking for H5PTopen in -lhdf5_hl... " >&6; }
++if test ${ac_cv_lib_hdf5_hl_H5PTopen+y}
++then :
++  printf %s "(cached) " >&6
++else case e in #(
++  e)
++  ac_check_lib_save_LIBS=$LIBS
++  ac_check_lib_save_LDFLAGS=$LDFLAGS
++  # Ensure the test link sees both -L/-Wl flags and libs provided by AX_LIB_HDF5()
++  LDFLAGS="$LDFLAGS $HDF5_LDFLAGS"
++  LIBS="-lhdf5_hl $HDF5_LIBS $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
+ 
++/* Override any GCC internal prototype to avoid an error. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char H5PTopen (void);
++int
++main (void)
++{
++return H5PTopen ();
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"
++then :
++  ac_cv_lib_hdf5_hl_H5PTopen=yes
++else case e in #(
++  e) ac_cv_lib_hdf5_hl_H5PTopen=no ;;
++esac
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.beam \
++    conftest$ac_exeext conftest.$ac_ext
++  LIBS=$ac_check_lib_save_LIBS
++  LDFLAGS=$ac_check_lib_save_LDFLAGS
++ ;;
++esac
++fi
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_hl_H5PTopen" >&5
++printf "%s\n" "$ac_cv_lib_hdf5_hl_H5PTopen" >&6; }
++if test "x$ac_cv_lib_hdf5_hl_H5PTopen" = xyes
++then :
++  HDF5_HL_LIBS="-lhdf5_hl"
++else case e in #(
++  e) HDF5_HL_LIBS="" ;;
++esac
++fi
++
++
+ #
+ # Handle user hints
+ #
+@@ -27518,6 +27572,133 @@ fi
+ fi
+ 
+   fi
++
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr has member sa_len" >&5
++printf %s "checking whether struct sockaddr has member sa_len... " >&6; }
++if test ${ac_cv_member_struct_sockaddr_sa_len+y}
++then :
++  printf %s "(cached) " >&6
++else case e in #(
++  e)
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/socket.h>
++int main(void) { (void) ((struct sockaddr *)0)->sa_len; return 0; }
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"
++then :
++  ac_cv_member_struct_sockaddr_sa_len=yes
++else case e in #(
++  e) ac_cv_member_struct_sockaddr_sa_len=no ;;
++esac
++fi
++rm -f conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
++ ;;
++esac
++fi
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_member_struct_sockaddr_sa_len" >&5
++printf "%s\n" "$ac_cv_member_struct_sockaddr_sa_len" >&6; }
++if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes
++then :
++  printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_SA_LEN 1" >>confdefs.h
++fi
++
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr_in has member sin_len" >&5
++printf %s "checking whether struct sockaddr_in has member sin_len... " >&6; }
++if test ${ac_cv_member_struct_sockaddr_in_sin_len+y}
++then :
++  printf %s "(cached) " >&6
++else case e in #(
++  e)
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++int main(void) { (void) ((struct sockaddr_in *)0)->sin_len; return 0; }
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"
++then :
++  ac_cv_member_struct_sockaddr_in_sin_len=yes
++else case e in #(
++  e) ac_cv_member_struct_sockaddr_in_sin_len=no ;;
++esac
++fi
++rm -f conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
++ ;;
++esac
++fi
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_member_struct_sockaddr_in_sin_len" >&5
++printf "%s\n" "$ac_cv_member_struct_sockaddr_in_sin_len" >&6; }
++if test "x$ac_cv_member_struct_sockaddr_in_sin_len" = xyes
++then :
++  printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1" >>confdefs.h
++fi
++
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr_in6 has member sin6_len" >&5
++printf %s "checking whether struct sockaddr_in6 has member sin6_len... " >&6; }
++if test ${ac_cv_member_struct_sockaddr_in6_sin6_len+y}
++then :
++  printf %s "(cached) " >&6
++else case e in #(
++  e)
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++int main(void) { (void) ((struct sockaddr_in6 *)0)->sin6_len; return 0; }
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"
++then :
++  ac_cv_member_struct_sockaddr_in6_sin6_len=yes
++else case e in #(
++  e) ac_cv_member_struct_sockaddr_in6_sin6_len=no ;;
++esac
++fi
++rm -f conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
++ ;;
++esac
++fi
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_member_struct_sockaddr_in6_sin6_len" >&5
++printf "%s\n" "$ac_cv_member_struct_sockaddr_in6_sin6_len" >&6; }
++if test "x$ac_cv_member_struct_sockaddr_in6_sin6_len" = xyes
++then :
++  printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1" >>confdefs.h
++fi
++
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct sockaddr_un has member sun_len" >&5
++printf %s "checking whether struct sockaddr_un has member sun_len... " >&6; }
++if test ${ac_cv_member_struct_sockaddr_un_sun_len+y}
++then :
++  printf %s "(cached) " >&6
++else case e in #(
++  e)
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++int main(void) { (void) ((struct sockaddr_un *)0)->sun_len; return 0; }
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"
++then :
++  ac_cv_member_struct_sockaddr_un_sun_len=yes
++else case e in #(
++  e) ac_cv_member_struct_sockaddr_un_sun_len=no ;;
++esac
++fi
++rm -f conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
++ ;;
++esac
++fi
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_member_struct_sockaddr_un_sun_len" >&5
++printf "%s\n" "$ac_cv_member_struct_sockaddr_un_sun_len" >&6; }
++if test "x$ac_cv_member_struct_sockaddr_un_sun_len" = xyes
++then :
++  printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_UN_SUN_LEN 1" >>confdefs.h
++fi
+ 
+ 
+ #
diff --git a/sysutils/slurm-wlm/files/patch-src_common_Makefile.in b/sysutils/slurm-wlm/files/patch-src_common_Makefile.in
new file mode 100644
index 000000000000..93f49d1fdc93
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_Makefile.in
@@ -0,0 +1,43 @@
+--- src/common/Makefile.in.orig	2026-01-15 20:26:01 UTC
++++ src/common/Makefile.in
+@@ -179,6 +179,7 @@ am_libcommon_la_OBJECTS = assoc_mgr.lo bitstring.lo ca
+ 	slurm_opt.lo slurm_protocol_api.lo slurm_protocol_defs.lo \
+ 	slurm_protocol_pack.lo slurm_protocol_util.lo \
+ 	slurm_protocol_socket.lo slurm_resolv.lo \
++	slurm_sockaddr.lo \
+ 	slurm_resource_info.lo slurm_rlimits_info.lo \
+ 	slurm_step_layout.lo slurm_time.lo slurmdb_defs.lo \
+ 	slurmdb_pack.lo slurmdbd_defs.lo slurmdbd_pack.lo spank.lo \
+@@ -711,6 +712,8 @@ libcommon_la_SOURCES = \
+ 	slurm_protocol_socket.h			\
+ 	slurm_resolv.c				\
+ 	slurm_resolv.h				\
++	slurm_sockaddr.c			\
++	slurm_sockaddr.h			\
+ 	slurm_resource_info.c			\
+ 	slurm_resource_info.h			\
+ 	slurm_rlimits_info.c			\
+@@ -909,6 +912,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_protocol_socket.Plo@am__quote@ # am--include-marker
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_protocol_util.Plo@am__quote@ # am--include-marker
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_resolv.Plo@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_sockaddr.Plo@am__quote@ # am--include-marker
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_resource_info.Plo@am__quote@ # am--include-marker
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_rlimits_info.Plo@am__quote@ # am--include-marker
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_step_layout.Plo@am__quote@ # am--include-marker
+@@ -1134,6 +1138,7 @@ distclean: distclean-am
+ 	-rm -f ./$(DEPDIR)/slurm_protocol_socket.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_protocol_util.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_resolv.Plo
++	-rm -f ./$(DEPDIR)/slurm_sockaddr.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_resource_info.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_rlimits_info.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_step_layout.Plo
+@@ -1279,6 +1284,7 @@ maintainer-clean: maintainer-clean-am
+ 	-rm -f ./$(DEPDIR)/slurm_protocol_socket.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_protocol_util.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_resolv.Plo
++	-rm -f ./$(DEPDIR)/slurm_sockaddr.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_resource_info.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_rlimits_info.Plo
+ 	-rm -f ./$(DEPDIR)/slurm_step_layout.Plo
diff --git a/sysutils/slurm-wlm/files/patch-src_common_net.c b/sysutils/slurm-wlm/files/patch-src_common_net.c
new file mode 100644
index 000000000000..26392482a5e7
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_net.c
@@ -0,0 +1,29 @@
+--- src/common/net.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/net.c
+@@ -81,6 +81,7 @@
+ #include "src/common/log.h"
+ #include "src/common/macros.h"
+ #include "src/common/net.h"
++#include "src/common/slurm_sockaddr.h"
+ #include "src/common/slurm_protocol_api.h"
+ #include "src/common/util-net.h"
+ #include "src/common/xmalloc.h"
+@@ -108,6 +109,8 @@ int net_stream_listen(int *fd, uint16_t *port)
+ 	/* bind ephemeral port */
+ 	slurm_setup_addr(&sin, 0);
+ 
++	len = slurm_sockaddr_fixlen((struct sockaddr *)&sin, len);
++
+ 	if ((*fd = socket(sin.ss_family, SOCK_STREAM, IPPROTO_TCP)) < 0)
+ 		return -1;
+ 
+@@ -259,7 +262,8 @@ static bool _is_port_ok(int s, uint16_t port, bool loc
+ 		return false;
+ 	}
+ 
+-	if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
++	socklen_t alen = slurm_sockaddr_fixlen((struct sockaddr *)&addr, sizeof(addr));
++	if (bind(s, (struct sockaddr *) &addr, alen) < 0) {
+ 		log_flag(NET, "%s: bind() failed on port:%d fd:%d: %m",
+ 			 __func__, port, s);
+ 		return false;
diff --git a/sysutils/slurm-wlm/files/patch-src_common_sack__api.c b/sysutils/slurm-wlm/files/patch-src_common_sack__api.c
new file mode 100644
index 000000000000..2c9132cd1ce8
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_sack__api.c
@@ -0,0 +1,27 @@
+--- src/common/sack_api.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/sack_api.c
+@@ -43,6 +43,7 @@
+ #include "src/common/pack.h"
+ #include "src/common/sack_api.h"
+ #include "src/common/slurm_protocol_api.h"
++#include "src/common/slurm_sockaddr.h"
+ #include "src/common/xmalloc.h"
+ 
+ #define SACK_CLUSTER_PATTERN "/run/slurm-%s/sack.socket"
+@@ -64,14 +65,14 @@ static int _sack_try_connection(struct sockaddr_un *ad
+ static int _sack_try_connection(struct sockaddr_un *addr)
+ {
+ 	int fd;
+-	size_t len = strlen(addr->sun_path) + 1 + sizeof(addr->sun_family);
++	socklen_t len = slurm_sockaddr_fixlen((struct sockaddr *)addr, (socklen_t)sizeof(*addr));
+ 
+ 	if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
+ 		debug3("%s: socket() failed: %m", __func__);
+ 		return -1;
+ 	}
+ 
+-	if (connect(fd, (struct sockaddr *) addr, len) < 0) {
++	if (connect(fd, (struct sockaddr *)addr, len) < 0) {
+ 		debug3("%s: connect() failed for %s: %m",
+ 		      __func__, addr->sun_path);
+ 		close(fd);
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
new file mode 100644
index 000000000000..2eea65b685a9
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c
@@ -0,0 +1,88 @@
+--- src/common/slurm_protocol_socket.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/slurm_protocol_socket.c
+@@ -64,6 +64,7 @@
+ #include "src/common/read_config.h"
+ #include "src/common/slurm_protocol_api.h"
+ #include "src/common/slurm_protocol_socket.h"
++#include "src/common/slurm_sockaddr.h"
+ #include "src/common/slurm_time.h"
+ #include "src/common/strlcpy.h"
+ #include "src/common/util-net.h"
+@@ -107,7 +108,9 @@ static void _sock_bind_wild(int sockfd)
+ 	slurm_setup_addr(&sin, RANDOM_USER_PORT);
+ 
+ 	for (retry=0; retry < PORT_RETRIES ; retry++) {
+-		rc = bind(sockfd, (struct sockaddr *) &sin, sizeof(sin));
++		socklen_t blen = slurm_sockaddr_fixlen(
++		    (struct sockaddr *)&sin, (socklen_t)sizeof(sin));
++		rc = bind(sockfd, (struct sockaddr *)&sin, blen);
+ 		if (rc >= 0)
+ 			break;
+ 		slurm_set_port(&sin, RANDOM_USER_PORT);
+@@ -543,26 +546,30 @@ extern int slurm_init_msg_engine(slurm_addr_t *addr, b
+ 
+ extern int slurm_init_msg_engine(slurm_addr_t *addr, bool quiet)
+ {
+-	socklen_t bind_len = (addr->ss_family == AF_INET6) ?
+-				     sizeof(struct sockaddr_in6) :
+-				     sizeof(struct sockaddr_in);
+ 	int rc;
+ 	int fd;
+ 	int log_lvl = LOG_LEVEL_ERROR;
+ 	const int one = 1;
+ 	const size_t sz1 = sizeof(one);
++	socklen_t bind_len = slurm_sockaddr_fixlen((struct sockaddr *)addr,
++			    (socklen_t)sizeof(*addr));
++
+ #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
+-	/*
+-	 * The BSDs requires the sa_len field to be set correctly in
+-	 * struct sockaddr_in / sockaddr_in6 before calling bind().
+-	 * If unset, bind() may fail with EINVAL.
+-	 */
++/*
++ * Fallback: if configure didn't detect any sockaddr length fields,
++ * preserve the historical BSD workaround.
++ */
++#if !defined(HAVE_STRUCT_SOCKADDR_IN_SIN_LEN) && \
++    !defined(HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN) && \
++    !defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
+ 	if (addr->ss_family == AF_INET)
+-		((struct sockaddr_in *) addr)->sin_len = bind_len;
++		((struct sockaddr_in *)addr)->sin_len =
++			(uint8_t)sizeof(struct sockaddr_in);
+ 	else if (addr->ss_family == AF_INET6)
+-		((struct sockaddr_in6 *) addr)->sin6_len = bind_len;
++		((struct sockaddr_in6 *)addr)->sin6_len =
++			(uint8_t)sizeof(struct sockaddr_in6);
+ #endif
+-
++#endif
+ 	if (quiet)
+ 		log_lvl = LOG_LEVEL_DEBUG;
+ 
+@@ -688,8 +695,10 @@ extern int slurm_open_stream(slurm_addr_t *addr, bool 
+ 			_sock_bind_wild(fd);
+ 		}
+ 
+-		rc = _slurm_connect(fd, (struct sockaddr const *)addr,
+-				    sizeof(*addr));
++		slurm_addr_t tmp = *addr;
++		socklen_t alen = slurm_sockaddr_fixlen(
++		    (struct sockaddr *)&tmp, (socklen_t)sizeof(tmp));
++		rc = _slurm_connect(fd, (struct sockaddr const *)&tmp, alen);
+ 		if (!rc) {
+ 			/* success */
+ 			break;
+@@ -756,8 +765,10 @@ extern int slurm_open_unix_stream(char *addr_name, int
+ 	memset(&sa, 0, sizeof(sa));
+ 	sa.sun_family = AF_UNIX;
+ 	strcpy(sa.sun_path, addr_name);
++	socklen_t slen = slurm_sockaddr_fixlen((struct sockaddr *)&sa,
++					       (socklen_t)sizeof(sa));
+ 
+-	while ((rc = connect(*fd, (struct sockaddr *) &sa, SUN_LEN(&sa))) &&
++	while ((rc = connect(*fd, (struct sockaddr *)&sa, slen)) &&
+ 	       (errno == EINTR))
+ 		; /* empty loop */
+ 
diff --git a/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.c b/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.c
new file mode 100644
index 000000000000..2d741194dccf
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.c
@@ -0,0 +1,92 @@
+--- src/common/slurm_sockaddr.c.orig	2026-01-29 00:01:06 UTC
++++ src/common/slurm_sockaddr.c
+@@ -0,0 +1,89 @@
++#include "config.h"
++
++#include "src/common/slurm_sockaddr.h"
++
++#include <stddef.h>
++#include <stdint.h>
++#include <string.h>
++#include <sys/un.h>
++#include <netinet/in.h>
++
++/* Safe pathname length for AF_UNIX (avoids overruns). */
++static socklen_t _unix_sock_len(const struct sockaddr_un *un, socklen_t provided)
++{
++	/* Linux abstract namespace: sun_path[0] == '\0' => length is provided. */
++	if (provided >= (socklen_t)offsetof(struct sockaddr_un, sun_path) &&
++	    un->sun_path[0] == '\0') {
++			return provided;
++	}
++
++	size_t maxn = sizeof(un->sun_path);
++	size_t n = strnlen(un->sun_path, maxn);
++
++	/* include terminating NUL like classic pathname sockets */
++	socklen_t len = (socklen_t)(offsetof(struct sockaddr_un, sun_path) + n);
++	return len;
++}
++
++socklen_t slurm_sockaddr_fixlen(struct sockaddr *sa, socklen_t provided_len)
++{
++	if (!sa)
++	    return provided_len;
++
++	switch (sa->sa_family) {
++	case AF_INET: {
++		socklen_t len = (socklen_t)sizeof(struct sockaddr_in);
++#if defined(HAVE_STRUCT_SOCKADDR_IN_SIN_LEN)
++		((struct sockaddr_in *)sa)->sin_len = (uint8_t)len;
++#elif defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
++		sa->sa_len = (uint8_t)len;
++#endif
++		return len;
++	}
++	case AF_INET6: {
++		socklen_t len = (socklen_t)sizeof(struct sockaddr_in6);
++#if defined(HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN)
++		((struct sockaddr_in6 *)sa)->sin6_len = (uint8_t)len;
++#elif defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
++		sa->sa_len = (uint8_t)len;
++#endif
++		return len;
++	}
++	case AF_UNIX: {
++		struct sockaddr_un *un = (struct sockaddr_un *)sa;
++		socklen_t len = _unix_sock_len(un, provided_len);
++#if defined(HAVE_STRUCT_SOCKADDR_UN_SUN_LEN)
++		un->sun_len = (uint8_t)len;
++#elif defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
++		sa->sa_len = (uint8_t)len;
++#endif
++		return len;
++	}
++	default:
++#if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
++		/* best effort: if caller provided a meaningful length, reflect it */
++		if (provided_len <= 255)
++		    sa->sa_len = (uint8_t)provided_len;
++#endif
++		return provided_len;
++	}
++}
++
++int slurm_sockaddr_copy_fix(struct sockaddr_storage *dst,
++			    const struct sockaddr *src,
++			    socklen_t src_len,
++			    socklen_t *out_len)
++{
++	if (!dst || !src || !out_len)
++	    return -1;
++
++	socklen_t n = src_len;
++	if (n > (socklen_t)sizeof(*dst))
++	    n = (socklen_t)sizeof(*dst);
++
++	memset(dst, 0, sizeof(*dst));
++	memcpy(dst, src, n);
++
++	*out_len = slurm_sockaddr_fixlen((struct sockaddr *)dst, n);
++	return 0;
++}
diff --git a/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.h b/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.h
new file mode 100644
index 000000000000..df97c7b91333
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_slurm__sockaddr.h
@@ -0,0 +1,29 @@
+--- src/common/slurm_sockaddr.h.orig	2026-01-29 00:01:06 UTC
++++ src/common/slurm_sockaddr.h
+@@ -0,0 +1,26 @@
++#pragma once
++
++#include <sys/types.h>
++#include <sys/socket.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* Fix length fields (sin_len/sin6_len/sun_len/sa_len when present) and
++ * return the correct socklen_t to pass to bind/connect/getnameinfo.
++ *
++ * - If sa is mutable, you can call this directly.
++ * - If sa is const, use slurm_sockaddr_copy_fix() to copy into a mutable buffer.
++ */
++socklen_t slurm_sockaddr_fixlen(struct sockaddr *sa, socklen_t provided_len);
++
++/* Copy src->dst and then apply slurm_sockaddr_fixlen() on dst. */
++int slurm_sockaddr_copy_fix(struct sockaddr_storage *dst,
++			    const struct sockaddr *src,
++			    socklen_t src_len,
++			    socklen_t *out_len);
++
++#ifdef __cplusplus
++}
++#endif
diff --git a/sysutils/slurm-wlm/files/patch-src_common_stepd__proxy.c b/sysutils/slurm-wlm/files/patch-src_common_stepd__proxy.c
new file mode 100644
index 000000000000..d29e60530a2e
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_stepd__proxy.c
@@ -0,0 +1,27 @@
+--- src/common/stepd_proxy.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/stepd_proxy.c
+@@ -40,6 +40,7 @@
+ #include "src/common/read_config.h"
+ #include "src/common/slurm_protocol_api.h"
+ #include "src/common/slurm_protocol_pack.h"
++#include "src/common/slurm_sockaddr.h"
+ #include "src/common/stepd_api.h"
+ #include "src/common/stepd_proxy.h"
+ #include "src/common/xmalloc.h"
+@@ -299,13 +300,14 @@ static int _stepd_connect_to_slurmd(void)
+ static int _stepd_connect_to_slurmd(void)
+ {
+ 	struct sockaddr_un slurmd_addr = { .sun_family = AF_UNIX };
+-	size_t len;
++	socklen_t len;
+ 	int fd;
+ 
+ 	(void) snprintf(slurmd_addr.sun_path, sizeof(slurmd_addr.sun_path),
+ 			"%s/slurmd.socket", slurmd_spooldir);
+ 
+-	len = strlen(slurmd_addr.sun_path) + 1 + sizeof(slurmd_addr.sun_family);
++	len = slurm_sockaddr_fixlen((struct sockaddr *)&slurmd_addr,
++				    (socklen_t)sizeof(slurmd_addr));
+ 
+ 	if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
+ 		error("%s: socket() failed: %m", __func__);
diff --git a/sysutils/slurm-wlm/files/patch-src_common_util-net.c b/sysutils/slurm-wlm/files/patch-src_common_util-net.c
new file mode 100644
index 000000000000..2552b6b2e2d0
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_util-net.c
@@ -0,0 +1,30 @@
+--- src/common/util-net.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/util-net.c
+@@ -60,6 +60,7 @@
+ #include "src/common/xassert.h"
+ #include "src/common/xmalloc.h"
+ #include "src/common/xstring.h"
++#include "src/common/slurm_sockaddr.h"
+ 
+ static pthread_mutex_t hostentLock = PTHREAD_MUTEX_INITIALIZER;
+ static pthread_rwlock_t getnameinfo_cache_lock = PTHREAD_RWLOCK_INITIALIZER;
+@@ -400,8 +401,18 @@ static char *_getnameinfo(const slurm_addr_t *addr)
+ {
+ 	char hbuf[NI_MAXHOST] = "\0";
+ 	int err;
++	struct sockaddr_storage ss;
++	socklen_t alen = 0;
+ 
+-	err = getnameinfo((const struct sockaddr *) addr, sizeof(*addr),
++
++	if (slurm_sockaddr_copy_fix(&ss, (const struct sockaddr *)addr,
++				    (socklen_t)sizeof(*addr), &alen) < 0) {
++		log_flag(NET, "%s: slurm_sockaddr_copy_fix(%pA) failed",
++			 __func__, addr);
++		return NULL;
++	}
++
++	err = getnameinfo((const struct sockaddr *)&ss, alen,
+ 			  hbuf, sizeof(hbuf), NULL, 0, NI_NAMEREQD);
+ 	if (err == EAI_SYSTEM) {
+ 		log_flag(NET, "%s: getnameinfo(%pA) failed: %s: %m",
diff --git a/sysutils/slurm-wlm/files/patch-src_common_xsystemd.c b/sysutils/slurm-wlm/files/patch-src_common_xsystemd.c
new file mode 100644
index 000000000000..072e972775a5
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_common_xsystemd.c
@@ -0,0 +1,28 @@
+--- src/common/xsystemd.c.orig	2026-01-15 20:26:01 UTC
++++ src/common/xsystemd.c
+@@ -45,6 +45,7 @@
+ #include "src/common/read_config.h"
+ #include "src/common/slurm_protocol_defs.h"
+ #include "src/common/strlcpy.h"
*** 312 LINES SKIPPED ***


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69b1708c.27cdb.720ee9b2>