Ticket #217: opensc-libassuan-2.patch

File opensc-libassuan-2.patch, 3.7 KB (added by puzel, 2 years ago)
  • m4/libassuan.m4

    ---
     m4/gpg-error.m4     |   65 ++++++++++++++++++++++++++++++++++++++++++++++++++++
     m4/libassuan.m4     |    2 -
     src/signer/dialog.c |   35 +++++++++++++++++-----------
     3 files changed, 88 insertions(+), 14 deletions(-)
    
    old new AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON], 
    2626  fi 
    2727  AC_PATH_PROG(LIBASSUAN_CONFIG, libassuan-config, no) 
    2828 
    29   tmp=ifelse([$1], ,1:0.9.2,$1) 
     29  tmp=ifelse([$1], ,2:2.0.0,$1) 
    3030  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then 
    3131    req_libassuan_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'` 
    3232    min_libassuan_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` 
  • src/signer/dialog.c

    old new struct entry_parm_s { 
    1515  char *buffer; 
    1616}; 
    1717 
    18 static AssuanError 
     18static gpg_error_t 
    1919getpin_cb (void *opaque, const void *buffer, size_t length) 
    2020{ 
    2121  struct entry_parm_s *parm = (struct entry_parm_s *) opaque; 
    2222 
    2323  /* we expect the pin to fit on one line */ 
    2424  if (parm->lines || length >= parm->size) 
    25     return ASSUAN_Too_Much_Data; 
     25    return gpg_error(GPG_ERR_ASS_TOO_MUCH_DATA); 
    2626 
    2727  /* fixme: we should make sure that the assuan buffer is allocated in 
    2828     secure memory or read the response byte by byte */ 
    2929  memcpy(parm->buffer, buffer, length); 
    3030  parm->buffer[length] = 0; 
    3131  parm->lines++; 
    32   return (AssuanError) 0; 
     32  return gpg_error(GPG_ERR_NO_ERROR); 
    3333} 
    3434 
    3535int ask_and_verify_pin_code(struct sc_pkcs15_card *p15card, 
    3636                            struct sc_pkcs15_object *pin) 
    3737{ 
    38         int r; 
     38        gpg_error_t r; 
    3939        size_t len; 
    4040        const char *argv[3]; 
    4141        const char *pgmname = PIN_ENTRY; 
    42         ASSUAN_CONTEXT ctx; 
     42        assuan_context_t ctx = NULL; 
    4343        char buf[500]; 
    4444        char errtext[100]; 
    4545        struct entry_parm_s parm; 
    int ask_and_verify_pin_code(struct sc_pk 
    4848        argv[0] = pgmname; 
    4949        argv[1] = NULL; 
    5050         
    51         r = assuan_pipe_connect(&ctx, pgmname, (char **) argv, NULL); 
     51        assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); 
     52 
     53        r = assuan_new(&ctx); 
     54        if (r) { 
     55                printf("Can't initialize assuan context: %s\n)", 
     56                        gpg_strerror(r)); 
     57                goto err; 
     58        } 
     59         
     60        r = assuan_pipe_connect(ctx, pgmname, (const char **) argv, \ 
     61                                NULL, NULL, NULL, 0); 
    5262        if (r) { 
    5363                printf("Can't connect to the PIN entry module: %s\n", 
    54                        assuan_strerror((AssuanError) r)); 
     64                       gpg_strerror(r)); 
    5565                goto err; 
    5666        } 
    5767        sprintf(buf, "SETDESC Enter PIN [%s] for digital signing  ", pin->label); 
    5868        r = assuan_transact(ctx, buf, NULL, NULL, NULL, NULL, NULL, NULL); 
    5969        if (r) { 
    60                 printf("SETDESC: %s\n", assuan_strerror((AssuanError) r)); 
     70                printf("SETDESC: %s\n", gpg_strerror(r)); 
    6171                goto err; 
    6272        } 
    6373        errtext[0] = 0; 
    int ask_and_verify_pin_code(struct sc_pk 
    7181                parm.size = sizeof(buf); 
    7282                parm.buffer = buf; 
    7383                r = assuan_transact(ctx, "GETPIN", getpin_cb, &parm, NULL, NULL, NULL, NULL); 
    74                 if (r == ASSUAN_Canceled) { 
    75                         assuan_disconnect(ctx); 
     84                if (gpg_err_code(r) == GPG_ERR_ASS_CANCELED) { 
     85                        assuan_release(ctx); 
    7686                        return -2; 
    7787                } 
    7888                if (r) { 
    79                         printf("GETPIN: %s\n", assuan_strerror((AssuanError) r)); 
     89                        printf("GETPIN: %s\n", gpg_strerror(r)); 
    8090                        goto err; 
    8191                } 
    8292                len = strlen(buf); 
    int ask_and_verify_pin_code(struct sc_pk 
    104114                        break; 
    105115        } 
    106116 
    107         assuan_disconnect(ctx);  
     117        assuan_release(ctx); 
    108118        return 0; 
    109119err:     
    110         assuan_disconnect(ctx); 
     120        assuan_release(ctx); 
    111121        return -1; 
    112122}