* engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.

* keylist.c (keylist_colon_handler): Add support for the new "crs"
record type.
This commit is contained in:
Werner Koch 2002-01-29 10:04:41 +00:00
parent a5329adab7
commit 1c0317ca79
3 changed files with 34 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2002-01-29 Werner Koch <wk@gnupg.org>
* 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 <marcus@g10code.de> 2002-01-22 Marcus Brinkmann <marcus@g10code.de>
* engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect, * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,

View File

@ -433,11 +433,19 @@ _gpgme_gpgsm_op_keylist (GpgsmObject gpgsm, const char *pattern,
if (!pattern) if (!pattern)
pattern = ""; pattern = "";
line = xtrymalloc (9 + strlen (pattern) + 1); /* "LISTKEYS " + p + '\0'. */ line = xtrymalloc (15 + strlen (pattern) + 1); /* "LISTSECRETKEYS "+p+'\0'.*/
if (!line) if (!line)
return mk_error (Out_Of_Core); return mk_error (Out_Of_Core);
if (secret_only)
{
strcpy (line, "LISTSECRETKEYS ");
strcpy (&line[15], pattern);
}
else
{
strcpy (line, "LISTKEYS "); strcpy (line, "LISTKEYS ");
strcpy (&line[9], pattern); strcpy (&line[9], pattern);
}
_gpgme_io_close (gpgsm->input_fd); _gpgme_io_close (gpgsm->input_fd);
_gpgme_io_close (gpgsm->output_fd); _gpgme_io_close (gpgsm->output_fd);

View File

@ -146,7 +146,8 @@ keylist_colon_handler ( GpgmeCtx ctx, char *line )
char *p, *pend; char *p, *pend;
int field = 0; int field = 0;
enum { 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; } rectype = RT_NONE;
GpgmeKey key = ctx->tmp_key; GpgmeKey key = ctx->tmp_key;
int i; int i;
@ -223,13 +224,26 @@ keylist_colon_handler ( GpgmeCtx ctx, char *line )
assert ( !ctx->tmp_key ); assert ( !ctx->tmp_key );
ctx->tmp_key = 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 ) else if ( !strcmp ( p, "fpr" ) && key )
rectype = RT_FPR; rectype = RT_FPR;
else else
rectype = RT_NONE; 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) { switch (field) {
case 2: /* trust info */ case 2: /* trust info */