Bug#686155: libpkcs11-helper1-dev: undefined reference to 'pkcs11h_token_logout'

2012-09-22 Thread Eric Dorland
tags 686155 patch
thanks

Looks like an oversight in the exports. The attached patch should fix
it. I'm not sure this is release critical though.

* Pere Nubiola i Radigales (p...@nubiola.cat) wrote:
 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;
 
 }

-- 
Eric Dorland e...@kuroneko.ca
ICQ: #61138586, Jabber: ho...@jabber.com

diff --git a/lib/token.exports b/lib/token.exports
index 9ac673b..42fa27c 100644
--- a/lib/token.exports
+++ b/lib/token.exports
@@ -5,5 +5,6 @@ pkcs11h_token_enumTokenIds
 pkcs11h_token_freeTokenId
 pkcs11h_token_freeTokenIdList
 pkcs11h_token_login
+pkcs11h_token_logout
 pkcs11h_token_sameTokenId
 pkcs11h_token_serializeTokenId


signature.asc
Description: Digital signature


Bug#686155: libpkcs11-helper1-dev: undefined reference to 'pkcs11h_token_logout'

2012-08-29 Thread Pere Nubiola i Radigales
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;

}