aboutsummaryrefslogtreecommitdiffstats
path: root/g10/delkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/delkey.c')
-rw-r--r--g10/delkey.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/g10/delkey.c b/g10/delkey.c
index 777d4c174..57ba41b67 100644
--- a/g10/delkey.c
+++ b/g10/delkey.c
@@ -52,37 +52,35 @@ do_delete_key( const char *username, int secret, int *r_sec_avail )
int rc = 0;
KBNODE keyblock = NULL;
KBNODE node;
- KBPOS kbpos;
+ KEYDB_HANDLE hd = keydb_new (secret);
PKT_public_key *pk = NULL;
PKT_secret_key *sk = NULL;
u32 keyid[2];
int okay=0;
int yes;
+ KEYDB_SEARCH_DESC desc;
*r_sec_avail = 0;
- /* search the userid */
- 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 );
+ /* search the userid */
+ memset (&desc, 0, sizeof desc);
+ desc.mode = classify_user_id (username,
+ desc.u.kid,
+ desc.u.fpr,
+ &desc.u.name,
+ NULL);
+
+ rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID;
+ if (rc) {
+ log_error (_("key `%s' not found: %s\n"), username, g10_errstr (rc));
write_status_text( STATUS_DELETE_PROBLEM, "1" );
goto leave;
}
/* read the keyblock */
- rc = read_keyblock( &kbpos, &keyblock );
- if( rc ) {
- log_error("%s: read problem: %s\n", username, g10_errstr(rc) );
+ rc = keydb_get_keyblock (hd, &keyblock );
+ if (rc) {
+ log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
goto leave;
}
@@ -159,15 +157,16 @@ do_delete_key( const char *username, int secret, int *r_sec_avail )
if( okay ) {
- rc = delete_keyblock( &kbpos );
- if( rc ) {
- log_error("delete_keyblock failed: %s\n", g10_errstr(rc) );
+ rc = keydb_delete_keyblock (hd);
+ if (rc) {
+ log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) );
goto leave;
}
}
leave:
- release_kbnode( keyblock );
+ keydb_release (hd);
+ release_kbnode (keyblock);
return rc;
}