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