aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyedit.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-06-05 15:04:33 +0000
committerWerner Koch <[email protected]>2024-06-05 15:04:33 +0000
commit77afc9ee1c75a28083edf6d98888f9b472c3e39d (patch)
treef1178f2db721cc404602110cf9227deaaa037a98 /g10/keyedit.c
parentgpg: Do not show RENC if no key capabilities are found for a key. (diff)
downloadgnupg-77afc9ee1c75a28083edf6d98888f9b472c3e39d.tar.gz
gnupg-77afc9ee1c75a28083edf6d98888f9b472c3e39d.zip
gpg: Add magic parameter "default" to --quick-add-adsk.
* g10/getkey.c (has_key_with_fingerprint): New. * g10/keyedit.c (menu_addadsk): Replace code by new function. (keyedit_quick_addadsk): Handle magic arg "default". * g10/keygen.c (append_all_default_adsks): New. -- GnuPG-bug-id: 6882
Diffstat (limited to 'g10/keyedit.c')
-rw-r--r--g10/keyedit.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/g10/keyedit.c b/g10/keyedit.c
index 7a33c9ef3..0fb19645d 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -3389,7 +3389,15 @@ keyedit_quick_addadsk (ctrl_t ctrl, const char *fpr, const char *adskfpr)
/* Locate and add the ADSK. Note that the called function already
* prints error messages. */
- if (menu_addadsk (ctrl, keyblock, adskfpr))
+ if (adskfpr && !ascii_strcasecmp (adskfpr, "default"))
+ {
+ err = append_all_default_adsks (ctrl, keyblock);
+ if (!err)
+ modified = 1;
+ else if (gpg_err_code (err) == GPG_ERR_FALSE)
+ err = 0;
+ }
+ else if (menu_addadsk (ctrl, keyblock, adskfpr))
modified = 1;
else
log_inc_errorcount (); /* (We use log_info in menu_adsk) */
@@ -4971,7 +4979,6 @@ append_adsk_to_key (ctrl_t ctrl, kbnode_t keyblock, PKT_public_key *adsk)
}
-
/*
* Ask for a new additional decryption subkey and add it to the key
* block. Returns true if the keyblock was changed and false
@@ -4989,7 +4996,7 @@ menu_addadsk (ctrl_t ctrl, kbnode_t pub_keyblock, const char *adskfpr)
KEYDB_SEARCH_DESC desc;
byte fpr[MAX_FINGERPRINT_LEN];
size_t fprlen;
- kbnode_t node, node2;
+ kbnode_t node;
log_assert (pub_keyblock->pkt->pkttype == PKT_PUBLIC_KEY);
@@ -5073,22 +5080,10 @@ menu_addadsk (ctrl_t ctrl, kbnode_t pub_keyblock, const char *adskfpr)
}
/* Check that the selected subkey is not yet on our keyblock. */
- for (node2 = pub_keyblock; node2; node2 = node2->next)
- {
- if (node2->pkt->pkttype == PKT_PUBLIC_KEY
- || node2->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- {
- pk = node2->pkt->pkt.public_key;
- fingerprint_from_pk (pk, fpr, &fprlen);
- if (fprlen == desc.fprlen
- && !memcmp (fpr, desc.u.fpr, fprlen))
- break;
- }
- }
- if (node2)
+ err = has_key_with_fingerprint (pub_keyblock, desc.u.fpr, desc.fprlen);
+ if (err)
{
log_info (_("key \"%s\" is already on this keyblock\n"), answer);
- err = gpg_error (GPG_ERR_DUP_KEY);
if (adskfpr)
goto leave;
continue;