[Heimdal-source-changes] [heimdal/heimdal] 3e74e2: Fix some DLL hell: use dladdr() to find plugin dir
GitHub
noreply at github.com
Fre Sep 6 23:52:28 CEST 2013
Branch: refs/heads/master
Home: https://github.com/heimdal/heimdal
Commit: 3e74e2e3bb3936c95a0bae992c94c04d54ce246f
https://github.com/heimdal/heimdal/commit/3e74e2e3bb3936c95a0bae992c94c04d54ce246f
Author: Nicolas Williams <nico at cryptonector.com>
Date: 2013-09-06 (Fri, 06 Sep 2013)
Changed paths:
M cf/dlopen.m4
M configure.ac
M include/config.h.w32
M lib/krb5/context.c
M lib/krb5/plugin.c
M lib/roken/dlfcn.hin
M lib/roken/dlfcn_w32.c
Log Message:
-----------
Fix some DLL hell: use dladdr() to find plugin dir
Normally one would dlopen() a shared object's basename, not its absolute
path. However, lib/krb5/plugin.c, in an effort to be zero-conf-ish,
wants to readdir() to find plugins to load, and in the process it ends
up defeating the RTLD's search-the-caller's-rpath.
This commit partially addresses this by allowing the use of $ORIGIN in
plugin_dir values and using them for the default (except on OS X).
This allows multiple Heimdal versions installed on the same host, but
with different plugin ABIs, to co-exist. A step forward for doing make
check on hosts where Heimdal is installed.
For now we hardcode $ORIGIN/../lib/plugin/krb5 (linux, Solaris, *BSD),
or $ORIGIN (Windows; for assemblies objects need to be in the same
directory) and we eval $ORIGIN by using dladdr() (Linux, Solaris) or
GetModuleHandleEx() (Win32, via a dladdr() wrapper in libroken) to find
the path to libkrb5 whose dirname to use as $ORIGIN. For Windows,
because we need the plugins to be in the same directory as libkrb5, we
require a prefix on plugin DLLs ("plugin_krb5_") to distinguish them
from other objects.
We should add a special token to mean "look in $ORIGIN, sure, but
dlopen() the plugin basenames only (so the RTLD can search the rpath)".
More information about the Heimdal-source-changes
mailing list