g10: When adding a user id, make sure the keyblock has been prepared.

* g10/keyedit.c (keyedit_quick_adduid): Call merge_keys_and_selfsig on
KEYBLOCK before adding the user id.
* tests/openpgp/quick-key-manipulation.scm: Make sure that the key
capabilities don't change when adding a user id.
(key-data): New function.

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>
GnuPG-bug-id: 2697
This commit is contained in:
Neal H. Walfield 2016-09-22 21:32:31 +02:00
parent 7e0379a754
commit df5353b95e
2 changed files with 24 additions and 1 deletions

View File

@ -2932,6 +2932,8 @@ keyedit_quick_adduid (ctrl_t ctrl, const char *username, const char *newuid)
fix_keyblock (&keyblock);
merge_keys_and_selfsig (keyblock);
if (menu_adduid (ctrl, keyblock, 0, NULL, uidstring))
{
err = keydb_update_keyblock (kdbhd, keyblock);

View File

@ -37,6 +37,11 @@
(define alpha "Alpha <alpha@example.net>")
(define bravo "Bravo <bravo@example.net>")
(define (key-data key)
(filter (lambda (x) (or (string=? (car x) "pub")
(string=? (car x) "sub")))
(gpg-with-colons `(-k ,key))))
(with-temporary-working-directory
(file-copy (path-join old-home "gpg.conf") "gpg.conf")
(file-copy (path-join old-home "gpg-agent.conf") "gpg-agent.conf")
@ -51,7 +56,23 @@
(assert (= 1 (count-uids-of-secret-key alpha)))
(info "Checking that we can add a user ID...")
(call-check `(,@GPG --quick-adduid ,(exact alpha) ,bravo))
;; Make sure the key capabilities don't change when we add a user id.
;; (See bug #2697.)
(let ((pre (key-data (exact alpha)))
(result (call-check `(,@GPG --quick-adduid ,(exact alpha) ,bravo)))
(post (key-data (exact alpha))))
(if (not (equal? pre post))
(begin
(display "Key capabilities changed when adding a user id:")
(newline)
(display " Pre: ")
(display pre)
(newline)
(display " Post: ")
(display post)
(newline)
(exit 1))))
(call-check `(,@GPG --check-trustdb)) ; XXX why?