From 081bdf942126b7d4a368d09438a06fd831c14dad Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 14 Mar 2019 15:02:52 +0100 Subject: [PATCH] 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. --- ChangeLog | 8 ++++++++ nss/Makefile | 3 ++- nss/tst-nss-files-alias-truncated.c | 7 +++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f0281e5d10a..72a14951370 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2019-03-14 Florian Weimer + + * 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 * scripts/check-obsolete-constructs.py (HeaderChecker.check): diff --git a/nss/Makefile b/nss/Makefile index a8caa8af380..95081bddc5b 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 2d6aba3c0e3..029ae6a2a7e 100644 --- a/nss/tst-nss-files-alias-truncated.c +++ b/nss/tst-nss-files-alias-truncated.c @@ -17,11 +17,13 @@ . */ #include +#include #include #include #include #include #include +#include #include 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 (); -- 2.39.2