summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPino Toscano <toscano.pino@tiscali.it>2014-06-03 14:50:05 +0200
committerMichael Adam <obnox@samba.org>2014-06-05 23:57:09 +0200
commitb5cd09805445bbaee1a8a8198611244281e62861 (patch)
tree8a5c04f6e5b529666a5dd4b359671bbe7e285f75 /lib
parent7f36828fccdac860e6ef06424e9b486aec1af00f (diff)
downloadsamba-b5cd09805445bbaee1a8a8198611244281e62861.tar.gz
samba-b5cd09805445bbaee1a8a8198611244281e62861.tar.xz
samba-b5cd09805445bbaee1a8a8198611244281e62861.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>
Diffstat (limited to 'lib')
-rw-r--r--lib/socket_wrapper/socket_wrapper.c8
-rw-r--r--lib/socket_wrapper/wscript1
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c
index 95643aa7bd1..38f7a449f92 100644
--- a/lib/socket_wrapper/socket_wrapper.c
+++ b/lib/socket_wrapper/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};
diff --git a/lib/socket_wrapper/wscript b/lib/socket_wrapper/wscript
index 3615fa87c95..fba50986c2d 100644
--- a/lib/socket_wrapper/wscript
+++ b/lib/socket_wrapper/wscript
@@ -41,6 +41,7 @@ def configure(conf):
conf.CHECK_HEADERS('sys/signalfd.h')
conf.CHECK_HEADERS('sys/eventfd.h')
conf.CHECK_HEADERS('sys/timerfd.h')
+ conf.CHECK_HEADERS('gnu/lib-names.h')
conf.CHECK_STRUCTURE_MEMBER('struct msghdr',
'msg_control',