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