mirror of
git://slackware.nl/current.git
synced 2025-01-03 23:03:22 +01:00
66 lines
2.2 KiB
Diff
66 lines
2.2 KiB
Diff
|
From e134d9a6b6332bd085093e9075c949ece784fcd0 Mon Sep 17 00:00:00 2001
|
||
|
From: sashan <anedvedicky@gmail.com>
|
||
|
Date: Sat, 18 Jun 2022 00:05:32 +0200
|
||
|
Subject: [PATCH] Fix PKCS11 module path search
|
||
|
|
||
|
Commit c5c11839e02c7993eb78f2c94c75c10cf93f2195 switched the loading
|
||
|
of the PKCS#11 module from dlopen() to krb5int_open_plugin(). Because
|
||
|
krb5int_open_plugin() includes a stat() test, this change has the
|
||
|
unintended consequence of requiring the module name to be an absolute
|
||
|
or relative path to the library, not a filename within the dynamic
|
||
|
linker search path.
|
||
|
|
||
|
Within krb5int_open_plugin(), only stat() the filename on the
|
||
|
platforms which will use the file type.
|
||
|
|
||
|
[ghudson@mit.edu: adjusted conditionals to call stat() on Windows;
|
||
|
rewrote commit message]
|
||
|
|
||
|
ticket: 9067 (new)
|
||
|
tags: pullup
|
||
|
target_version: 1.20-next
|
||
|
---
|
||
|
src/util/support/plugins.c | 11 +++++++----
|
||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/util/support/plugins.c b/src/util/support/plugins.c
|
||
|
index 1ff10c354d0..c6a9a21d57c 100644
|
||
|
--- a/src/util/support/plugins.c
|
||
|
+++ b/src/util/support/plugins.c
|
||
|
@@ -189,9 +189,10 @@ long KRB5_CALLCONV
|
||
|
krb5int_open_plugin (const char *filepath, struct plugin_file_handle **h, struct errinfo *ep)
|
||
|
{
|
||
|
long err = 0;
|
||
|
- struct stat statbuf;
|
||
|
struct plugin_file_handle *htmp = NULL;
|
||
|
int got_plugin = 0;
|
||
|
+#if defined(USE_CFBUNDLE) || defined(_WIN32)
|
||
|
+ struct stat statbuf;
|
||
|
|
||
|
if (!err) {
|
||
|
if (stat (filepath, &statbuf) < 0) {
|
||
|
@@ -201,6 +202,7 @@ krb5int_open_plugin (const char *filepath, struct plugin_file_handle **h, struct
|
||
|
filepath, strerror(err));
|
||
|
}
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
if (!err) {
|
||
|
htmp = calloc (1, sizeof (*htmp)); /* calloc initializes ptrs to NULL */
|
||
|
@@ -208,11 +210,12 @@ krb5int_open_plugin (const char *filepath, struct plugin_file_handle **h, struct
|
||
|
}
|
||
|
|
||
|
#if USE_DLOPEN
|
||
|
- if (!err && ((statbuf.st_mode & S_IFMT) == S_IFREG
|
||
|
+ if (!err
|
||
|
#if USE_CFBUNDLE
|
||
|
- || (statbuf.st_mode & S_IFMT) == S_IFDIR
|
||
|
+ && ((statbuf.st_mode & S_IFMT) == S_IFREG
|
||
|
+ || (statbuf.st_mode & S_IFMT) == S_IFDIR)
|
||
|
#endif /* USE_CFBUNDLE */
|
||
|
- )) {
|
||
|
+ ) {
|
||
|
void *handle = NULL;
|
||
|
|
||
|
#if USE_CFBUNDLE
|