[Openvpn-devel,3/3] special handling for PKCS11 providers on win32

Message ID a6075e08-01ae-9868-4d7e-cd7b99557946@astos.de
State Superseded
Headers show
Series [Openvpn-devel,1/3] unify code paths for loading PKCS11 | expand

Commit Message

Marc Becker Dec. 7, 2022, 1:10 a.m. UTC
in case of absolute library path, search origin for dependencies

---
  src/openvpn/pkcs11.c | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)

  needs https://github.com/OpenSC/pkcs11-helper/pull/59

PKCS11H_PROVIDER_PROPERTY_ALLOW_PROTECTED_AUTH, &allow_protected_auth, 
sizeof(allow_protected_auth))) != CKR_OK)
          {
@@ -422,7 +428,13 @@ pkcs11_addProvider(
          {
              msg(M_WARN, "PKCS#11: Cannot set provider properties '%s' 
%ld-'%s'", provider, rv, pkcs11h_getMessage(rv));
          }
-
+#if defined(PKCS11H_PROVIDER_PROPERTY_LOADER_FLAGS)
+        if (loader_flags
+            && (rv = pkcs11h_setProviderProperty(provider, 
PKCS11H_PROVIDER_PROPERTY_LOADER_FLAGS, &loader_flags, 
sizeof(loader_flags))) != CKR_OK)
+        {
+            msg(M_WARN, "PKCS#11: Cannot set alternative loader flags 
'%s' %ld-'%s'", provider, rv, pkcs11h_getMessage(rv));
+        }
+#endif
          if ((rv = pkcs11h_initializeProvider(provider)) != CKR_OK)
          {
              pkcs11h_removeProvider(provider);

Patch

diff --git a/src/openvpn/pkcs11.c b/src/openvpn/pkcs11.c
index 6ef26eb0..65693aed 100644
--- a/src/openvpn/pkcs11.c
+++ b/src/openvpn/pkcs11.c
@@ -406,7 +406,13 @@  pkcs11_addProvider(
      {
          PKCS11H_BOOL allow_protected_auth = protected_auth;
          PKCS11H_BOOL cert_is_private = cert_private;
-
+        unsigned loader_flags = 0;
+#if defined(_WIN32)
+        if (platform_absolute_pathname(provider))
+        {
+            loader_flags = LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | 
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR;
+        }
+#endif
          if (allow_protected_auth
              && (rv = pkcs11h_setProviderProperty(provider,