diff options
author | Werner Koch <[email protected]> | 2024-06-05 15:04:33 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-06-05 15:04:33 +0000 |
commit | 77afc9ee1c75a28083edf6d98888f9b472c3e39d (patch) | |
tree | f1178f2db721cc404602110cf9227deaaa037a98 /g10/getkey.c | |
parent | gpg: Do not show RENC if no key capabilities are found for a key. (diff) | |
download | gnupg-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/getkey.c')
-rw-r--r-- | g10/getkey.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index 49ffe0adb..d97690a83 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -4588,3 +4588,30 @@ have_secret_key_with_kid (ctrl_t ctrl, u32 *keyid) keydb_release (kdbhd); return result; } + + +/* Return an error if KEYBLOCK has a primary or subkey with the given + * fingerprint (FPR,FPRLEN). */ +gpg_error_t +has_key_with_fingerprint (kbnode_t keyblock, const byte *fpr, size_t fprlen) +{ + kbnode_t node; + PKT_public_key *pk; + byte pkfpr[MAX_FINGERPRINT_LEN]; + size_t pkfprlen; + + for (node = keyblock; node; node = node->next) + { + if (node->pkt->pkttype == PKT_PUBLIC_KEY + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY + || node->pkt->pkttype == PKT_SECRET_KEY + || node->pkt->pkttype == PKT_SECRET_SUBKEY) + { + pk = node->pkt->pkt.public_key; + fingerprint_from_pk (pk, pkfpr, &pkfprlen); + if (pkfprlen == fprlen && !memcmp (pkfpr, fpr, fprlen)) + return gpg_error (GPG_ERR_DUP_KEY); + } + } + return 0; +} |