From 11f52a616afe73fb212cb0f9d8000ec895208584 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Fri, 28 Jun 2019 17:36:24 +0200 Subject: [PATCH] Add hack to test without installing --- .gitignore | 2 ++ Makefile.am | 20 +++++++++++++++----- ldpreload_dlopen.c | 24 ++++++++++++++++++++++++ libtest.c | 6 ++++-- 4 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 ldpreload_dlopen.c diff --git a/.gitignore b/.gitignore index ffb8e81..e48b328 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ libtest # Automake stuff +*.la +*.lo .deps/ Makefile Makefile.in diff --git a/Makefile.am b/Makefile.am index f38f4e2..46a57e6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,6 +7,12 @@ files_la_LDFLAGS = -module -avoid-version files_la_CFLAGS = $(AM_CFLAGS) files_la_LIBADD = -lnfsidmap +lib_LTLIBRARIES += ldpreload_dlopen.la +ldpreload_dlopen_la_SOURCES = ldpreload_dlopen.c +ldpreload_dlopen_la_LDFLAGS = -module -avoid-version -fPIC -shared +ldpreload_dlopen_la_CFLAGS = $(AM_CFLAGS) +ldpreload_dlopen_la_LIBADD = -ldl + man5_MANS = libnfsidmap-files.5 EXTRA_DIST = $(man5_MANS) @@ -33,11 +39,15 @@ maintainer-clean-local: clean-local: echo CLEAN -test: libtest - ./libtest -u user1@test.domain user1@test.domain - ./libtest -u user2@test2.domain user2@test2.domain - ./libtest -g group11@test1.domain - ./libtest -g group21@test2.domain +test: libtest .libs/ldpreload_dlopen.so + LD_PRELOAD=.libs/ldpreload_dlopen.so \ + ./libtest -u user1@test.domain user1@test.domain + LD_PRELOAD=.libs/ldpreload_dlopen.so \ + ./libtest -u user2@test2.domain user2@test2.domain + LD_PRELOAD=.libs/ldpreload_dlopen.so \ + ./libtest -g group11@test1.domain + LD_PRELOAD=.libs/ldpreload_dlopen.so \ + ./libtest -g group21@test2.domain nodist_libtest_SOURCES = libtest.c libtest_LDADD = -lnfsidmap diff --git a/ldpreload_dlopen.c b/ldpreload_dlopen.c new file mode 100644 index 0000000..d835005 --- /dev/null +++ b/ldpreload_dlopen.c @@ -0,0 +1,24 @@ +#define _GNU_SOURCE +#include <sys/types.h> +#include <pwd.h> +#include <stdlib.h> +#include <dlfcn.h> +#include <string.h> + +void *dlopen(const char *filename, int flags) +{ + static void * (*func)(const char *filename, int flags); + static uid_t my_uid; + static char *override; + struct passwd *p; + + if(!func) { + func = (void *(*)(const char *filename, int flags)) + dlsym(RTLD_NEXT, "dlopen"); + } + if (strcmp(filename, "/usr/lib64/libnfsidmap/files.so") == 0) { + return func(".libs/files.so", flags); + } else { + return func(filename, flags); + } +} diff --git a/libtest.c b/libtest.c index fee0487..3a0baeb 100644 --- a/libtest.c +++ b/libtest.c @@ -58,10 +58,12 @@ char *conf_path = PATH_IDMAPDCONF; #define TEST(RESULT, ERR, OK) \ { \ int err = RESULT; \ - if (err != 0) \ + if (err != 0) { \ printf ERR ; \ - else \ + exit(1); \ + } else { \ printf OK ; \ + } \ } int main(int ac, char **av) -- GitLab