* epg.el (epg--process-filter): Pass epg-context instead of
authorueno <ueno>
Sat, 27 May 2006 02:01:14 +0000 (02:01 +0000)
committerueno <ueno>
Sat, 27 May 2006 02:01:14 +0000 (02:01 +0000)
process to status handlers.
(epg--status-NO_PUBKEY): Check if the previous signature's key-id
matches with the given key-id.

ChangeLog
epg.el

index 1d77d3f..ca8213b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-05-27  Daiki Ueno  <ueno@unixuser.org>
+
+       * epg.el (epg--process-filter): Pass epg-context instead of
+       process to status handlers.
+       (epg--status-NO_PUBKEY): Check if the previous signature's key-id
+       matches with the given key-id.
+
 2006-05-26  Daiki Ueno  <ueno@unixuser.org>
 
        * epg.el (epg--status-NO_PUBKEY): Replace the previous signature's
diff --git a/epg.el b/epg.el
index 13156bc..4604269 100644 (file)
--- a/epg.el
+++ b/epg.el
@@ -873,7 +873,7 @@ This function is for internal use only."
                      (setq epg-pending-status-list nil))
                  (if (and symbol
                           (fboundp symbol))
-                     (funcall symbol process string)))))
+                     (funcall symbol epg-context string)))))
          (forward-line))
        (setq epg-read-point (point)))))
 
@@ -913,7 +913,7 @@ This function is for internal use only."
           (file-exists-p (epg-context-output-file context)))
       (delete-file (epg-context-output-file context))))
 
