39 |
if (!ctx || ctx->out_of_core) |
if (!ctx || ctx->out_of_core) |
40 |
return; |
return; |
41 |
|
|
42 |
switch( code ) { |
switch (code) { |
43 |
|
|
44 |
|
case STATUS_SC_OP_SUCCESS: |
45 |
|
ctx->problem = 0; |
46 |
|
break; |
47 |
|
|
48 |
|
case STATUS_SC_OP_FAILURE: |
49 |
|
ctx->problem = -1; |
50 |
|
break; |
51 |
|
|
52 |
case STATUS_CARDCTRL: |
case STATUS_CARDCTRL: |
53 |
break; |
break; |
54 |
|
|
93 |
if( !c || ctx->out_of_core ) |
if( !c || ctx->out_of_core ) |
94 |
return NULL; |
return NULL; |
95 |
|
|
96 |
|
DEBUG3 ("type=%d code=%d key=%s\n", c->type, code, key); |
97 |
|
|
98 |
if (ON_EVENT (STATUS_GET_LINE, "cardctrl.insert_card_okay")) |
if (ON_EVENT (STATUS_GET_LINE, "cardctrl.insert_card_okay")) |
99 |
{ |
{ |
100 |
if (c->card_cb) |
if (c->card_cb) |
101 |
return c->card_cb (1, c->cb_value); |
return c->card_cb (1, c->cb_value); |
102 |
} |
} |
103 |
|
if (ON_EVENT (STATUS_GET_LINE, "cardedit.prompt")) { |
104 |
|
|
105 |
|
} |
106 |
if (ON_EVENT (STATUS_GET_LINE, "cardutil.change_pin.menu")) |
if (ON_EVENT (STATUS_GET_LINE, "cardutil.change_pin.menu")) |
107 |
{ |
{ |
108 |
if (c->cnt == 0) { |
if (c->cnt == 0) { |
280 |
|
|
281 |
|
|
282 |
static gpgme_error_t |
static gpgme_error_t |
283 |
changepin_start( gpgme_ctx_t ctx ) |
changepin_start (gpgme_ctx_t ctx) |
284 |
{ |
{ |
285 |
gpgme_error_t rc; |
gpgme_error_t rc; |
286 |
|
|
287 |
ctx->pending=1; |
ctx->pending = 1; |
288 |
|
|
289 |
_gpgme_gpg_release( &ctx->gpg ); |
_gpgme_gpg_release (&ctx->gpg); |
290 |
rc = _gpgme_gpg_new( &ctx->gpg ); |
rc = _gpgme_gpg_new (&ctx->gpg); |
291 |
if( rc ) |
if (rc) |
292 |
return rc; |
return rc; |
293 |
|
|
294 |
_gpgme_gpg_set_status_handler( ctx->gpg, card_status_handler, ctx ); |
_gpgme_gpg_set_status_handler (ctx->gpg, card_status_handler, ctx); |
295 |
_gpgme_gpg_set_command_handler( ctx->gpg, changepin_command_handler, ctx ); |
_gpgme_gpg_set_command_handler (ctx->gpg, changepin_command_handler, ctx); |
296 |
|
|
297 |
_gpgme_gpg_add_arg( ctx->gpg, "--change-pin" ); |
_gpgme_gpg_add_arg (ctx->gpg, "--change-pin"); |
298 |
|
|
299 |
rc = _gpgme_gpg_spawn( ctx->gpg, ctx ); |
rc = _gpgme_gpg_spawn (ctx->gpg, ctx); |
300 |
if( rc ) { |
if (rc) { |
301 |
ctx->pending =0; |
ctx->pending = 0; |
302 |
_gpgme_gpg_release( &ctx->gpg ); |
_gpgme_gpg_release (&ctx->gpg); |
303 |
} |
} |
304 |
|
|
305 |
return rc; |
return rc; |
311 |
{ |
{ |
312 |
gpgme_error_t rc; |
gpgme_error_t rc; |
313 |
|
|
314 |
rc = changepin_start( ctx ); |
rc = changepin_start (ctx); |
315 |
if( !rc ) { |
if (!rc) { |
316 |
gpgme_wait( ctx, 1 ); |
gpgme_wait (ctx, 1); |
317 |
ctx->pending = 0; |
ctx->pending = 0; |
318 |
if( gpgme_get_process_rc( ctx ) ) |
if (gpgme_get_process_rc (ctx)) |
319 |
rc = mk_error( Interal_GPG_Problem ); |
rc = mk_error (Internal_GPG_Problem); |
320 |
|
else if (ctx->problem) |
321 |
|
rc = mk_error (SC_Failure); |
322 |
} |
} |
323 |
return rc; |
return rc; |
324 |
} /* gpgme_op_changepin */ |
} /* gpgme_op_changepin */ |
379 |
else if (ctx->keygen_fpr) |
else if (ctx->keygen_fpr) |
380 |
rc = mk_error (No_Error); |
rc = mk_error (No_Error); |
381 |
else if (gpgme_get_process_rc (ctx)) |
else if (gpgme_get_process_rc (ctx)) |
382 |
rc = mk_error (Interal_GPG_Problem); |
rc = mk_error (Internal_GPG_Problem); |
383 |
|
else if (ctx->problem) |
384 |
|
rc = mk_error (SC_Failure); |
385 |
} |
} |
386 |
return rc; |
return rc; |
387 |
} /* gpgme_op_editcard */ |
} /* gpgme_op_editcard */ |
736 |
gpgme_wait( ctx, 1 ); |
gpgme_wait( ctx, 1 ); |
737 |
ctx->pending = 0; |
ctx->pending = 0; |
738 |
if( gpgme_get_process_rc( ctx ) ) |
if( gpgme_get_process_rc( ctx ) ) |
739 |
rc = mk_error( Interal_GPG_Problem ); |
rc = mk_error( Internal_GPG_Problem ); |
740 |
} |
} |
741 |
|
|
742 |
gpgme_data_rewind( tmp ); |
gpgme_data_rewind( tmp ); |
793 |
{ |
{ |
794 |
const char * s; |
const char * s; |
795 |
|
|
796 |
if( !card ) |
if (!card) |
797 |
return NULL; |
return NULL; |
798 |
|
|
799 |
switch( what ) { |
switch( what ) { |
801 |
s=card->aid; |
s=card->aid; |
802 |
break; |
break; |
803 |
|
|
804 |
case GPGME_ATTR_CARD_VER: |
case GPGME_ATTR_CARD_VER: |
805 |
s=card->version; |
if (idx == 0) |
806 |
|
s=card->version; |
807 |
|
else { |
808 |
|
if (card->ver[0] == 0) { |
809 |
|
int pos = card->version[0] == '0' ? 1 : 0; |
810 |
|
int n = 0; |
811 |
|
memcpy (card->ver, card->version+pos, 2-pos); |
812 |
|
card->ver[2-pos] = '.'; |
813 |
|
if (card->version[2] == '0') |
814 |
|
n = 1; |
815 |
|
memcpy (card->ver+(2-pos+1), card->version+2+n, 2-n); |
816 |
|
} |
817 |
|
s = card->ver; |
818 |
|
} |
819 |
break; |
break; |
820 |
|
|
821 |
case GPGME_ATTR_CARD_VENDOR: |
case GPGME_ATTR_CARD_VENDOR: |
843 |
break; |
break; |
844 |
|
|
845 |
case GPGME_ATTR_CARD_FPR: |
case GPGME_ATTR_CARD_FPR: |
846 |
if( idx >= 0 && idx <= 3 ) |
if (idx >= 0 && idx <= 3) |
847 |
s=card->fpr[idx]; |
s=card->fpr[idx]; |
848 |
else |
else |
849 |
s=NULL; |
s=NULL; |
850 |
break; |
break; |
851 |
|
|
852 |
case GPGME_ATTR_CARD_SERIAL: |
case GPGME_ATTR_CARD_SERIAL: |
853 |
s=card->serial; |
s=card->serial; |
854 |
|
if (idx == 1) { |
855 |
|
while (s && *s && *s == '0') |
856 |
|
s++; |
857 |
|
} |
858 |
break; |
break; |
859 |
|
|
860 |
default: |
default: |
870 |
void ** reserved, int idx ) |
void ** reserved, int idx ) |
871 |
{ |
{ |
872 |
unsigned long t; |
unsigned long t; |
873 |
|
const char *s; |
874 |
|
|
875 |
if( !card ) |
if( !card ) |
876 |
return 0; |
return 0; |
877 |
|
|
878 |
switch( what ) { |
switch (what) { |
879 |
case GPGME_ATTR_CARD_SIGCOUNT: |
case GPGME_ATTR_CARD_SIGCOUNT: |
880 |
t = card->sig_count; |
t = card->sig_count; |
881 |
break; |
break; |
884 |
t = card->sex; |
t = card->sex; |
885 |
break; |
break; |
886 |
|
|
887 |
default: |
case GPGME_ATTR_CARD_SERIAL: |
888 |
|
s = card->serial; |
889 |
|
while (s && *s && *s == '0') |
890 |
|
s++; |
891 |
|
t = atol (s); |
892 |
|
break; |
893 |
|
|
894 |
|
default: |
895 |
t = 0; |
t = 0; |
896 |
break; |
break; |
897 |
} |
} |