2013/2/19 Chris J Arges <[email protected]>:
> Ok I've found a workaround that allows me to connect and it is related
> to OpenSC.
>
> It seems that _WIN32 is being defined (on a Linux system) when I build
> OpenSC from the latest git source. And this was causing an issue in
> C_Initialize that made it immediately C_Finalize. I used the following
> patch to hack around this, and now OpenVPN connects using a smartcard
> via OpenSC.

_WIN32 is NOT defined.
What your patch does is to remove code used when _WIN32 is not defined.

Look at the ! (negation) in:
#if !defined(_WIN32)


> diff --git a/src/pkcs11/pkcs11-global.c b/src/pkcs11/pkcs11-global.c
> index 5652975..bbf897b 100644
> --- a/src/pkcs11/pkcs11-global.c
> +++ b/src/pkcs11/pkcs11-global.c
> @@ -199,6 +199,7 @@ CK_RV C_Initialize(CK_VOID_PTR pInitArgs)
>         sc_context_param_t ctx_opts;
>
>         /* Handle fork() exception */
> +#if 0
>  #if !defined(_WIN32)
>         if (current_pid != initialized_pid) {
>                 C_Finalize(NULL_PTR);
> @@ -206,6 +207,7 @@ CK_RV C_Initialize(CK_VOID_PTR pInitArgs)
>         initialized_pid = current_pid;
>         in_finalize = 0;
>  #endif
> +#endif
>
>         if (context != NULL) {
>                 sc_log(context, "C_Initialize(): Cryptoki already
> initialized\n");
>
> However, it seems the larger problem would be disabling _WIN32 from
> being defined on Linux systems. I'm not sure if this is a function of
> autotool versions or what.

We need to understanf why the code you removed is causing problems. It
is supposed to solve problems :-)

Alon, it looks like you wrote this code. Any idea?
Maybe call C_Finalize() only if initialized_pid has been set (!= -1)?

commit 1875a25c4090b261d9eeb419beeb74bae9735650
Author: alonbl <alonbl@c6295689-39f2-0310-b995-f0e70906c6a9>
Date:   Thu Mar 6 14:56:31 2008 +0000

    PKCS#11 "Application and processes" instructs the sequence
    that should be taken after fork().
    Applications should call C_Initialize() immediately after fork()
    to reinitialize the provider.

    The change monitor the pid that calls C_Initialize(), if it is
    different than previous C_Finalize() is called.

Bye

-- 
 Dr. Ludovic Rousseau

_______________________________________________
Muscle mailing list
[email protected]
http://lists.musclecard.com/mailman/listinfo/muscle_lists.musclecard.com

Reply via email to