From 76cb91c0002b95068b145650a45eb9d2809411fb Mon Sep 17 00:00:00 2001 From: ueno Date: Sat, 27 May 2006 02:01:14 +0000 Subject: [PATCH] * 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. --- ChangeLog | 7 ++ epg.el | 236 ++++++++++++++++++++++++++++++------------------------------- 2 files changed, 125 insertions(+), 118 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1d77d3f..ca8213b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-05-27 Daiki Ueno + + * 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 * epg.el (epg--status-NO_PUBKEY): Replace the previous signature's diff --git a/epg.el b/epg.el index 13156bc..4604269 100644 --- 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) -- 1.7.10.4