Package: libpkcs11-helper1-dev
Version: 1.09-1
Severity: important
Dear Maintainer,
When compiling a program calling pkcs11h_token logout:
gcc -o provacardlogin provacardlogin.c -lpkcs11-helper
-DENABLE_PKCS11H_ENGINE_OPENSSL -DENABLE_PKCS11H_CERTIFICATE -Wall
the compiler return eror like:
rovacardlogin.c:(.text+0x371): undefined reference to `pkcs11h_token_logout'
pkcs11_toke_logout is documented in
http://www.opensc-
project.org/files/pkcs11-helper/doc/api/group__pkcs11h__token.html#g1e1c4fef0571b30f7351561afea7ad2f
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.4-trunk-rt-amd64 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=ca_ES.UTF-8, LC_CTYPE=ca_ES.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages libpkcs11-helper1-dev depends on:
ii libpkcs11-helper1 1.09-1
ii libssl-dev 1.0.1c-4
libpkcs11-helper1-dev recommends no packages.
libpkcs11-helper1-dev suggests no packages.
-- no debconf information
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <pkcs11-helper-1.0/pkcs11h-certificate.h>
#include <pkcs11-helper-1.0/pkcs11h-token.h>
#include <unistd.h>
#define TEST_PROVIDER "/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so"
#define TEST_LOG_LEVEL PKCS11H_LOG_ERROR
static void fatal (const char * const m, CK_RV rv) {
fprintf (stderr, "%s - %lu - %s\n", m, rv, pkcs11h_getMessage (rv));
exit (1);
}
static
PKCS11H_BOOL _pkcs11h_hooks_pin_prompt (void * const global_data,void * const user_data,
const pkcs11h_token_id_t token,const unsigned retry,
char * const pin, const size_t pin_max) {
char prompt[1024];
char *p = NULL;
snprintf (prompt, sizeof (prompt), "Please enter '%s' PIN or 'cancel': ", token->display);
p = getpass (prompt);
strncpy (pin, p, pin_max);
pin[pin_max-1] = '\0';
return strcmp (pin, "cancel") != 0;
}
int main(int argv ,char ** argc){
pkcs11h_certificate_id_list_t issuers, certs, temp;
pkcs11h_token_id_list_t tokens,tmptok;
CK_RV rv;
if ((rv = pkcs11h_initialize ()) != CKR_OK) {
fatal ("pkcs11h_initialize failed", rv);
}
if ((rv = pkcs11h_setPINPromptHook (_pkcs11h_hooks_pin_prompt, NULL)) != CKR_OK) {
fatal ("pkcs11h_setPINPromptHook failed", rv);
}
if ((rv = pkcs11h_addProvider ( TEST_PROVIDER, TEST_PROVIDER, FALSE,
PKCS11H_PRIVATEMODE_MASK_AUTO,PKCS11H_SLOTEVENT_METHOD_AUTO,
0, false )) != CKR_OK) {
fatal ("pkcs11h_terminate failed", rv);
}
if ( (rv = pkcs11h_token_enumTokenIds(PKCS11H_ENUM_METHOD_RELOAD, &tokens)) != CKR_OK){
fatal("pkcs11h_token_enumTokenIds failes",rv);
}
for(tmptok = tokens; tmptok!= NULL; tmptok = tmptok->next){
printf("Token Display: %s, ManufacturerId: %s, model: %s, serialNumber:%s , Label: %s.\n",
tmptok->token_id->display , tmptok->token_id->manufacturerID , tmptok->token_id->model , tmptok->token_id->serialNumber , tmptok->token_id->label);
}
tmptok = tokens;
pkcs11h_token_login(tmptok->token_id ,false , "*******");
if ((rv = pkcs11h_certificate_enumCertificateIds (PKCS11H_ENUM_METHOD_CACHE,NULL,
PKCS11H_PROMPT_MASK_ALLOW_PIN_PROMPT,&issuers,&certs)) != CKR_OK) {
fatal ("pkcs11h_certificate_enumCertificateIds failed", rv);
}
for (temp = issuers;temp != NULL;temp = temp->next) {
printf ("Issuer: %s\n", temp->certificate_id->displayName);
}
for (temp = certs;temp != NULL;temp = temp->next) {
printf ("Certificate: %s\n", temp->certificate_id->displayName);
}
if (certs == NULL) {
fatal ("No certificates found", rv);
}
pkcs11h_certificate_freeCertificateIdList (issuers);
pkcs11h_certificate_freeCertificateIdList (certs);
/*!Call pkcs11_token_logout*/
pkcs11h_token_logout(tmptok->token_id);
return 0;
}