Commit Graph

13 Commits

Author SHA1 Message Date
Nicolas Williams
fdabfd6040 Win32 dladdr() wasn't returning 0 in all failures 2014-02-04 15:43:28 -06:00
Nicolas Williams
2fd4c58338 dladdr() on Win32 should't leave dli_fname == NULL 2014-02-04 15:37:45 -06:00
Jeffrey Altman
017e502089 roken: win32 dlopen use LoadLibraryEx AltSearchPaths
LoadLibrary() is unable to load DLLs which are being loaded from
a global side by side assembly directory.   Instead, use

  LoadLibraryEx() with LOAD_WITH_ALTERED_SEARCH_PATH

This permits a DLL to be loaded from the WinSxs tree when a fully
qualified path is provided.

Change-Id: I0e5da1a8610c6b571f73c0e7b0beabeecbbb3b77
2013-09-13 22:19:21 -04:00
Jeffrey Altman
475a366a19 roken: win32 dladdr do not normalize paths to slash
The resulting path needs to be passed to LoadLibrary.

Change-Id: Idfc45a4af4996105a428d88d9327f0dee5510be7
2013-09-13 22:19:11 -04:00
Jeffrey Altman
2179c92245 roken: win32 dladdr kill warnings
illegal pointer cast

unused variable

Change-Id: Ie5ebd2fd6b6e1cb06fec97dcf947fc40660abd91
2013-09-13 22:19:02 -04:00
Nicolas Williams
3e74e2e3bb 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)".
2013-09-06 16:51:53 -05:00
Love Hornquist Astrand
0879b9831a remove trailing whitespace 2011-05-21 11:57:31 -07:00
Asanka C. Herath
d4379e27de Windows: Interlocked ops work on LONGs
Therefore change the type of the TLS slot id to LONG.
2010-11-24 15:33:35 -05:00
Asanka C. Herath
0ae44152b7 Windows: Set error mode before calling LoadLibrary()
Unless SEM_FAILCRITICALERRORS is set, Windows may pop-up a dialog box
if the specified module cannot be loaded.  This is not appropriate for
unattended or batch processes.
2010-11-24 15:33:20 -05:00
Asanka C. Herath
1e365190d0 Windows: Manage thread local storage manually in dlfcn_w32 2010-11-24 15:32:51 -05:00
Asanka C. Herath
0ee4597aed Always include <config.h> in roken implementation
Remove unnecessary ifdefs and add <config.h> to dlfcn_w32.c.  This is
required for correct export declarations when building roken as a DLL.
2010-11-23 02:24:38 -05:00
Asanka Herath
5f87ea3bbf Let dlfcn.h return a function pointer on Windows 2010-08-20 13:03:38 -04:00
Asanka Herath
d00f9984a5 Make roken build on windows
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2009-11-24 21:42:02 -08:00