* keyedit.c (keyedit_menu): If we modify the keyblock (via
authorDavid Shaw <dshaw@jabberwocky.com>
Tue, 6 Mar 2007 06:39:38 +0000 (06:39 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Tue, 6 Mar 2007 06:39:38 +0000 (06:39 +0000)
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.

g10/ChangeLog
g10/getkey.c
g10/keyedit.c

index c75dd71..81676d7 100644 (file)
@@ -1,3 +1,12 @@
+2007-03-06  David Shaw  <dshaw@jabberwocky.com>
+
+       * 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-01  David Shaw  <dshaw@jabberwocky.com>
 
        * options.h, gpg.c (main), mainproc.c (check_sig_and_print): Allow
index b99ea23..eb1d91f 100644 (file)
@@ -1485,10 +1485,13 @@ 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;
 
@@ -1497,6 +1500,8 @@ fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated )
        uid->is_expired = 1;
        return; /* has expired */
       }
+    else
+      uid->is_expired=0;
 
     uid->created = sig->timestamp; /* this one is okay */
     uid->selfsigversion = sig->version;
index d1bf987..92f7960 100644 (file)
@@ -1541,6 +1541,10 @@ keyedit_menu( const char *username, STRLIST 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 */