2008-01-29 Marcus Brinkmann <marcus@g10code.de>

* keylist.c (list_internal_keys): New variable lastcert.  Use it
	to suppress duplicates which immediately follow each other.
This commit is contained in:
Marcus Brinkmann 2008-01-30 17:21:28 +00:00
parent 3d654dfb29
commit 8ac61bc708
2 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2008-01-29 Marcus Brinkmann <marcus@g10code.de>
* keylist.c (list_internal_keys): New variable lastcert. Use it
to suppress duplicates which immediately follow each other.
2008-01-27 Werner Koch <wk@g10code.com> 2008-01-27 Werner Koch <wk@g10code.com>
* import.c (popen_protect_tool): Set bit 7 in the flags for * import.c (popen_protect_tool): Set bit 7 in the flags for

View File

@ -1171,6 +1171,7 @@ list_internal_keys (ctrl_t ctrl, strlist_t names, estream_t fp,
strlist_t sl; strlist_t sl;
int ndesc; int ndesc;
ksba_cert_t cert = NULL; ksba_cert_t cert = NULL;
ksba_cert_t lastcert = NULL;
gpg_error_t rc = 0; gpg_error_t rc = 0;
const char *lastresname, *resname; const char *lastresname, *resname;
int have_secret; int have_secret;
@ -1228,6 +1229,7 @@ list_internal_keys (ctrl_t ctrl, strlist_t names, estream_t fp,
currently we stop at the first match. To do this we need an currently we stop at the first match. To do this we need an
extra flag to enable this feature so */ extra flag to enable this feature so */
/* Suppress duplicates at least when they follow each other. */
lastresname = NULL; lastresname = NULL;
while (!(rc = keydb_search (hd, desc, ndesc))) while (!(rc = keydb_search (hd, desc, ndesc)))
{ {
@ -1248,7 +1250,15 @@ list_internal_keys (ctrl_t ctrl, strlist_t names, estream_t fp,
log_error ("keydb_get_cert failed: %s\n", gpg_strerror (rc)); log_error ("keydb_get_cert failed: %s\n", gpg_strerror (rc));
goto leave; goto leave;
} }
/* Skip duplicated certificates, at least if they follow each
others. This works best if a single key is searched for and
expected. FIXME: Non-sequential duplicates remain. */
if (gpgsm_certs_identical_p (cert, lastcert))
{
ksba_cert_release (cert);
continue;
}
resname = keydb_get_resource_name (hd); resname = keydb_get_resource_name (hd);
if (lastresname != resname ) if (lastresname != resname )
@ -1301,7 +1311,9 @@ list_internal_keys (ctrl_t ctrl, strlist_t names, estream_t fp,
es_putc ('\n', fp); es_putc ('\n', fp);
} }
} }
ksba_cert_release (cert);
ksba_cert_release (lastcert);
lastcert = cert;
cert = NULL; cert = NULL;
} }
if (gpg_err_code (rc) == GPG_ERR_EOF || rc == -1 ) if (gpg_err_code (rc) == GPG_ERR_EOF || rc == -1 )
@ -1311,6 +1323,7 @@ list_internal_keys (ctrl_t ctrl, strlist_t names, estream_t fp,
leave: leave:
ksba_cert_release (cert); ksba_cert_release (cert);
ksba_cert_release (lastcert);
xfree (desc); xfree (desc);
keydb_release (hd); keydb_release (hd);
return rc; return rc;