aboutsummaryrefslogtreecommitdiffstats
path: root/g10/delkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/delkey.c')
-rw-r--r--g10/delkey.c14
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" );