2 m4/gpg-error.m4 | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++
4 src/signer/dialog.c | 35 +++++++++++++++++-----------
5 3 files changed, 88 insertions(+), 14 deletions(-)
7 Index: opensc-0.11.13/m4/libassuan.m4
8 ===================================================================
9 --- opensc-0.11.13.orig/m4/libassuan.m4 2009-12-13 10:14:26.000000000 +0100
10 +++ opensc-0.11.13/m4/libassuan.m4 2010-04-13 12:26:56.000000000 +0200
11 @@ -26,7 +26,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
13 AC_PATH_PROG(LIBASSUAN_CONFIG, libassuan-config, no)
15 - tmp=ifelse([$1], ,1:0.9.2,$1)
16 + tmp=ifelse([$1], ,2:2.0.0,$1)
17 if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
18 req_libassuan_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
19 min_libassuan_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
20 Index: opensc-0.11.13/src/signer/dialog.c
21 ===================================================================
22 --- opensc-0.11.13.orig/src/signer/dialog.c 2010-02-16 10:03:25.000000000 +0100
23 +++ opensc-0.11.13/src/signer/dialog.c 2010-04-13 16:03:10.000000000 +0200
24 @@ -15,31 +15,31 @@ struct entry_parm_s {
30 getpin_cb (void *opaque, const void *buffer, size_t length)
32 struct entry_parm_s *parm = (struct entry_parm_s *) opaque;
34 /* we expect the pin to fit on one line */
35 if (parm->lines || length >= parm->size)
36 - return ASSUAN_Too_Much_Data;
37 + return gpg_error(GPG_ERR_ASS_TOO_MUCH_DATA);
39 /* fixme: we should make sure that the assuan buffer is allocated in
40 secure memory or read the response byte by byte */
41 memcpy(parm->buffer, buffer, length);
42 parm->buffer[length] = 0;
44 - return (AssuanError) 0;
45 + return gpg_error(GPG_ERR_NO_ERROR);
48 int ask_and_verify_pin_code(struct sc_pkcs15_card *p15card,
49 struct sc_pkcs15_object *pin)
55 const char *pgmname = PIN_ENTRY;
57 + assuan_context_t ctx = NULL;
60 struct entry_parm_s parm;
61 @@ -48,16 +48,26 @@ int ask_and_verify_pin_code(struct sc_pk
65 - r = assuan_pipe_connect(&ctx, pgmname, (char **) argv, NULL);
66 + assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
68 + r = assuan_new(&ctx);
70 + printf("Can't initialize assuan context: %s\n)",
75 + r = assuan_pipe_connect(ctx, pgmname, (const char **) argv, \
76 + NULL, NULL, NULL, 0);
78 printf("Can't connect to the PIN entry module: %s\n",
79 - assuan_strerror((AssuanError) r));
83 sprintf(buf, "SETDESC Enter PIN [%s] for digital signing ", pin->label);
84 r = assuan_transact(ctx, buf, NULL, NULL, NULL, NULL, NULL, NULL);
86 - printf("SETDESC: %s\n", assuan_strerror((AssuanError) r));
87 + printf("SETDESC: %s\n", gpg_strerror(r));
91 @@ -71,12 +81,12 @@ int ask_and_verify_pin_code(struct sc_pk
92 parm.size = sizeof(buf);
94 r = assuan_transact(ctx, "GETPIN", getpin_cb, &parm, NULL, NULL, NULL, NULL);
95 - if (r == ASSUAN_Canceled) {
96 - assuan_disconnect(ctx);
97 + if (gpg_err_code(r) == GPG_ERR_ASS_CANCELED) {
98 + assuan_release(ctx);
102 - printf("GETPIN: %s\n", assuan_strerror((AssuanError) r));
103 + printf("GETPIN: %s\n", gpg_strerror(r));
107 @@ -104,9 +114,9 @@ int ask_and_verify_pin_code(struct sc_pk
111 - assuan_disconnect(ctx);
112 + assuan_release(ctx);
115 - assuan_disconnect(ctx);
116 + assuan_release(ctx);