diff options
| -rw-r--r-- | gpgme/ChangeLog | 7 | ||||
| -rw-r--r-- | gpgme/engine-gpgsm.c | 14 | ||||
| -rw-r--r-- | gpgme/keylist.c | 18 | 
3 files changed, 34 insertions, 5 deletions
| diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 1dc060cb..7f485c05 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,10 @@ +2002-01-29  Werner Koch  <[email protected]> + +	* engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode. + +	* keylist.c (keylist_colon_handler): Add support for the new "crs" +	record type. +  2002-01-22  Marcus Brinkmann  <[email protected]>  	* engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect, diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c index b66ceaa6..51e62fd9 100644 --- a/gpgme/engine-gpgsm.c +++ b/gpgme/engine-gpgsm.c @@ -433,11 +433,19 @@ _gpgme_gpgsm_op_keylist (GpgsmObject gpgsm, const char *pattern,    if (!pattern)      pattern = ""; -  line = xtrymalloc (9 + strlen (pattern) + 1);	/* "LISTKEYS " + p + '\0'.  */ +  line = xtrymalloc (15 + strlen (pattern) + 1); /* "LISTSECRETKEYS "+p+'\0'.*/    if (!line)      return mk_error (Out_Of_Core); -  strcpy (line, "LISTKEYS "); -  strcpy (&line[9], pattern); +  if (secret_only) +    { +      strcpy (line, "LISTSECRETKEYS "); +      strcpy (&line[15], pattern); +    } +  else +    { +      strcpy (line, "LISTKEYS "); +      strcpy (&line[9], pattern); +    }    _gpgme_io_close (gpgsm->input_fd);    _gpgme_io_close (gpgsm->output_fd); diff --git a/gpgme/keylist.c b/gpgme/keylist.c index b9907a47..133da5dd 100644 --- a/gpgme/keylist.c +++ b/gpgme/keylist.c @@ -146,7 +146,8 @@ keylist_colon_handler ( GpgmeCtx ctx, char *line )      char *p, *pend;      int field = 0;      enum { -      RT_NONE, RT_SIG, RT_UID, RT_SUB, RT_PUB, RT_FPR, RT_SSB, RT_SEC, RT_CRT +      RT_NONE, RT_SIG, RT_UID, RT_SUB, RT_PUB, RT_FPR, RT_SSB, RT_SEC, +      RT_CRT, RT_CRS      } rectype = RT_NONE;      GpgmeKey key = ctx->tmp_key;      int i; @@ -223,13 +224,26 @@ keylist_colon_handler ( GpgmeCtx ctx, char *line )                  assert ( !ctx->tmp_key );                  ctx->tmp_key = key;              } +            else if ( !strcmp (p, "crs") ) { +                /* start a new certificate */ +                if ( _gpgme_key_new_secret ( &key ) ) { +                    ctx->out_of_core=1; /* the only kind of error we can get*/ +                    return; +                } +                key->x509 = 1; +                rectype = RT_CRS; +                finish_key ( ctx ); +                assert ( !ctx->tmp_key ); +                ctx->tmp_key = key; +            }              else if ( !strcmp ( p, "fpr" ) && key )                   rectype = RT_FPR;              else                   rectype = RT_NONE;          } -        else if ( rectype == RT_PUB || rectype == RT_SEC || rectype == RT_CRT) +        else if ( rectype == RT_PUB || rectype == RT_SEC +                  || rectype == RT_CRT || rectype == RT_CRS)            {              switch (field) {                case 2: /* trust info */ | 
