diff --git a/g10/ChangeLog b/g10/ChangeLog index 1a43fd692..8e17c4e31 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,12 @@ +2007-03-08 David Shaw (wk) + + * keyedit.c (keyedit_menu): If we modify the keyblock (via + fix_keyblock() or collapse_uids()) make sure we reprocess the + keyblock so the flags are correct. Noted by Robin H. Johnson. + + * getkey.c (fixup_uidnode): Properly clear flags that don't apply + to us (revoked, expired) so that we can reprocess a uid. + 2007-03-05 Werner Koch Converted this file to UTF-8. diff --git a/g10/getkey.c b/g10/getkey.c index d526398c6..042046de1 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1,6 +1,6 @@ /* getkey.c - Get a key from the database * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - * 2006 Free Software Foundation, Inc. + * 2006, 2007 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -1490,18 +1490,23 @@ fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated ) sig->flags.chosen_selfsig = 1; /* we chose this one */ uid->created = 0; /* not created == invalid */ - if ( IS_UID_REV ( sig ) ) { + if ( IS_UID_REV ( sig ) ) + { uid->is_revoked = 1; return; /* has been revoked */ - } + } + else + uid->is_revoked = 0; uid->expiredate = sig->expiredate; - if(sig->flags.expired) + if (sig->flags.expired) { uid->is_expired = 1; return; /* has expired */ } + else + uid->is_expired = 0; uid->created = sig->timestamp; /* this one is okay */ uid->selfsigversion = sig->version; diff --git a/g10/keyedit.c b/g10/keyedit.c index 89f26c765..94c34e96e 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -1,6 +1,6 @@ /* keyedit.c - keyedit stuff * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - * 2006 Free Software Foundation, Inc. + * 2006, 2007 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -1554,6 +1554,10 @@ keyedit_menu( const char *username, strlist_t locusr, if( collapse_uids( &keyblock ) ) modified++; reorder_keyblock(keyblock); + /* We modified the keyblock, so let's make sure the flags are + right. */ + if (modified) + merge_keys_and_selfsig (keyblock); if(seckey_check) {/* see whether we have a matching secret key */