Hey folks,

I've attached a small patch that makes the call to SCardEstablishContext before we daemonize (if we wish to do so ofc.). If the call comes before we daemonize(fork) the pc/sc handle gets invalidated thus it wont find any readers. (http://pcsclite.alioth.debian.org/api/winscard__clnt_8c.html#aaa02e1f70d68a502cd92ed066c44542f)

I don't know if anyone successfully used card_eventmgr in daemon mode before, I would say that, that was not possible, but maybe Im wrong here ?

Any comments ?

/Patrik Martinsson,
Sweden.

--- a/pam_pkcs11-0.6.4/src/tools/card_eventmgr.c        2010-06-13 
02:26:31.000000000 +0200
+++ b/pam_pkcs11-0.6.4/src/tools/card_eventmgr.c        2010-08-24 
18:04:54.000000000 +0200
@@ -341,13 +341,6 @@
        return 0;
     }
 
-    rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
-    if (rv != SCARD_S_SUCCESS) {
-        DBG1("SCardEstablishContext: Cannot Connect to Resource Manager %lX", 
rv);
-       if (ctx) scconf_free(ctx);
-        return 1;
-    }
-
     /* put my self into background if flag is set */
     if (daemonize) {
        DBG("Going to be daemon...");
@@ -356,6 +349,20 @@
                goto end;
        }
     }
+    
+    /* establish pc/sc handle _after_ possible fork */ 
+    rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
+    if (rv != SCARD_S_SUCCESS) {
+        DBG1("SCardEstablishContext: Cannot Connect to Resource Manager %lX", 
rv);
+       if (ctx) scconf_free(ctx);
+        return 1;
+    }
+    
+   if (rv != SCARD_S_SUCCESS) {
+        DBG1("SCardEstablishContext: Cannot Connect to Resource Manager %lX", 
rv);
+       if (ctx) scconf_free(ctx);
+        return 1;
+    }
 
     signal(SIGINT, signal_trap);
     signal(SIGQUIT, signal_trap);
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to