diff -p -up xmlsec1-1.2.10/src/ltdl.c.ltdl xmlsec1-1.2.10/src/ltdl.c --- xmlsec1-1.2.10/src/ltdl.c.ltdl 2003-09-11 19:40:14.000000000 -0400 +++ xmlsec1-1.2.10/src/ltdl.c 2009-11-26 15:23:46.000000000 -0500 @@ -1426,9 +1426,10 @@ lt_dlexit () } static int -tryall_dlopen (handle, filename) +tryall_dlopen (handle, filename, useloader) lt_dlhandle *handle; const char *filename; + const char *useloader; { lt_dlhandle cur; lt_dlloader *loader; @@ -1484,6 +1485,11 @@ tryall_dlopen (handle, filename) while (loader) { + if (useloader && strcmp(loader->loader_name, useloader)) + { + loader = loader->next; + continue; + } lt_user_data data = loader->dlloader_data; cur->module = loader->module_open (data, filename); @@ -1526,7 +1532,7 @@ find_module (handle, dir, libdir, dlname /* try to open the old library first; if it was dlpreopened, we want the preopened version of it, even if a dlopenable module is available */ - if (old_name && tryall_dlopen(handle, old_name) == 0) + if (old_name && tryall_dlopen(handle, old_name, "dlpreload") == 0) { return 0; } @@ -1549,7 +1555,7 @@ find_module (handle, dir, libdir, dlname } sprintf (filename, "%s/%s", libdir, dlname); - error = (tryall_dlopen (handle, filename) != 0); + error = (tryall_dlopen (handle, filename, NULL) != 0); LT_DLFREE (filename); if (!error) @@ -1581,7 +1587,7 @@ find_module (handle, dir, libdir, dlname strcat(filename, objdir); strcat(filename, dlname); - error = tryall_dlopen (handle, filename) != 0; + error = tryall_dlopen (handle, filename, NULL) != 0; LT_DLFREE (filename); if (!error) { @@ -1604,7 +1610,7 @@ find_module (handle, dir, libdir, dlname } strcat(filename, dlname); - error = (tryall_dlopen (handle, filename) != 0); + error = (tryall_dlopen (handle, filename, NULL) != 0); LT_DLFREE (filename); if (!error) { @@ -1719,7 +1725,7 @@ find_file (basename, search_path, pdir, strcpy(filename+lendir, basename); if (handle) { - if (tryall_dlopen (handle, filename) == 0) + if (tryall_dlopen (handle, filename, NULL) == 0) { result = (lt_ptr) handle; goto cleanup; @@ -2032,7 +2038,7 @@ lt_dlopen (filename) /* lt_dlclose()ing yourself is very bad! Disallow it. */ LT_DLSET_FLAG (handle, LT_DLRESIDENT_FLAG); - if (tryall_dlopen (&newhandle, 0) != 0) + if (tryall_dlopen (&newhandle, 0, NULL) != 0) { LT_DLFREE (handle); return 0; @@ -2324,7 +2330,7 @@ lt_dlopen (filename) #ifdef LTDL_SYSSEARCHPATH && !find_file (basename, sys_search_path, 0, &newhandle) #endif - )) && tryall_dlopen (&newhandle, filename)) + )) && tryall_dlopen (&newhandle, filename, NULL)) { LT_DLFREE (handle); goto cleanup; diff -p -up xmlsec1-1.2.10/src/xmlsec-ltdl.c.ltdl xmlsec1-1.2.10/src/xmlsec-ltdl.c --- xmlsec1-1.2.10/src/xmlsec-ltdl.c.ltdl 2006-06-12 16:15:08.000000000 -0400 +++ xmlsec1-1.2.10/src/xmlsec-ltdl.c 2009-11-26 15:25:33.000000000 -0500 @@ -1426,9 +1426,10 @@ xmlsec_lt_dlexit () } static int -tryall_dlopen (handle, filename) +tryall_dlopen (handle, filename, useloader) xmlsec_lt_dlhandle *handle; const char *filename; + const char *useloader; { xmlsec_lt_dlhandle cur; xmlsec_lt_dlloader *loader; @@ -1484,6 +1485,11 @@ tryall_dlopen (handle, filename) while (loader) { + if (useloader && strcmp(loader->loader_name, useloader)) + { + loader = loader->next; + continue; + } xmlsec_lt_user_data data = loader->dlloader_data; cur->module = loader->module_open (data, filename); @@ -1526,7 +1532,7 @@ find_module (handle, dir, libdir, dlname /* try to open the old library first; if it was dlpreopened, we want the preopened version of it, even if a dlopenable module is available */ - if (old_name && tryall_dlopen(handle, old_name) == 0) + if (old_name && tryall_dlopen(handle, old_name, "dlpreload") == 0) { return 0; } @@ -1549,7 +1555,7 @@ find_module (handle, dir, libdir, dlname } sprintf (filename, "%s/%s", libdir, dlname); - error = (tryall_dlopen (handle, filename) != 0); + error = (tryall_dlopen (handle, filename, NULL) != 0); LT_DLFREE (filename); if (!error) @@ -1581,7 +1587,7 @@ find_module (handle, dir, libdir, dlname strcat(filename, objdir); strcat(filename, dlname); - error = tryall_dlopen (handle, filename) != 0; + error = tryall_dlopen (handle, filename, NULL) != 0; LT_DLFREE (filename); if (!error) { @@ -1604,7 +1610,7 @@ find_module (handle, dir, libdir, dlname } strcat(filename, dlname); - error = (tryall_dlopen (handle, filename) != 0); + error = (tryall_dlopen (handle, filename, NULL) != 0); LT_DLFREE (filename); if (!error) { @@ -1719,7 +1725,7 @@ find_file (basename, search_path, pdir, strcpy(filename+lendir, basename); if (handle) { - if (tryall_dlopen (handle, filename) == 0) + if (tryall_dlopen (handle, filename, NULL) == 0) { result = (xmlsec_lt_ptr) handle; goto cleanup; @@ -2032,7 +2038,7 @@ xmlsec_lt_dlopen (filename) /* xmlsec_lt_dlclose()ing yourself is very bad! Disallow it. */ LT_DLSET_FLAG (handle, LT_DLRESIDENT_FLAG); - if (tryall_dlopen (&newhandle, 0) != 0) + if (tryall_dlopen (&newhandle, 0, NULL) != 0) { LT_DLFREE (handle); return 0; @@ -2324,7 +2330,7 @@ xmlsec_lt_dlopen (filename) #ifdef LTDL_SYSSEARCHPATH && !find_file (basename, sys_search_path, 0, &newhandle) #endif - )) && tryall_dlopen (&newhandle, filename)) + )) && tryall_dlopen (&newhandle, filename, NULL)) { LT_DLFREE (handle); goto cleanup;