aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2011-04-29 10:01:52 +0000
committerMarcus Brinkmann <[email protected]>2011-04-29 10:01:52 +0000
commita286e95f3a3f1feba88c563b92c7227096f69d03 (patch)
tree8ee3161b95f3bc782e0a15adfd36f2d79dbcd7b7
parentRemoved memory leak in the ECDH code. (diff)
downloadgnupg-a286e95f3a3f1feba88c563b92c7227096f69d03.tar.gz
gnupg-a286e95f3a3f1feba88c563b92c7227096f69d03.zip
Give sensible error messages when trying to delete secret key.
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog6
-rw-r--r--g10/delkey.c31
2 files changed, 26 insertions, 11 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index bd53799b5..f8cc49cb4 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-29 Marcus Brinkmann <[email protected]>
+
+ * delkey.c (do_delete_key): Access public keyblock even for secret
+ key operations. But deleting secret key is not supported yet, so
+ give an error. Limit secret-key-exists error case to public keys.
+
2011-04-28 Werner Koch <[email protected]>
* ecdh.c (pk_ecdh_encrypt_with_shared_point): Remove memory leak
diff --git a/g10/delkey.c b/g10/delkey.c
index 3b47c4049..950af0ee0 100644
--- a/g10/delkey.c
+++ b/g10/delkey.c
@@ -83,7 +83,7 @@ do_delete_key( const char *username, int secret, int force, int *r_sec_avail )
}
/* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY );
+ node = find_kbnode( keyblock, PKT_PUBLIC_KEY );
if( !node ) {
log_error("Oops; key not found anymore!\n");
rc = G10ERR_GENERAL;
@@ -93,7 +93,7 @@ do_delete_key( const char *username, int secret, int force, int *r_sec_avail )
pk = node->pkt->pkt.public_key;
keyid_from_pk( pk, keyid );
- if (!force)
+ if (!secret && !force)
{
if (have_secret_key_with_kid (keyid))
{
@@ -146,20 +146,29 @@ do_delete_key( const char *username, int secret, int force, int *r_sec_avail )
if( okay ) {
- rc = keydb_delete_keyblock (hd);
- if (rc) {
+ if (secret)
+ {
+ log_error (_("deleting secret key not implemented\n"));
+ rc = gpg_error (GPG_ERR_NOT_IMPLEMENTED); /* FIXME */
+ goto leave;
+ }
+ else
+ {
+ rc = keydb_delete_keyblock (hd);
+ if (rc) {
log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) );
goto leave;
+ }
}
- /* Note that the ownertrust being cleared will trigger a
- revalidation_mark(). This makes sense - only deleting keys
- that have ownertrust set should trigger this. */
+ /* Note that the ownertrust being cleared will trigger a
+ revalidation_mark(). This makes sense - only deleting keys
+ that have ownertrust set should trigger this. */
- if (!secret && pk && clear_ownertrusts (pk)) {
- if (opt.verbose)
- log_info (_("ownertrust information cleared\n"));
- }
+ if (!secret && pk && clear_ownertrusts (pk)) {
+ if (opt.verbose)
+ log_info (_("ownertrust information cleared\n"));
+ }
}
leave: