diff options
Diffstat (limited to 'g10/delkey.c')
-rw-r--r-- | g10/delkey.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/g10/delkey.c b/g10/delkey.c index 784fe03bf..777d4c174 100644 --- a/g10/delkey.c +++ b/g10/delkey.c @@ -61,8 +61,18 @@ do_delete_key( const char *username, int secret, int *r_sec_avail ) *r_sec_avail = 0; /* search the userid */ - rc = secret? find_secret_keyblock_byname( &kbpos, username ) - : find_keyblock_byname( &kbpos, username ); + if (secret + && classify_user_id (username, keyid, NULL, NULL, NULL) == 11) { + /* if the user supplied a long keyID we use the direct search + methods which allows us to delete a key if the + corresponding secret key is missing */ + rc = find_secret_keyblock_direct (&kbpos, keyid); + } + else if (secret) + rc = find_secret_keyblock_byname (&kbpos, username); + else + rc = find_keyblock_byname (&kbpos, username); + if( rc ) { log_error(_("%s: user not found\n"), username ); write_status_text( STATUS_DELETE_PROBLEM, "1" ); |