aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gpgme/ChangeLog7
-rw-r--r--gpgme/engine-gpgsm.c14
-rw-r--r--gpgme/keylist.c18
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 */