[Pkg-gnupg-commit] [gnupg2] 01/01: scdaemon fix for PC/SC (Closes: #852702, #854005, #854595, #854616).
NIIBE Yutaka
gniibe at moszumanska.debian.org
Mon Feb 13 03:45:36 UTC 2017
This is an automated email from the git hooks/post-receive script.
gniibe pushed a commit to branch master
in repository gnupg2.
commit cd2ad84410ba2045338a30a15c1caa145335c445
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Mon Feb 13 12:20:39 2017 +0900
scdaemon fix for PC/SC (Closes: #852702, #854005, #854595, #854616).
---
.../patches/0029-scd-Fix-use-case-of-PC-SC.patch | 93 ++++++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 94 insertions(+)
diff --git a/debian/patches/0029-scd-Fix-use-case-of-PC-SC.patch b/debian/patches/0029-scd-Fix-use-case-of-PC-SC.patch
new file mode 100644
index 0000000..b981c97
--- /dev/null
+++ b/debian/patches/0029-scd-Fix-use-case-of-PC-SC.patch
@@ -0,0 +1,93 @@
+From: NIIBE Yutaka <gniibe at fsij.org>
+Date: Mon, 13 Feb 2017 11:09:13 +0900
+Subject: [PATCH] scd: Fix use case of PC/SC.
+
+* scd/apdu.c (apdu_open_reader): Add an argument APP_EMPTY.
+When CCID driver fails to open, try PC/SC if APP is nothing.
+* scd/app.c (select_application): Supply arg if APP is nothing.
+
+--
+
+After scanning available card readers by CCID driver, scdaemon should
+try PC/SC service if no APP is registered yet. Also, when the slot
+is allocated for PC/SC (ccid.handle==NULL), it should not call
+ccid_compare_BAI, otherwise scdaemon crashes.
+
+Debian-bug-id: 852702, 854005, 854595, 854616
+
+Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
+---
+ scd/apdu.c | 14 +++++++++++---
+ scd/apdu.h | 2 +-
+ scd/app.c | 2 +-
+ 3 files changed, 13 insertions(+), 5 deletions(-)
+
+Index: gnupg-debian/scd/apdu.c
+===================================================================
+--- gnupg-debian.orig/scd/apdu.c
++++ gnupg-debian/scd/apdu.c
+@@ -3117,7 +3117,7 @@ apdu_open_one_reader (const char *portst
+ }
+
+ int
+-apdu_open_reader (struct dev_list *dl)
++apdu_open_reader (struct dev_list *dl, int app_empty)
+ {
+ int slot;
+
+@@ -3167,6 +3167,7 @@ apdu_open_reader (struct dev_list *dl)
+ /* Check identity by BAI against already opened HANDLEs. */
+ for (slot = 0; slot < MAX_READER; slot++)
+ if (reader_table[slot].used
++ && reader_table[slot].ccid.handle
+ && ccid_compare_BAI (reader_table[slot].ccid.handle, bai))
+ break;
+
+@@ -3191,12 +3192,19 @@ apdu_open_reader (struct dev_list *dl)
+ dl->idx++;
+ }
+
+- slot = -1;
++ /* Not found. Try one for PC/SC, only when it's the initial scan. */
++ if (app_empty && dl->idx == dl->idx_max)
++ {
++ dl->idx++;
++ slot = apdu_open_one_reader (dl->portstr);
++ }
++ else
++ slot = -1;
+ }
+ else
+ #endif
+ { /* PC/SC readers. */
+- if (dl->idx == 0)
++ if (app_empty && dl->idx == 0)
+ {
+ dl->idx++;
+ slot = apdu_open_one_reader (dl->portstr);
+Index: gnupg-debian/scd/apdu.h
+===================================================================
+--- gnupg-debian.orig/scd/apdu.h
++++ gnupg-debian/scd/apdu.h
+@@ -91,7 +91,7 @@ gpg_error_t apdu_dev_list_start (const c
+ void apdu_dev_list_finish (struct dev_list *l);
+
+ /* Note, that apdu_open_reader returns no status word but -1 on error. */
+-int apdu_open_reader (struct dev_list *l);
++int apdu_open_reader (struct dev_list *l, int app_empty);
+ int apdu_open_remote_reader (const char *portstr,
+ const unsigned char *cookie, size_t length,
+ int (*readfnc) (void *opaque,
+Index: gnupg-debian/scd/app.c
+===================================================================
+--- gnupg-debian.orig/scd/app.c
++++ gnupg-debian/scd/app.c
+@@ -340,7 +340,7 @@ select_application (ctrl_t ctrl, const c
+ int slot;
+ int sw;
+
+- slot = apdu_open_reader (l);
++ slot = apdu_open_reader (l, !app_top);
+ if (slot < 0)
+ break;
+
diff --git a/debian/patches/series b/debian/patches/series
index f44a60f..bd3d6f6 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -26,3 +26,4 @@ gpg-agent-idling/0004-agent-Avoid-scheduled-checks-on-socket-when-inotify-.patch
0026-gpg-More-diagnostics-for-a-launched-pinentry.patch
0027-doc-Clarify-abbreviation-of-help.patch
0028-scd-Backport-two-fixes-from-master.patch
+0029-scd-Fix-use-case-of-PC-SC.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list