2003-07-31  Marcus Brinkmann  <marcus@g10code.de>

	* gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
	gpgme_get_key.

gpgme/
2003-07-31  Marcus Brinkmann  <marcus@g10code.de>

	* keylist.c (gpgme_get_key): Check if there is more than one key
	listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
This commit is contained in:
Marcus Brinkmann 2003-07-31 16:01:13 +00:00
parent 6bb0790d97
commit 82f7a68aa2
5 changed files with 41 additions and 3 deletions

12
NEWS
View File

@ -1,3 +1,15 @@
Noteworthy changes in version 0.4.3 (unreleased)
------------------------------------------------
* gpgme_get_key fails with GPG_ERR_AMBIGUOUS_NAME if the key ID
provided was not unique, instead returning the first matching key.
* Interface changes relative to the 0.4.3 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gpgme_get_key CHANGED: Fails correctly if key ID not unique.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Noteworthy changes in version 0.4.2 (2003-07-30)
------------------------------------------------

View File

@ -1,3 +1,8 @@
2003-07-31 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
gpgme_get_key.
2003-07-29 Marcus Brinkmann <marcus@g10code.de>
* Makefile.am (EXTRA_DIST): Remove variable.

View File

@ -1144,7 +1144,8 @@ were configured to exclude support for this engine, or because the
engine is not installed properly.
@item GPG_ERR_AMBIGUOUS_NAME
This value indicates that a user ID did not specify a unique key.
This value indicates that a user ID or other specifier did not specify
a unique key.
@item GPG_ERR_WRONG_KEY_USAGE
This value indicates that a key is not used appropriately.
@ -2377,8 +2378,9 @@ the error code @code{GPG_ERR_NO_ERROR} and *@var{r_key} will be set to
The function returns the error code @code{GPG_ERR_INV_VALUE} if
@var{ctx} or @var{r_key} is not a valid pointer or @var{fpr} is not a
fingerprint or key ID, and @code{GPG_ERR_ENOMEM} if at some time
during the operation there was not enough memory available.
fingerprint or key ID, @code{GPG_ERR_AMBIGUOUS_NAME} if the key ID was
not a unique specifier for a key, and @code{GPG_ERR_ENOMEM} if at some
time during the operation there was not enough memory available.
@end deftypefun

View File

@ -1,5 +1,8 @@
2003-07-31 Marcus Brinkmann <marcus@g10code.de>
* keylist.c (gpgme_get_key): Check if there is more than one key
listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
* util.h (_gpgme_decode_c_string): Change type of LEN argument to
size_t.
(_gpgme_decode_percent_string): Likewise.

View File

@ -832,6 +832,7 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
{
gpgme_ctx_t listctx;
gpgme_error_t err;
gpgme_key_t key;
if (!ctx || !r_key)
return gpg_error (GPG_ERR_INV_VALUE);
@ -849,6 +850,21 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
err = gpgme_op_keylist_start (listctx, fpr, secret);
if (!err)
err = gpgme_op_keylist_next (listctx, r_key);
if (!err)
{
err = gpgme_op_keylist_next (listctx, &key);
if (gpgme_err_code (err) == GPG_ERR_EOF)
err = gpg_error (GPG_ERR_NO_ERROR);
else
{
if (!err)
{
gpgme_key_unref (key);
err = gpg_error (GPG_ERR_AMBIGUOUS_NAME);
}
gpgme_key_unref (*r_key);
}
}
gpgme_release (listctx);
return err;
}