From 1c0317ca79087255414330537e4b1a749ee1286b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 29 Jan 2002 10:04:41 +0000 Subject: [PATCH] * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode. * keylist.c (keylist_colon_handler): Add support for the new "crs" record type. --- gpgme/ChangeLog | 7 +++++++ gpgme/engine-gpgsm.c | 14 +++++++++++--- gpgme/keylist.c | 18 ++++++++++++++++-- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 1dc060c..7f485c0 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,10 @@ +2002-01-29 Werner Koch + + * 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 * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect, diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c index b66ceaa..51e62fd 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 b9907a4..133da5d 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 */ -- 2.26.2