+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)
------------------------------------------------
+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.
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.
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
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.
{
gpgme_ctx_t listctx;
gpgme_error_t err;
+ gpgme_key_t key;
if (!ctx || !r_key)
return gpg_error (GPG_ERR_INV_VALUE);
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;
}