From: Andrew Tridgell Date: Tue, 7 Dec 2010 22:41:25 +0000 (+1100) Subject: s4-ldb: use RTLD_DEEPBIND if available for ldb modules X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=cba73975c2868bb657962229c0c5e77009c0197d s4-ldb: use RTLD_DEEPBIND if available for ldb modules this allows us to avoid issues with ldb using heimdal while an application using ldb using MIT kerberos Pair-Programmed-With: Andrew Bartlett --- diff --git a/source4/lib/ldb/common/ldb_modules.c b/source4/lib/ldb/common/ldb_modules.c index e3301371405e..b382a91ec8e4 100644 --- a/source4/lib/ldb/common/ldb_modules.c +++ b/source4/lib/ldb/common/ldb_modules.c @@ -858,6 +858,7 @@ static int ldb_modules_load_path(const char *path, const char *version) dev_t st_dev; } *loaded; struct loaded *le; + int dlopen_flags; ret = stat(path, &st); if (ret != 0) { @@ -889,7 +890,18 @@ static int ldb_modules_load_path(const char *path, const char *version) return ldb_modules_load_dir(path, version); } - handle = dlopen(path, RTLD_NOW); + dlopen_flags = RTLD_NOW; +#ifdef RTLD_DEEPBIND + /* use deepbind if possible, to avoid issues with different + system library varients, for example ldb modules may be linked + against Heimdal while the application may use MIT kerberos + + See the dlopen manpage for details + */ + dlopen_flags |= RTLD_DEEPBIND; +#endif + + handle = dlopen(path, dlopen_flags); if (handle == NULL) { fprintf(stderr, "ldb: unable to dlopen %s : %s\n", path, dlerror()); return LDB_SUCCESS;