summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPino Toscano <toscano.pino@tiscali.it>2014-05-08 13:37:02 +0200
committerAndreas Schneider <asn@samba.org>2014-05-08 16:00:10 +0200
commit0fa56909442c3cfea6a697681ea0e89ba5a0aa0f (patch)
tree39b3dd3777af3db8de637e0fbb6d2de86eb4e984
parent3d70059d5465e8ae0a3149265ea7c04a78e480d2 (diff)
downloadsocket_wrapper-0fa56909442c3cfea6a697681ea0e89ba5a0aa0f.tar.gz
socket_wrapper-0fa56909442c3cfea6a697681ea0e89ba5a0aa0f.tar.xz
socket_wrapper-0fa56909442c3cfea6a697681ea0e89ba5a0aa0f.zip
swrap: use LIBC_SO from GNU libc, if available
Look for gnu/lib-names.h and use the LIBC_SO define to dlopen libc, so the right library is loaded without manually searching for libc.so.N. Signed-off-by: Pino Toscano <toscano.pino@tiscali.it> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--ConfigureChecks.cmake1
-rw-r--r--config.h.cmake1
-rw-r--r--src/socket_wrapper.c8
3 files changed, 10 insertions, 0 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index c05cbb9..8db5162 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -51,6 +51,7 @@ check_include_file(sys/filio.h HAVE_SYS_FILIO_H)
check_include_file(sys/signalfd.h HAVE_SYS_SIGNALFD_H)
check_include_file(sys/eventfd.h HAVE_SYS_EVENTFD_H)
check_include_file(sys/timerfd.h HAVE_SYS_TIMERFD_H)
+check_include_file(gnu/lib-names.h HAVE_GNU_LIB_NAMES_H)
# FUNCTIONS
check_function_exists(strncpy HAVE_STRNCPY)
diff --git a/config.h.cmake b/config.h.cmake
index abbf133..efa519b 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -18,6 +18,7 @@
#cmakedefine HAVE_SYS_SIGNALFD_H 1
#cmakedefine HAVE_SYS_EVENTFD_H 1
#cmakedefine HAVE_SYS_TIMERFD_H 1
+#cmakedefine HAVE_GNU_LIB_NAMES_H 1
/************************ STRUCT MEMBERS *************************/
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index 95643aa..38f7a44 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -73,6 +73,9 @@
#include <stdarg.h>
#include <stdbool.h>
#include <unistd.h>
+#ifdef HAVE_GNU_LIB_NAMES_H
+#include <gnu/lib-names.h>
+#endif
enum swrap_dbglvl_e {
SWRAP_LOG_ERROR = 0,
@@ -418,6 +421,11 @@ static void *swrap_load_lib_handle(enum swrap_lib lib)
/* FALL TROUGH */
case SWRAP_LIBC:
handle = swrap.libc_handle;
+#ifdef LIBC_SO
+ if (handle == NULL) {
+ handle = dlopen(LIBC_SO, flags);
+ }
+#endif
if (handle == NULL) {
for (handle = NULL, i = 10; handle == NULL && i >= 0; i--) {
char soname[256] = {0};