Backport bug fix. Fixes bug#1240.
[gnupg.git] / g10 / getkey.c
index 65d373b..54843cf 100644 (file)
@@ -760,10 +760,12 @@ classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc )
 
 
 static int
-skip_unusable(void *dummy,u32 *keyid,PKT_user_id *uid)
+skip_unusable (void *dummy, u32 *keyid, PKT_user_id *uid)
 {
   int unusable=0;
   KBNODE keyblock;
+  
+  (void)dummy;
 
   keyblock=get_pubkeyblock(keyid);
   if(!keyblock)
@@ -2638,16 +2640,6 @@ finish_lookup (GETKEY_CTX ctx)
         goto found;
     }
     
-    if (!req_usage) {
-        PKT_public_key *pk = foundk->pkt->pkt.public_key;
-        if (pk->user_id)
-            free_user_id (pk->user_id);
-        pk->user_id = scopy_user_id (foundu);
-        ctx->found_key = foundk;
-        cache_user_id( keyblock );
-        return 1; /* found */
-    }
-    
     latest_date = 0;
     latest_key  = NULL;
     /* do not look at subkeys if a certification key is requested */
@@ -2694,8 +2686,13 @@ finish_lookup (GETKEY_CTX ctx)
             }
 
             if (DBG_CACHE)
-                log_debug( "\tsubkey looks fine\n");
-            if ( pk->timestamp > latest_date ) {
+                log_debug( "\tsubkey might be fine\n");
+            /* In case a key has a timestamp of 0 set, we make sure
+               that it is used.  A better change would be to compare
+               ">=" but that might also change the selected keys and
+               is as such a more intrusive change.  */
+            if ( pk->timestamp > latest_date
+                 || (!pk->timestamp && !latest_date)) {
                 latest_date = pk->timestamp;
                 latest_key  = k;
             }