diff options
Diffstat (limited to '')
| -rw-r--r-- | gpgme/ChangeLog | 4 | ||||
| -rw-r--r-- | gpgme/gpgme.h | 2 | ||||
| -rw-r--r-- | gpgme/keylist.c | 25 | 
3 files changed, 25 insertions, 6 deletions
| diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 6287bf66..776c8582 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,7 @@ +2008-01-28  Werner Koch  <[email protected]> + +	* keylist.c (gpgme_get_key): Skip duplicated keys.  Fixes bug 876. +  2008-01-14  Marcus Brinkmann  <[email protected]>  	* engine-gpgconf.c (gpgconf_config_load_cb): Fix program_name diff --git a/gpgme/gpgme.h b/gpgme/gpgme.h index bf42035e..1133e0d3 100644 --- a/gpgme/gpgme.h +++ b/gpgme/gpgme.h @@ -72,7 +72,7 @@ extern "C" {     AM_PATH_GPGME macro) check that this header matches the installed     library.  Warning: Do not edit the next line.  configure will do     that for you!  */ -#define GPGME_VERSION "1.1.6-svn1282" +#define GPGME_VERSION "1.1.7-svn1295" diff --git a/gpgme/keylist.c b/gpgme/keylist.c index 0f88cf74..69b0dc9e 100644 --- a/gpgme/keylist.c +++ b/gpgme/keylist.c @@ -1,6 +1,7 @@  /* keylist.c - Listing keys.     Copyright (C) 2000 Werner Koch (dd9jn) -   Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 g10 Code GmbH +   Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, +                 2008  g10 Code GmbH     This file is part of GPGME. @@ -15,9 +16,8 @@     Lesser General Public License for more details.     You should have received a copy of the GNU Lesser General Public -   License along with this program; if not, write to the Free Software -   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -   02111-1307, USA.  */ +   License along with this program; if not, see <http://www.gnu.org/licenses/>. + */  #if HAVE_CONFIG_H  #include <config.h> @@ -964,11 +964,26 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,      err = gpgme_op_keylist_next (listctx, r_key);    if (!err)      { +    try_next_key:        err = gpgme_op_keylist_next (listctx, &key);        if (gpgme_err_code (err) == GPG_ERR_EOF) -	err = gpg_error (GPG_ERR_NO_ERROR); +	err = 0;        else  	{ +          if (!err +              && *r_key && (*r_key)->subkeys && (*r_key)->subkeys->fpr +              && key && key->subkeys && key->subkeys->fpr +              && !strcmp ((*r_key)->subkeys->fpr, key->subkeys->fpr)) +            { +              /* The fingerprint is identical.  We assume that this is +                 the same key and don't mark it as an ambiguous.  This +                 problem may occur with corrupted keyrings and has +                 been noticed often with gpgsm.  In fact gpgsm uses a +                 similar hack to sort out such duplicates but it can't +                 do that while listing keys.  */ +              gpgme_key_unref (key); +              goto try_next_key; +            }  	  if (!err)  	    {  	      gpgme_key_unref (key); | 
