[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.