[gnus git] branch master updated: m0-5-266-gd265d10 =1= mml2015.el (mml2015-epg-find-usable-key): handle revoked user-id
Daiki Ueno <[email protected]>
| Newsgroups | gmane.emacs.gnus.cvs |
|---|---|
| Message-ID | <[email protected]> |
via d265d103d373985bdd871bac8a9437087daa0ed5 (commit)
from 2d7ef23c08c4e1ebe8b2712d821d2d5837f83f3d (commit)
- Log -----------------------------------------------------------------
commit d265d103d373985bdd871bac8a9437087daa0ed5
Author: Daiki Ueno <[email protected]>
Date: Sun Feb 17 19:00:33 2013 +0900
mml2015.el (mml2015-epg-find-usable-key): handle revoked user-id
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6f3e88d..85371d7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
+2013-02-17 Daiki Ueno <[email protected]>
+
+ * mml2015.el (epg-key-user-id-list, epg-user-id-string)
+ (epg-user-id-validity): Autoload.
+ (mml2015-epg-check-user-id): New function.
+ (mml2015-epg-check-sub-key): New function split from
+ mml2015-epg-find-usable-key.
+ (mml2015-epg-find-usable-key): Accept context, name, usage, and
+ optional name-is-key-id, to handle the case when user-id is unusable.
+ Reported by Łukasz Stelmach <[email protected]>.
+
2013-02-17 Glenn Morris <[email protected]>
* shr.el (shr-put-image): Use image-multi-frame-p if available.
diff --git a/lisp/mml2015.el b/lisp/mml2015.el
index 275a486..b20c02a 100644
--- a/lisp/mml2015.el
+++ b/lisp/mml2015.el
@@ -757,6 +757,9 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(autoload 'epg-sub-key-fingerprint "epg")
(autoload 'epg-signature-key-id "epg")
(autoload 'epg-signature-to-string "epg")
+(autoload 'epg-key-user-id-list "epg")
+(autoload 'epg-user-id-string "epg")
+(autoload 'epg-user-id-validity "epg")
(autoload 'epg-configuration "epg-config")
(autoload 'epg-expand-group "epg-config")
(autoload 'epa-select-keys "epa")
@@ -786,10 +789,24 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(cons password-cache-key-id mml2015-epg-secret-key-id-list))
(copy-sequence passphrase)))))
-(defun mml2015-epg-find-usable-key (keys usage)
- (catch 'found
- (while keys
- (let ((pointer (epg-key-sub-key-list (car keys))))
+(defun mml2015-epg-check-user-id (key recipient)
+ (let ((pointer (epg-key-user-id-list key))
+ result)
+ (while pointer
+ (if (and (equal (car (mail-header-parse-address
+ (epg-user-id-string (car pointer))))
+ (car (mail-header-parse-address
+ recipient)))
+ (not (memq (epg-user-id-validity (car pointer))
+ '(revoked expired))))
+ (setq result t
+ pointer nil)
+ (setq pointer (cdr pointer))))
+ result))
+
+(defun mml2015-epg-check-sub-key (key usage)
+ (let ((pointer (epg-key-sub-key-list key))
+ result)
;; The primary key will be marked as disabled, when the entire
;; key is disabled (see 12 Field, Format of colon listings, in
;; gnupg/doc/DETAILS)
@@ -798,9 +815,27 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
(if (and (memq usage (epg-sub-key-capability (car pointer)))
(not (memq (epg-sub-key-validity (car pointer))
'(revoked expired))))
- (throw 'found (car keys)))
+ (setq result t
+ pointer nil)
(setq pointer (cdr pointer)))))
- (setq keys (cdr keys)))))
+ result))
+
+(defun mml2015-epg-find-usable-key (context name usage
+ &optional name-is-key-id)
+ (let ((keys (epg-list-keys context name))
+ key)
+ (while keys
+ (if (and (or name-is-key-id
+ ;; Non email user-id can be supplied through
+ ;; mml2015-signers if mml2015-encrypt-to-self is set.
+ ;; Treat it as valid, as it is user's intention.
+ (not (string-match "\\`<" name))
+ (mml2015-epg-check-user-id (car keys) name))
+ (mml2015-epg-check-sub-key (car keys) usage))
+ (setq key (car keys)
+ keys nil)
+ (setq keys (cdr keys))))
+ key))
;; XXX: since gpg --list-secret-keys does not return validity of each
;; key, `mml2015-epg-find-usable-key' defined above is not enough for
@@ -811,10 +846,12 @@ If set, it overrides the setting of `mml2015-sign-with-sender'."
secret-key)
(while (and (not secret-key) secret-keys)
(if (mml2015-epg-find-usable-key
- (epg-list-keys context (epg-sub-key-fingerprint
+ context
+ (epg-sub-key-fingerprint
(car (epg-key-sub-key-list
- (car secret-keys)))))
- usage)
+ (car secret-keys))))
+ usage
+ t)
(setq secret-key (car secret-keys)
secret-keys nil)
(setq secret-keys (cdr secret-keys))))
@@ -1115,8 +1152,7 @@ If no one is selected, symmetric encryption will be performed. "
(mapcar
(lambda (recipient)
(setq recipient-key (mml2015-epg-find-usable-key
- (epg-list-keys context recipient)
- 'encrypt))
+ context recipient 'encrypt))
(unless (or recipient-key
(y-or-n-p
(format "No public key for %s; skip it? "
-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.
Summary of changes:
lisp/ChangeLog | 11 ++++++++
lisp/mml2015.el | 76 ++++++++++++++++++++++++++++++++++++++++--------------
2 files changed, 67 insertions(+), 20 deletions(-)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".
The branch, master has been updated
hooks/post-receive
--
Gnus Project