Skip to content

Commit 0236518

Browse files
astos-marcbcron2
authored andcommitted
use new pkcs11-helper interface to add providers
The new interface in pkcs11-helper 1.28 allows decoupling of provider registration and initialization. This allows modifying more (and future) properties apart from the 6 fixed ones supported as arguments to pkcs11h_addProvider(). With the new interface it is easier to see (from a code perspective) which option is set to which value. It's also not necessary to supply values for built-in defaults: - slot_event_method=PKCS11H_SLOTEVENT_METHOD_AUTO - slot_poll_interval=0 Signed-off-by: Marc Becker <marc.becker@astos.de> Acked-by: Selva Nair <selva.nair@gmail.com> Message-Id: <20221211191403.805-1-marc.becker@astos.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25643.html Signed-off-by: Gert Doering <gert@greenie.muc.de> (cherry picked from commit 45d9b02)
1 parent bcceded commit 0236518

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/openvpn/pkcs11.c

+33
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,38 @@ pkcs11_addProvider(
396396
provider
397397
);
398398

399+
#if PKCS11H_VERSION >= ((1<<16) | (28<<8) | (0<<0))
400+
if ((rv = pkcs11h_registerProvider(provider)) != CKR_OK)
401+
{
402+
msg(M_WARN, "PKCS#11: Cannot register provider '%s' %ld-'%s'", provider, rv, pkcs11h_getMessage(rv));
403+
}
404+
else
405+
{
406+
PKCS11H_BOOL allow_protected_auth = protected_auth;
407+
PKCS11H_BOOL cert_is_private = cert_private;
408+
409+
rv = pkcs11h_setProviderProperty(provider, PKCS11H_PROVIDER_PROPERTY_LOCATION, provider, strlen(provider) + 1);
410+
411+
if (rv == CKR_OK)
412+
{
413+
rv = pkcs11h_setProviderProperty(provider, PKCS11H_PROVIDER_PROPERTY_ALLOW_PROTECTED_AUTH, &allow_protected_auth, sizeof(allow_protected_auth));
414+
}
415+
if (rv == CKR_OK)
416+
{
417+
rv = pkcs11h_setProviderProperty(provider, PKCS11H_PROVIDER_PROPERTY_MASK_PRIVATE_MODE, &private_mode, sizeof(private_mode));
418+
}
419+
if (rv == CKR_OK)
420+
{
421+
rv = pkcs11h_setProviderProperty(provider, PKCS11H_PROVIDER_PROPERTY_CERT_IS_PRIVATE, &cert_is_private, sizeof(cert_is_private));
422+
}
423+
424+
if (rv != CKR_OK || (rv = pkcs11h_initializeProvider(provider)) != CKR_OK)
425+
{
426+
msg(M_WARN, "PKCS#11: Cannot initialize provider '%s' %ld-'%s'", provider, rv, pkcs11h_getMessage(rv));
427+
pkcs11h_removeProvider(provider);
428+
}
429+
}
430+
#else /* if PKCS11H_VERSION >= ((1<<16) | (28<<8) | (0<<0)) */
399431
if (
400432
(rv = pkcs11h_addProvider(
401433
provider,
@@ -410,6 +442,7 @@ pkcs11_addProvider(
410442
{
411443
msg(M_WARN, "PKCS#11: Cannot initialize provider '%s' %ld-'%s'", provider, rv, pkcs11h_getMessage(rv));
412444
}
445+
#endif /* if PKCS11H_VERSION >= ((1<<16) | (28<<8) | (0<<0)) */
413446

414447
dmsg(
415448
D_PKCS11_DEBUG,

0 commit comments

Comments
 (0)