about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2019-03-14 15:02:52 +0100
committerFlorian Weimer <fweimer@redhat.com>2019-03-14 15:38:00 +0100
commit081bdf942126b7d4a368d09438a06fd831c14dad (patch)
tree0443315f5c94d1b07bb59c29c6c1ac61beb4712a
parent97f8225d22ef727ae9935cc231643efdc430d530 (diff)
downloadglibc-081bdf942126b7d4a368d09438a06fd831c14dad.tar.gz
glibc-081bdf942126b7d4a368d09438a06fd831c14dad.tar.xz
glibc-081bdf942126b7d4a368d09438a06fd831c14dad.zip
nss: Fix tst-nss-files-alias-truncated for default --as-needed linking
Linking to the NSS module directly does not work if the linker defaults
to --as-needed because it will remove the apparently unused DSO
reference and not generate a DT_NEEDED entry.  Use an explicit dlopen
call, like in the other chroot tests involving NSS modules.
-rw-r--r--ChangeLog8
-rw-r--r--nss/Makefile3
-rw-r--r--nss/tst-nss-files-alias-truncated.c7
3 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f0281e5d10..72a1495137 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-03-14  Florian Weimer  <fweimer@redhat.com>
+
+	* nss/tst-nss-files-alias-truncated.c (do_test): Load
+	libnss_files.
+	* nss/Makefile (tst-nss-files-alias-truncated): Link with -ldl,
+	but not with libnss_files.
+	(tst-nss-files-alias-truncated.out): Depend on libnss_files.
+
 2019-03-14  Zack Weinberg  <zackw@panix.com>
 
 	* scripts/check-obsolete-constructs.py (HeaderChecker.check):
diff --git a/nss/Makefile b/nss/Makefile
index a8caa8af38..95081bddc5 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -178,4 +178,5 @@ $(objpfx)tst-nss-files-hosts-multi: $(libdl)
 $(objpfx)tst-nss-files-hosts-getent: $(libdl)
 $(objpfx)tst-nss-files-alias-leak: $(libdl)
 $(objpfx)tst-nss-files-alias-leak.out: $(objpfx)/libnss_files.so
-$(objpfx)tst-nss-files-alias-truncated: $(objpfx)/libnss_files.so
+$(objpfx)tst-nss-files-alias-truncated: $(libdl)
+$(objpfx)tst-nss-files-alias-truncated.out: $(objpfx)/libnss_files.so
diff --git a/nss/tst-nss-files-alias-truncated.c b/nss/tst-nss-files-alias-truncated.c
index 2d6aba3c0e..029ae6a2a7 100644
--- a/nss/tst-nss-files-alias-truncated.c
+++ b/nss/tst-nss-files-alias-truncated.c
@@ -17,11 +17,13 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <aliases.h>
+#include <gnu/lib-names.h>
 #include <nss.h>
 #include <stddef.h>
 #include <support/check.h>
 #include <support/namespace.h>
 #include <support/test-driver.h>
+#include <support/xdlfcn.h>
 #include <support/xunistd.h>
 
 static void
@@ -42,8 +44,9 @@ in_chroot (void *closure)
 static int
 do_test (void)
 {
-  /* nss_files has already been loaded via DT_NEEDED, outside the
-     chroot.  */
+  /* Make sure we don't try to load the module in the chroot.  */
+  xdlopen (LIBNSS_FILES_SO, RTLD_NOW);
+
   __nss_configure_lookup ("aliases", "files");
 
   support_become_root ();