Thanks!
Correct.
Looking for design suggestions, I will try to find the time and implement.

On 4/18/08, Martin Paljak <[EMAIL PROTECTED]> wrote:
> This is #29 in trac.
>
>
>  On Apr 18, 2008, at 4:06 AM, Alon Bar-Lev wrote:
>
>
> >
> >
> > Hello,
> >
> > I tried a simple program that according to PKCS#11v2.20 should work:
> >
> > And I found the he PKCS#11 provider does not refresh slot list with
> C_GetSlotList is called with NULL_PTR.
> >
> > This is extremely important for tokens, as the reader hardware is removed
> and inserted when
> > card is removed and inserted.
> >
> > Lacking Plug&Play support will not enable people to use CCID enabled
> tokens to use running applications,
> > as most applications calls C_Initialize once.
> >
> > A found the root cause i the libopensc context management. It looks like
> the libopensc itself does not support
> > Plug&Play, and use fixed reader list at context initialization.
> >
> > I guess there are people that familiar with the code and can propose some
> design for implementing
> > Plug&Play into libopensc, and then we think of how to propagate this into
> PKCS#11.
> >
> > Thanks!
> > Alon.
> >
> > ---
> >
> > From spec:
> > If an application calls C_GetSlotList with a non-NULL pSlotList,
> > and then the user adds or removes a hardware device, the changed slot list
> will only be
> > visible and effective if C_GetSlotList is called again with NULL. Even if
> C_
> > GetSlotList is successfully called this way, it may or may not be the case
> that the
> > changed slot list will be successfully recognized depending on the library
> > implementation. On some platforms, or earlier PKCS11 compliant libraries,
> it may be
> > necessary to successfully call C_Initialize or to restart the entire
> system.
> >
> >
> > ---
> >
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include <dlfcn.h>
> > #include <unistd.h>
> > #include "pkcs11.h"
> >
> > void p11error (CK_RV rv, char *m) {
> >        printf ("fatal %08x-%s\n", rv, m);
> >        exit (1);
> > }
> >
> > int main () {
> >        CK_FUNCTION_LIST_PTR f;
> >        CK_SESSION_HANDLE session;
> >        CK_C_GetFunctionList gfl = NULL;
> >        CK_RV rv;
> >        void *dl;
> >
> >        dl = dlopen ("/usr/lib/pkcs11/opensc-pkcs11.so",
> RTLD_NOW);
> >
> >        if (dl == NULL) {
> >                perror ("dlopen");
> >        }
> >
> >        void *p = dlsym (dl, "C_GetFunctionList");
> >        memmove (&gfl, &p, sizeof (void *));
> >        if (gfl == NULL) {
> >                perror ("dlsym");
> >        }
> >
> >        rv = gfl (&f);
> >
> >        if (rv != CKR_OK) {
> >                p11error (rv, "gfl");
> >        }
> >
> >        rv = f->C_Initialize (NULL);
> >
> >        if (rv != CKR_OK) {
> >                p11error (rv, "C_Initialize");
> >        }
> >
> >        while (1) {
> >                CK_SLOT_ID slots[10];
> >                CK_ULONG slotnum = sizeof (slots) / sizeof (CK_SLOT_ID);
> >                rv = f->C_GetSlotList (TRUE, slots, &slotnum);
> >
> >                if (rv != CKR_OK) {
> >                        p11error (rv, "C_GetSlotList");
> >                }
> >
> >                printf ("Slots with token: %ld\n", slotnum);
> >                sleep (2);
> >        }
> >
> >        return 0;
> > }
> >
> > _______________________________________________
> > opensc-devel mailing list
> > [email protected]
> >
> http://www.opensc-project.org/mailman/listinfo/opensc-devel
> >
>
>
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to