Changeset 3511 for trunk

Show
Ignore:
Timestamp:
05/09/08 22:22:41 (8 months ago)
Author:
alonbl
Message:

Fix sc_pkcs15_verify_pin() to handle OpenCT hotplug correctly

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/libopensc/pkcs15-pin.c

    r3508 r3511  
    203203 
    204204        card = p15card->card; 
     205 
     206        /* 
     207         * PC/SC 
     208         * First call: returns SC_ERROR_CARD_RESET or SC_ERROR_READER_REATTACHED if card available. 
     209         * Second call: succeeds. 
     210         * 
     211         * OpenCT 
     212         * First call: returns SC_ERROR_READER_DETACHED even if card is available. 
     213         * Second call: SC_ERROR_READER_REATTACHED if card is available. 
     214         * Third call: succeeds. 
     215         */ 
    205216        r = sc_lock(card); 
    206         if (r == SC_ERROR_CARD_RESET || r == SC_ERROR_READER_REATTACHED) 
     217        if (r == SC_ERROR_CARD_RESET || r == SC_ERROR_READER_DETACHED || r == SC_ERROR_READER_REATTACHED) { 
    207218                r = sc_lock(card); 
     219                if (r == SC_ERROR_READER_REATTACHED) 
     220                        r = sc_lock(card); 
     221        } 
    208222        SC_TEST_RET(card->ctx, r, "sc_lock() failed"); 
    209223        /* the path in the pin object is optional */