CK_RV
pkcs_C_Initialize(CK_VOID_PTR pReserved);
+char *pk11_get_load_error_message(void);
+
CK_RV
pkcs_C_Finalize(CK_VOID_PTR pReserved);
if (rv == 0xfe) {
result = PK11_R_NOPROVIDER;
+ fprintf(stderr, "Can't load PKCS#11 provider: %s\n",
+ pk11_get_load_error_message());
goto unlock;
}
if (rv != CKR_OK) {
#include <pk11/internal.h>
static void *hPK11 = NULL;
+static char loaderrmsg[1024];
CK_RV
pkcs_C_Initialize(CK_VOID_PTR pReserved) {
hPK11 = dlopen(pk11_get_lib_name(), RTLD_NOW);
- if (hPK11 == NULL)
+ if (hPK11 == NULL) {
+ snprintf(loaderrmsg, sizeof(loaderrmsg),
+ "dlopen(\"%s\") failed: %s\n",
+ pk11_get_lib_name(), dlerror());
return (CKR_LIBRARY_FAILED_TO_LOAD);
+ }
sym = (CK_C_Initialize)dlsym(hPK11, "C_Initialize");
if (sym == NULL)
return (CKR_SYMBOL_RESOLUTION_FAILED);
return (*sym)(pReserved);
}
+char *pk11_get_load_error_message(void) {
+ return (loaderrmsg);
+}
+
CK_RV
pkcs_C_Finalize(CK_VOID_PTR pReserved) {
CK_C_Finalize sym;
if (hPK11 == NULL)
hPK11 = dlopen(pk11_get_lib_name(), RTLD_NOW);
- if (hPK11 == NULL)
+ if (hPK11 == NULL) {
+ snprintf(loaderrmsg, sizeof(loaderrmsg),
+ "dlopen(\"%s\") failed: %s\n",
+ pk11_get_lib_name(), dlerror());
return (CKR_LIBRARY_FAILED_TO_LOAD);
+ }
if ((sym == NULL) || (hPK11 != pPK11)) {
pPK11 = hPK11;
sym = (CK_C_OpenSession)dlsym(hPK11, "C_OpenSession");
pk11_finalize
pk11_get_best_token
pk11_get_lib_name
+pk11_get_load_error_message
pk11_get_session
pk11_initialize
pk11_initmsgcat
/* load PKCS11 DLL */
static HINSTANCE hPK11 = NULL;
+static char loaderrmsg[1024];
CK_RV
pkcs_C_Initialize(CK_VOID_PTR pReserved) {
hPK11 = LoadLibraryA(lib_name);
- if (hPK11 == NULL)
+ if (hPK11 == NULL) {
+ const DWORD err = GetLastError();
+ snprintf(loaderrmsg, sizeof(loaderrmsg),
+ "LoadLibraryA(\"%s\") failed with 0x%X\n",
+ lib_name, err);
return (CKR_LIBRARY_FAILED_TO_LOAD);
+ }
sym = (CK_C_Initialize)GetProcAddress(hPK11, "C_Initialize");
if (sym == NULL)
return (CKR_SYMBOL_RESOLUTION_FAILED);
return (*sym)(pReserved);
}
+char *pk11_get_load_error_message(void) {
+ return (loaderrmsg);
+}
+
CK_RV
pkcs_C_Finalize(CK_VOID_PTR pReserved) {
CK_C_Finalize sym;
if (hPK11 == NULL)
hPK11 = LoadLibraryA(pk11_get_lib_name());
- if (hPK11 == NULL)
+ if (hPK11 == NULL) {
+ const DWORD err = GetLastError();
+ snprintf(loaderrmsg, sizeof(loaderrmsg),
+ "LoadLibraryA(\"%s\") failed with 0x%X\n",
+ pk11_get_lib_name(), err);
return (CKR_LIBRARY_FAILED_TO_LOAD);
+ }
if (sym == NULL)
sym = (CK_C_OpenSession)GetProcAddress(hPK11, "C_OpenSession");
if (sym == NULL)