-(defun epg--status-USERID_HINT (process string)
+(defun epg--status-USERID_HINT (context string)
   (if (string-match "\\`\\([^ ]+\\) \\(.*\\)" string)
       (let* ((key-id (match-string 1 string))
             (user-id (match-string 2 string))
@@ -923,17 +923,17 @@ This function is for internal use only."
          (setq epg-user-id-alist (cons (cons key-id user-id)
                                        epg-user-id-alist))))))
 
-(defun epg--status-NEED_PASSPHRASE (process string)
+(defun epg--status-NEED_PASSPHRASE (context string)
   (if (string-match "\\`\\([^ ]+\\)" string)
       (setq epg-key-id (match-string 1 string))))
 
-(defun epg--status-NEED_PASSPHRASE_SYM (process string)
+(defun epg--status-NEED_PASSPHRASE_SYM (context string)
   (setq epg-key-id 'SYM))
 
-(defun epg--status-NEED_PASSPHRASE_PIN (process string)
+(defun epg--status-NEED_PASSPHRASE_PIN (context string)
   (setq epg-key-id 'PIN))
 
-(defun epg--status-GET_HIDDEN (process string)
+(defun epg--status-GET_HIDDEN (context string)
   (if (and epg-key-id
           (string-match "\\`passphrase\\." string))
       (let (inhibit-quit
@@ -944,73 +944,72 @@ This function is for internal use only."
                (progn
                  (setq passphrase
                        (funcall
-                        (if (consp (epg-context-passphrase-callback
-                                    epg-context))
-                            (car (epg-context-passphrase-callback
-                                  epg-context))
-                          (epg-context-passphrase-callback epg-context))
-                        epg-context
+                        (if (consp (epg-context-passphrase-callback context))
+                            (car (epg-context-passphrase-callback context))
+                          (epg-context-passphrase-callback context))
+                        context
                         epg-key-id
-                        (if (consp (epg-context-passphrase-callback
-                                    epg-context))
-                            (cdr (epg-context-passphrase-callback
-                                  epg-context)))))
+                        (if (consp (epg-context-passphrase-callback context))
+                            (cdr (epg-context-passphrase-callback context)))))
                  (when passphrase
                    (setq passphrase-with-new-line (concat passphrase "\n"))
                    (fillarray passphrase 0)
                    (setq passphrase nil)
-                   (process-send-string process passphrase-with-new-line)))
+                   (process-send-string (epg-context-process context)
+                                        passphrase-with-new-line)))
              (quit
               (epg-context-set-result-for
-               epg-context 'error
+               context 'error
                (cons '(quit)
-                     (epg-context-result-for epg-context 'error)))
-              (delete-process process)))
+                     (epg-context-result-for context 'error)))
+              (delete-process (epg-context-process context))))
          (if passphrase
              (fillarray passphrase 0))
          (if passphrase-with-new-line
              (fillarray passphrase-with-new-line 0))))))
 
-(defun epg--status-GET_BOOL (process string)
+(defun epg--status-GET_BOOL (context string)
   (let ((entry (assoc string epg-prompt-alist))
        inhibit-quit)
     (condition-case nil
       (if (y-or-n-p (if entry (cdr entry) (concat string "? ")))
-         (process-send-string process "y\n")
-       (process-send-string process "n\n"))
+         (process-send-string (epg-context-process context) "y\n")
+       (process-send-string (epg-context-process context) "n\n"))
       (quit
        (epg-context-set-result-for
-       epg-context 'error
+       context 'error
        (cons '(quit)
-             (epg-context-result-for epg-context 'error)))
-       (delete-process process)))))
+             (epg-context-result-for context 'error)))
+       (delete-process (epg-context-process context))))))
 
-(defun epg--status-GET_LINE (process string)
+(defun epg--status-GET_LINE (context string)
   (let ((entry (assoc string epg-prompt-alist))
        inhibit-quit)
     (condition-case nil
-       (process-send-string
-        process
-        (concat (read-string (if entry (cdr entry) (concat string ": ")))
-                "\n"))
+       (process-send-string (epg-context-process context)
+                            (concat (read-string
+                                     (if entry
+                                         (cdr entry)
+                                       (concat string ": ")))
+                                    "\n"))
       (quit
        (epg-context-set-result-for
-       epg-context 'error
+       context 'error
        (cons '(quit)
-             (epg-context-result-for epg-context 'error)))
-       (delete-process process)))))
+             (epg-context-result-for context 'error)))
+       (delete-process (epg-context-process context))))))
 
-(defun epg--status-*SIG (status string)
+(defun epg--status-*SIG (context status string)
   (if (string-match "\\`\\([^ ]+\\) \\(.*\\)" string)
       (let* ((key-id (match-string 1 string))
             (user-id (match-string 2 string))
             (entry (assoc key-id epg-user-id-alist)))
        (epg-context-set-result-for
-        epg-context
+        context
         'verify
         (cons (epg-make-signature status key-id)
-              (epg-context-result-for epg-context 'verify)))
-       (if (eq (epg-context-protocol epg-context) 'CMS)
+              (epg-context-result-for context 'verify)))
+       (if (eq (epg-context-protocol context) 'CMS)
            (condition-case nil
                (setq user-id (epg-dn-from-string user-id))
              (error)))
@@ -1019,38 +1018,39 @@ This function is for internal use only."
          (setq epg-user-id-alist
                (cons (cons key-id user-id) epg-user-id-alist))))
     (epg-context-set-result-for
-     epg-context
+     context
      'verify
      (cons (epg-make-signature status)
-          (epg-context-result-for epg-context 'verify)))))
+          (epg-context-result-for context 'verify)))))
 
-(defun epg--status-GOODSIG (process string)
-  (epg--status-*SIG 'good string))
+(defun epg--status-GOODSIG (context string)
+  (epg--status-*SIG context 'good string))
 
-(defun epg--status-EXPSIG (process string)
-  (epg--status-*SIG 'expired string))
+(defun epg--status-EXPSIG (context string)
+  (epg--status-*SIG context 'expired string))
 
-(defun epg--status-EXPKEYSIG (process string)
-  (epg--status-*SIG 'expired-key string))
+(defun epg--status-EXPKEYSIG (context string)
+  (epg--status-*SIG context 'expired-key string))
 
-(defun epg--status-REVKEYSIG (process string)
-  (epg--status-*SIG 'revoked-key string))
+(defun epg--status-REVKEYSIG (context string)
+  (epg--status-*SIG context 'revoked-key string))
 
-(defun epg--status-BADSIG (process string)
-  (epg--status-*SIG 'bad string))
+(defun epg--status-BADSIG (context string)
+  (epg--status-*SIG context 'bad string))
 
-(defun epg--status-NO_PUBKEY (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-NO_PUBKEY (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
-            (eq (epg-signature-status signature) 'error))
+            (eq (epg-signature-status signature) 'error)
+            (equal (epg-signature-key-id signature) string))
        (epg-signature-set-status signature 'no-pubkey))))
 
-(defun epg--status-ERRSIG (process string)
+(defun epg--status-ERRSIG (context string)
   (if (string-match "\\`\\([^ ]+\\) \\([0-9]+\\) \\([0-9]+\\) \
 \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\([^ ]+\\) \\([0-9]+\\)"
                    string)
       (let ((signature (epg-make-signature 'error)))
-       (epg-context-set-result-for epg-context 'verify (list signature))
+       (epg-context-set-result-for context 'verify (list signature))
        (epg-signature-set-key-id
         signature
         (match-string 1 string))
@@ -1067,8 +1067,8 @@ This function is for internal use only."
         signature
         (match-string 5 string)))))
 
-(defun epg--status-VALIDSIG (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-VALIDSIG (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (when (and signature
               (eq (epg-signature-status signature) 'good)
               (string-match "\\`\\([^ ]+\\) [^ ]+ \\([^ ]+\\) \\([^ ]+\\) \
@@ -1097,116 +1097,116 @@ This function is for internal use only."
        signature
        (string-to-number (match-string 7 string) 16)))))
 
-(defun epg--status-TRUST_UNDEFINED (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-TRUST_UNDEFINED (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
             (eq (epg-signature-status signature) 'good))
        (epg-signature-set-validity signature 'undefined))))
 
-(defun epg--status-TRUST_NEVER (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-TRUST_NEVER (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
             (eq (epg-signature-status signature) 'good))
        (epg-signature-set-validity signature 'never))))
 
-(defun epg--status-TRUST_MARGINAL (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-TRUST_MARGINAL (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
             (eq (epg-signature-status signature) 'marginal))
        (epg-signature-set-validity signature 'marginal))))
 
-(defun epg--status-TRUST_FULLY (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-TRUST_FULLY (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
             (eq (epg-signature-status signature) 'good))
        (epg-signature-set-validity signature 'full))))
 
-(defun epg--status-TRUST_ULTIMATE (process string)
-  (let ((signature (car (epg-context-result-for epg-context 'verify))))
+(defun epg--status-TRUST_ULTIMATE (context string)
+  (let ((signature (car (epg-context-result-for context 'verify))))
     (if (and signature
             (eq (epg-signature-status signature) 'good))
        (epg-signature-set-validity signature 'ultimate))))
 
-(defun epg--status-PROGRESS (process string)
+(defun epg--status-PROGRESS (context string)
   (if (string-match "\\`\\([^ ]+\\) \\([^ ]\\) \\([0-9]+\\) \\([0-9]+\\)"
                    string)
-      (funcall (if (consp (epg-context-progress-callback epg-context))
-                  (car (epg-context-progress-callback epg-context))
-                (epg-context-progress-callback epg-context))
-              epg-context
+      (funcall (if (consp (epg-context-progress-callback context))
+                  (car (epg-context-progress-callback context))
+                (epg-context-progress-callback context))
+              context
               (match-string 1 string)
               (match-string 2 string)
               (string-to-number (match-string 3 string))
               (string-to-number (match-string 4 string))
-              (if (consp (epg-context-progress-callback epg-context))
-                  (cdr (epg-context-progress-callback epg-context))))))
+              (if (consp (epg-context-progress-callback context))
+                  (cdr (epg-context-progress-callback context))))))
 
-(defun epg--status-DECRYPTION_FAILED (process string)
+(defun epg--status-DECRYPTION_FAILED (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons '(decryption-failed)
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-NODATA (process string)
+(defun epg--status-NODATA (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons (list 'no-data (cons 'reason (string-to-number string)))
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-UNEXPECTED (process string)
+(defun epg--status-UNEXPECTED (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons (list 'unexpected (cons 'reason (string-to-number string)))
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-KEYEXPIRED (process string)
+(defun epg--status-KEYEXPIRED (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons (list 'key-expired (cons 'expiration-time string))
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-KEYREVOKED (process string)
+(defun epg--status-KEYREVOKED (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons '(key-revoked)
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-BADARMOR (process string)
+(defun epg--status-BADARMOR (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons '(bad-armor)
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-INV_RECP (process string)
+(defun epg--status-INV_RECP (context string)
   (if (string-match "\\`\\([0-9]+\\) \\(.*\\)" string)
       (epg-context-set-result-for
-       epg-context 'error
+       context 'error
        (cons (list 'invalid-recipient
                   (cons 'reason
                         (string-to-number (match-string 1 string)))
                   (cons 'requested-recipient
                         (match-string 2 string)))
-            (epg-context-result-for epg-context 'error)))))
+            (epg-context-result-for context 'error)))))
 
-(defun epg--status-NO_RECP (process string)
+(defun epg--status-NO_RECP (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons '(no-recipients)
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-DELETE_PROBLEM (process string)
+(defun epg--status-DELETE_PROBLEM (context string)
   (if (string-match "\\`\\([0-9]+\\)" string)
       (epg-context-set-result-for
-       epg-context 'error
+       context 'error
        (cons (list 'delete-problem
                   (cons 'reason (string-to-number (match-string 1 string))))
-            (epg-context-result-for epg-context 'error)))))
+            (epg-context-result-for context 'error)))))
 
-(defun epg--status-SIG_CREATED (process string)
+(defun epg--status-SIG_CREATED (context string)
   (if (string-match "\\`\\([DCS]\\) \\([0-9]+\\) \\([0-9]+\\) \
 \\([0-9A-Fa-F][0-9A-Fa-F]\\) \\(.*\\) " string)
       (epg-context-set-result-for
-       epg-context 'sign
+       context 'sign
        (cons (epg-make-new-signature
              (cdr (assq (aref (match-string 1 string) 0)
                         epg-new-signature-type-alist))
@@ -1215,23 +1215,23 @@ This function is for internal use only."
              (string-to-number (match-string 4 string) 16)
              (match-string 5 string)
              (substring string (match-end 0)))
-            (epg-context-result-for epg-context 'sign)))))
+            (epg-context-result-for context 'sign)))))
 
-(defun epg--status-KEY_CREATED (process string)
+(defun epg--status-KEY_CREATED (context string)
   (if (string-match "\\`\\([BPS]\\) \\([^ ]+\\)" string)
       (epg-context-set-result-for
-       epg-context 'generate-key
+       context 'generate-key
        (cons (list (cons 'type (string-to-char (match-string 1 string)))
                   (cons 'fingerprint (match-string 2 string)))
-            (epg-context-result-for epg-context 'generate-key)))))
+            (epg-context-result-for context 'generate-key)))))
 
-(defun epg--status-KEY_NOT_CREATED (process string)
+(defun epg--status-KEY_NOT_CREATED (context string)
   (epg-context-set-result-for
-   epg-context 'error
+   context 'error
    (cons '(key-not-created)
-        (epg-context-result-for epg-context 'error))))
+        (epg-context-result-for context 'error))))
 
-(defun epg--status-IMPORTED (process string)
+(defun epg--status-IMPORTED (context string)
   (if (string-match "\\`\\([^ ]+\\) \\(.*\\)" string)
       (let* ((key-id (match-string 1 string))
             (user-id (match-string 2 string))
@@ -1241,13 +1241,13 @@ This function is for internal use only."
          (setq epg-user-id-alist (cons (cons key-id user-id)
                                        epg-user-id-alist)))
        (epg-context-set-result-for
-        epg-context 'import
+        context 'import
         (cons (list (cons 'key-id key-id)
                     (cons 'user-id user-id))
-              (epg-context-result-for epg-context 'import))))))
+              (epg-context-result-for context 'import))))))
 
-(defun epg--status-IMPORT_OK (process string)
-  (let ((result (epg-context-result-for epg-context 'import)))
+(defun epg--status-IMPORT_OK (context string)
+  (let ((result (epg-context-result-for context 'import)))
     (if (and result
             (string-match "\\`\\([0-9]+\\)\\( \\(.+\\)\\)?" string))
        (setcar result
@@ -1259,10 +1259,10 @@ This function is for internal use only."
                                        (match-string 3 string))))
                        (car result))))))
 
-(defun epg--status-IMPORT_PROBLEM (process string)
+(defun epg--status-IMPORT_PROBLEM (context string)
   (if (string-match "\\`\\([0-9]+\\)\\( \\(.+\\)\\)?" string)
       (epg-context-set-result-for
-       epg-context 'error
+       context 'error
        (cons (cons 'import-problem
                   (append (list (cons 'reason
                                       (string-to-number
@@ -1270,7 +1270,7 @@ This function is for internal use only."
                           (if (match-beginning 2)
                               (list (cons 'fingerprint
                                           (match-string 3 string))))))
-            (epg-context-result-for epg-context 'error)))))
+            (epg-context-result-for context 'error)))))
 
 (defun epg-passphrase-callback-function (context key-id handback)
   (if (eq key-id 'SYM)