g10: When adding a user id, make sure the keyblock has been prepared.
authorNeal H. Walfield <neal@g10code.com>
Thu, 22 Sep 2016 19:32:31 +0000 (21:32 +0200)
committerNeal H. Walfield <neal@g10code.com>
Thu, 22 Sep 2016 19:32:31 +0000 (21:32 +0200)
* 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

g10/keyedit.c
tests/openpgp/quick-key-manipulation.scm

index cd16ec9..65ac2ea 100644 (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);
index f2b8766..8a3e3f1 100755 (executable)
 (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")
  (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?