diff mbox series

libnss-nis: Do not export _nss_nis_getsecretkey when libc does not have xdecrypt

Message ID 20250827064332.297325-1-raj.khem@gmail.com
State New
Headers show
Series libnss-nis: Do not export _nss_nis_getsecretkey when libc does not have xdecrypt | expand

Commit Message

Khem Raj Aug. 27, 2025, 6:43 a.m. UTC
Fixes build errors ( seen with lld particularly )

| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'NSS_NIS_PRIVATE_2.0' to symbol '_nss_nis_getsecretkey' failed: symbol not defined
| x86_64-yoesdk-linux-clang: error: linker command failed with exit code 1 (use -v to see invocation)
| make[3]: *** [Makefile:642: libnss_nis.la] Error 1
| make[3]: Leaving directory '/mnt/b/yoe/master/build/tmp/work/x86_64-nativesdk-yoesdk-linux/nativesdk-libnss-nis/3.2/build/src'

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 .../recipes-extended/libnss-nis/libnss-nis.bb |  1 +
 ...s_getsecretkey-export-conditional-on.patch | 78 +++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 meta/recipes-extended/libnss-nis/libnss-nis/0001-make-ake-_nss_nis_getsecretkey-export-conditional-on.patch
diff mbox series

Patch

diff --git a/meta/recipes-extended/libnss-nis/libnss-nis.bb b/meta/recipes-extended/libnss-nis/libnss-nis.bb
index 2198606de5e..a7f6545be06 100644
--- a/meta/recipes-extended/libnss-nis/libnss-nis.bb
+++ b/meta/recipes-extended/libnss-nis/libnss-nis.bb
@@ -18,6 +18,7 @@  PV = "3.2"
 SRCREV = "cd0d391af9535b56e612ed227c1b89be269f3d59"
 
 SRC_URI = "git://github.com/thkukuk/libnss_nis;branch=master;protocol=https \
+           file://0001-make-ake-_nss_nis_getsecretkey-export-conditional-on.patch \
           "
 
 inherit autotools pkgconfig
diff --git a/meta/recipes-extended/libnss-nis/libnss-nis/0001-make-ake-_nss_nis_getsecretkey-export-conditional-on.patch b/meta/recipes-extended/libnss-nis/libnss-nis/0001-make-ake-_nss_nis_getsecretkey-export-conditional-on.patch
new file mode 100644
index 00000000000..b9996d32921
--- /dev/null
+++ b/meta/recipes-extended/libnss-nis/libnss-nis/0001-make-ake-_nss_nis_getsecretkey-export-conditional-on.patch
@@ -0,0 +1,78 @@ 
+From ecc9767fd8c3a1ecbfca5df18714df34995a38a3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 26 Aug 2025 22:45:54 -0700
+Subject: [PATCH] make: Make _nss_nis_getsecretkey export conditional on xdecrypt()
+
+The function _nss_nis_getsecretkey in nis-publickey.c is only
+compiled when xdecrypt() is available. This is controlled by the
+configure check AC_CHECK_FUNCS([xdecrypt]) which defines
+HAVE_XDECRYPT in config.h.
+
+However, the symbol was always listed in src/libnss_nis.map,
+regardless of whether the function was actually built. On systems
+without xdecrypt() (for example musl or certain embedded toolchains),
+this leads to a link failure:
+
+    ld: error: version script assignment of 'NSS_NIS_1.0' to symbol
+    '_nss_nis_getsecretkey' failed: symbol not defined
+
+To fix this mismatch, rename libnss_nis.map to
+libnss_nis.map.in and generate libnss_nis.map at build time:
+
+ - If HAVE_XDECRYPT is defined, the symbol map is copied unchanged.
+ - Otherwise, the _nss_nis_getsecretkey line is stripped out
+   with sed.
+
+Automake rules are added to src/Makefile.am so the correct
+libnss_nis.map is produced, and the linker always sees a version
+script consistent with the compiled objects.
+
+This ensures _nss_nis_getsecretkey is exported only when it exists
+in the object code, preventing build failures on platforms where
+xdecrypt() is missing.
+
+This fixes build with LLD linker which defaults to not accepting
+undefined symbols
+
+Upstream-Status: Submitted [https://github.com/thkukuk/libnss_nis/pull/12]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/Makefile.am                           | 18 +++++++++++++++++-
+ src/{libnss_nis.map => libnss_nis.map.in} |  0
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+ rename src/{libnss_nis.map => libnss_nis.map.in} (100%)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e1a9bb2..cc32ea9 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -22,8 +22,24 @@ nss_loader_test_LDADD = -ldl
+ 
+ TESTS = $(check_PROGRAMS)
+ 
++# Build the version script from a template, pruning _nss_nis_getsecretkey
++# when xdecrypt() was not detected by configure (i.e., HAVE_XDECRYPT is unset).
++BUILT_SOURCES = libnss_nis.map
++EXTRA_DIST   += libnss_nis.map.in
++CLEANFILES   += libnss_nis.map
++
++libnss_nis.map: $(srcdir)/libnss_nis.map.in $(top_builddir)/config.h
++	$(AM_V_GEN) { \
++	  if grep -q '^[[:space:]]*#define[[:space:]]\+HAVE_XDECRYPT[[:space:]]\+1' $(top_builddir)/config.h ; then \
++	    cp $(srcdir)/libnss_nis.map.in $@ ; \
++	  else \
++	    sed 's/ _nss_nis_getsecretkey;//g' \
++	        $(srcdir)/libnss_nis.map.in > $@ ; \
++	  fi ; \
++	}
++
+ libnss_nis_la_LDFLAGS = -version-info 2:0:0 \
+-	-Wl,--version-script=$(srcdir)/libnss_nis.map
++	-Wl,--version-script=$(builddir)/libnss_nis.map
+ libnss_nis_la_LIBADD = @LIBNSL_LIBS@
+ libnss_nis_la_SOURCES = nis-alias.c nis-ethers.c nis-grp.c nis-hosts.c \
+ 			nis-initgroups.c nis-netgrp.c nis-network.c  \
+diff --git a/src/libnss_nis.map b/src/libnss_nis.map.in
+similarity index 100%
+rename from src/libnss_nis.map
+rename to src/libnss_nis.map.in