$NetBSD: patch-ac,v 1.1 2010/09/01 15:59:23 drochner Exp $ --- src/signer/dialog.c.orig 2010-02-16 09:03:25.000000000 +0000 +++ src/signer/dialog.c @@ -15,31 +15,31 @@ struct entry_parm_s { char *buffer; }; -static AssuanError +static gpg_error_t getpin_cb (void *opaque, const void *buffer, size_t length) { struct entry_parm_s *parm = (struct entry_parm_s *) opaque; /* we expect the pin to fit on one line */ if (parm->lines || length >= parm->size) - return ASSUAN_Too_Much_Data; + return gpg_error(GPG_ERR_ASS_TOO_MUCH_DATA); /* fixme: we should make sure that the assuan buffer is allocated in secure memory or read the response byte by byte */ memcpy(parm->buffer, buffer, length); parm->buffer[length] = 0; parm->lines++; - return (AssuanError) 0; + return gpg_error(GPG_ERR_NO_ERROR); } int ask_and_verify_pin_code(struct sc_pkcs15_card *p15card, struct sc_pkcs15_object *pin) { - int r; + gpg_error_t r; size_t len; const char *argv[3]; const char *pgmname = PIN_ENTRY; - ASSUAN_CONTEXT ctx; + assuan_context_t ctx = NULL; char buf[500]; char errtext[100]; struct entry_parm_s parm; @@ -48,16 +48,26 @@ int ask_and_verify_pin_code(struct sc_pk argv[0] = pgmname; argv[1] = NULL; - r = assuan_pipe_connect(&ctx, pgmname, (char **) argv, NULL); + assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); + + r = assuan_new(&ctx); + if (r) { + printf("Can't initialize assuan context: %s\n)", + gpg_strerror(r)); + goto err; + } + + r = assuan_pipe_connect(ctx, pgmname, (const char **) argv, \ + NULL, NULL, NULL, 0); if (r) { printf("Can't connect to the PIN entry module: %s\n", - assuan_strerror((AssuanError) r)); + gpg_strerror(r)); goto err; } sprintf(buf, "SETDESC Enter PIN [%s] for digital signing ", pin->label); r = assuan_transact(ctx, buf, NULL, NULL, NULL, NULL, NULL, NULL); if (r) { - printf("SETDESC: %s\n", assuan_strerror((AssuanError) r)); + printf("SETDESC: %s\n", gpg_strerror(r)); goto err; } errtext[0] = 0; @@ -71,12 +81,12 @@ int ask_and_verify_pin_code(struct sc_pk parm.size = sizeof(buf); parm.buffer = buf; r = assuan_transact(ctx, "GETPIN", getpin_cb, &parm, NULL, NULL, NULL, NULL); - if (r == ASSUAN_Canceled) { - assuan_disconnect(ctx); + if (gpg_err_code(r) == GPG_ERR_ASS_CANCELED) { + assuan_release(ctx); return -2; } if (r) { - printf("GETPIN: %s\n", assuan_strerror((AssuanError) r)); + printf("GETPIN: %s\n", gpg_strerror(r)); goto err; } len = strlen(buf); @@ -104,9 +114,9 @@ int ask_and_verify_pin_code(struct sc_pk break; } - assuan_disconnect(ctx); + assuan_release(ctx); return 0; err: - assuan_disconnect(ctx); + assuan_release(ctx); return -1; }