diff options
Diffstat (limited to 'src/util/verto/module.c')
-rw-r--r-- | src/util/verto/module.c | 179 |
1 files changed, 3 insertions, 176 deletions
diff --git a/src/util/verto/module.c b/src/util/verto/module.c index d5977cbbc..68dc7093d 100644 --- a/src/util/verto/module.c +++ b/src/util/verto/module.c @@ -22,138 +22,25 @@ * SOFTWARE. */ -#ifdef WIN32 -#include <windows.h> -#define dlltype HMODULE -static char * -dllerror(void) { - char *amsg; - LPTSTR msg; +/* Stub implementation of module loading for MIT krb5 bundled libverto. */ - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_SYSTEM - | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &msg, 0, NULL); - amsg = strdup((const char*) msg); - LocalFree(msg); - return amsg; -} -#elif defined(aix) -#include "sys/ldr.h" - -struct Dl_info { - const char* dli_fname; -}; - -static int -dladdr(void* s, Dl_info* i) -{ - static const size_t bufSize = 4096; - G__FastAllocString buf(bufSize); - char* pldi = buf; - int r; - - r = loadquery(L_GETINFO, pldi, bufSize); - if (r == -1) { - i->dli_fname = NULL; - return 0; - } - - for (ld_info* ldi = (ld_info*) buf; - ldi->ldinfo_next; - ldi += ldi->ldinfo_next) { - char* textBegin = (char*) ldi->ldinfo_textorg; - if (textBegin < s) { - char* textEnd = textBegin + ldi->ldinfo_textsize; - if (textEnd > s) { - i->dli_fname = ldi->ldinfo_filename; - return 1; - } - } - } - - // First is main(), skip. - ld_info* ldi = (ld_info*) pldi; - while (ldi->ldinfo_next) { - pldi += ldi->ldinfo_next; - ldi = (ld_info*) pldi; - - } - - i->dli_fname = NULL; - return 0; -} -#else -#define _GNU_SOURCE -#include <stdlib.h> #include <string.h> -#include <dlfcn.h> -#define dlltype void * -#define dllerror() strdup(dlerror()) -#endif int module_symbol_is_present(const char *modname, const char *symbname) { -#ifdef WIN32 - return (GetProcAddress(GetModuleHandle(modname), symbname) != NULL || - GetProcAddress(GetModuleHandle(NULL), symbname) != NULL); -#else /* WIN32 */ - void* mod = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL); - if (mod) { - void* sym = dlsym(mod, symbname); - dlclose(mod); - return sym != NULL; - } -#endif /* WIN32 */ return 0; } int module_get_filename_for_symbol(void *addr, char **filename) { -#ifdef WIN32 - MEMORY_BASIC_INFORMATION info; - HMODULE mod; - char tmp[MAX_PATH]; - - if (!VirtualQuery(addr, &info, sizeof(info))) - return 0; - mod = (HMODULE) info.AllocationBase; - - if (!GetModuleFileNameA(mod, tmp, MAX_PATH)) - return 0; -#else - const char *tmp; - Dl_info dlinfo; - - if (!dladdr(addr, &dlinfo)) - return 0; - tmp = dlinfo.dli_fname; -#endif - - if (filename) { - *filename = strdup(tmp); - if (!*filename) - return 0; - } - - return 1; + return 0; } void module_close(void *dll) { - if (!dll) - return; - -#ifdef WIN32 - FreeLibrary((dlltype) dll); -#else /* WIN32 */ - dlclose((dlltype) dll); -#endif /* WIN32 */ } char * @@ -161,69 +48,9 @@ module_load(const char *filename, const char *symbname, int (*shouldload)(void *symb, void *misc, char **err), void *misc, void **dll, void **symb) { - dlltype intdll = NULL; - void * intsym = NULL; - char * interr = NULL; - if (dll) *dll = NULL; if (symb) *symb = NULL; - - /* Open the module library */ -#ifdef WIN32 - /* NOTE: DONT_RESOLVE_DLL_REFERENCES is evil. Don't use this in your own - * code. However, our design pattern avoids all the issues surrounding a - * more general use of this evil flag. */ - intdll = LoadLibraryEx(filename, NULL, DONT_RESOLVE_DLL_REFERENCES); -#else /* WIN32 */ - intdll = dlopen(filename, RTLD_LAZY | RTLD_LOCAL); -#endif /* WIN32 */ - if (!intdll) - return dllerror(); - - /* Get the module symbol */ -#ifdef WIN32 - intsym = (void *) GetProcAddress(intdll, symbname); -#else /* WIN32 */ - intsym = dlsym(intdll, symbname); -#endif /* WIN32 */ - if (!intsym) { - module_close(intdll); - return dllerror(); - } - - /* Figure out whether or not to load this module */ - if (!shouldload(intsym, misc, &interr)) { - module_close(intdll); - return interr; - } - - /* Re-open the module */ - module_close(intdll); -#ifdef WIN32 - intdll = LoadLibrary(filename); -#else /* WIN32 */ - intdll = dlopen(filename, RTLD_NOW | RTLD_LOCAL); -#endif /* WIN32 */ - if (!intdll) { - return dllerror(); - } - - /* Get the symbol again */ -#ifdef WIN32 - intsym = (void *) GetProcAddress(intdll, symbname); -#else /* WIN32 */ - intsym = dlsym(intdll, symbname); -#endif /* WIN32 */ - if (!intsym) { - module_close(intdll); - return dllerror(); - } - - if (dll) - *dll = intdll; - if (symb) - *symb = intsym; - return NULL; + return strdup("module loading disabled"); } |