]>
Commit | Line | Data |
---|---|---|
c9f4880d JB |
1 | --- |
2 | m4/gpg-error.m4 | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
3 | m4/libassuan.m4 | 2 - | |
4 | src/signer/dialog.c | 35 +++++++++++++++++----------- | |
5 | 3 files changed, 88 insertions(+), 14 deletions(-) | |
6 | ||
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], | |
12 | fi | |
13 | AC_PATH_PROG(LIBASSUAN_CONFIG, libassuan-config, no) | |
14 | ||
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 { | |
25 | char *buffer; | |
26 | }; | |
27 | ||
28 | -static AssuanError | |
29 | +static gpg_error_t | |
30 | getpin_cb (void *opaque, const void *buffer, size_t length) | |
31 | { | |
32 | struct entry_parm_s *parm = (struct entry_parm_s *) opaque; | |
33 | ||
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); | |
38 | ||
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; | |
43 | parm->lines++; | |
44 | - return (AssuanError) 0; | |
45 | + return gpg_error(GPG_ERR_NO_ERROR); | |
46 | } | |
47 | ||
48 | int ask_and_verify_pin_code(struct sc_pkcs15_card *p15card, | |
49 | struct sc_pkcs15_object *pin) | |
50 | { | |
51 | - int r; | |
52 | + gpg_error_t r; | |
53 | size_t len; | |
54 | const char *argv[3]; | |
55 | const char *pgmname = PIN_ENTRY; | |
56 | - ASSUAN_CONTEXT ctx; | |
57 | + assuan_context_t ctx = NULL; | |
58 | char buf[500]; | |
59 | char errtext[100]; | |
60 | struct entry_parm_s parm; | |
61 | @@ -48,16 +48,26 @@ int ask_and_verify_pin_code(struct sc_pk | |
62 | argv[0] = pgmname; | |
63 | argv[1] = NULL; | |
64 | ||
65 | - r = assuan_pipe_connect(&ctx, pgmname, (char **) argv, NULL); | |
66 | + assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); | |
67 | + | |
68 | + r = assuan_new(&ctx); | |
69 | + if (r) { | |
70 | + printf("Can't initialize assuan context: %s\n)", | |
71 | + gpg_strerror(r)); | |
72 | + goto err; | |
73 | + } | |
74 | + | |
75 | + r = assuan_pipe_connect(ctx, pgmname, (const char **) argv, \ | |
76 | + NULL, NULL, NULL, 0); | |
77 | if (r) { | |
78 | printf("Can't connect to the PIN entry module: %s\n", | |
79 | - assuan_strerror((AssuanError) r)); | |
80 | + gpg_strerror(r)); | |
81 | goto err; | |
82 | } | |
83 | sprintf(buf, "SETDESC Enter PIN [%s] for digital signing ", pin->label); | |
84 | r = assuan_transact(ctx, buf, NULL, NULL, NULL, NULL, NULL, NULL); | |
85 | if (r) { | |
86 | - printf("SETDESC: %s\n", assuan_strerror((AssuanError) r)); | |
87 | + printf("SETDESC: %s\n", gpg_strerror(r)); | |
88 | goto err; | |
89 | } | |
90 | errtext[0] = 0; | |
91 | @@ -71,12 +81,12 @@ int ask_and_verify_pin_code(struct sc_pk | |
92 | parm.size = sizeof(buf); | |
93 | parm.buffer = 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); | |
99 | return -2; | |
100 | } | |
101 | if (r) { | |
102 | - printf("GETPIN: %s\n", assuan_strerror((AssuanError) r)); | |
103 | + printf("GETPIN: %s\n", gpg_strerror(r)); | |
104 | goto err; | |
105 | } | |
106 | len = strlen(buf); | |
107 | @@ -104,9 +114,9 @@ int ask_and_verify_pin_code(struct sc_pk | |
108 | break; | |
109 | } | |
110 | ||
111 | - assuan_disconnect(ctx); | |
112 | + assuan_release(ctx); | |
113 | return 0; | |
114 | err: | |
115 | - assuan_disconnect(ctx); | |
116 | + assuan_release(ctx); | |
117 | return -1; | |
118 | } |