From: Katsumi Yamaoka Date: Thu, 11 Nov 2010 23:48:43 +0000 (+0000) Subject: Make mm-dissect-buffer pass sender's mail address to smime-decrypt-region. X-Git-Url: http://cgit.sxemacs.org/?p=gnus;a=commitdiff_plain;h=307712ed7cd4499b2aabbd7b898f9b442164fd27 Make mm-dissect-buffer pass sender's mail address to smime-decrypt-region. mm-decode.el (mm-dissect-buffer): Pass sender's mail address to smime-decrypt-region using function argument. mm-decode.el (mm-possibly-verify-or-decrypt, mm-dissect-multipart): Relay it. mm-view.el (mm-view-pkcs7, mm-view-pkcs7-decrypt): Relay it. smime.el (smime-decrypt-region): Catch it. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cd88fc751..e42c66d49 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2010-11-11 Katsumi Yamaoka + + * mm-decode.el (mm-dissect-buffer): Pass sender's mail address to + smime-decrypt-region using function argument. + (mm-possibly-verify-or-decrypt, mm-dissect-multipart): Relay it. + + * mm-view.el (mm-view-pkcs7, mm-view-pkcs7-decrypt): Relay it. + + * smime.el (smime-decrypt-region): Catch it. + 2010-11-11 Stefan Monnier * smime.el (smime-mode-map): Move initialization into declaration. diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index bcd6a80f1..2ab5a548e 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -624,7 +624,7 @@ Postpone undisplaying of viewers for types in no-strict-mime (and cd (mail-header-parse-content-disposition cd)) description id) - ctl)))) + ctl from)))) (when id (when (string-match " *<\\(.*\\)> *" id) (setq id (match-string 1 id))) @@ -666,7 +666,7 @@ Postpone undisplaying of viewers for types in (save-restriction (narrow-to-region start end) (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) - (mm-possibly-verify-or-decrypt (nreverse parts) ctl))) + (mm-possibly-verify-or-decrypt (nreverse parts) ctl from))) (defun mm-copy-to-buffer () "Copy the contents of the current buffer to a fresh buffer." @@ -1569,7 +1569,7 @@ If RECURSIVE, search recursively." (autoload 'mm-view-pkcs7 "mm-view") -(defun mm-possibly-verify-or-decrypt (parts ctl) +(defun mm-possibly-verify-or-decrypt (parts ctl &optional from) (let ((type (car ctl)) (subtype (cadr (split-string (car ctl) "/"))) (mm-security-handle ctl) ;; (car CTL) is the type. @@ -1584,7 +1584,7 @@ If RECURSIVE, search recursively." ((eq mm-decrypt-option 'known) t) (t (y-or-n-p (format "Decrypt (S/MIME) part? ")))) - (mm-view-pkcs7 parts)) + (mm-view-pkcs7 parts from)) (setq parts (mm-dissect-buffer t))))) ((equal subtype "signed") (unless (and (setq protocol diff --git a/lisp/mm-view.el b/lisp/mm-view.el index f62147598..083781b0f 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -653,9 +653,9 @@ (t (error "Could not identify PKCS#7 type"))))) -(defun mm-view-pkcs7 (handle) +(defun mm-view-pkcs7 (handle &optional from) (case (mm-view-pkcs7-get-type handle) - (enveloped (mm-view-pkcs7-decrypt handle)) + (enveloped (mm-view-pkcs7-decrypt handle from)) (signed (mm-view-pkcs7-verify handle)) (otherwise (error "Unknown or unimplemented PKCS#7 type")))) @@ -680,7 +680,7 @@ (replace-match "\n")) t) -(defun mm-view-pkcs7-decrypt (handle) +(defun mm-view-pkcs7-decrypt (handle &optional from) (insert-buffer-substring (mm-handle-buffer handle)) (goto-char (point-min)) (insert "MIME-Version: 1.0\n") @@ -692,7 +692,8 @@ (smime-get-key-by-email (gnus-completing-read "Decipher using key" - smime-keys nil nil nil (car-safe (car-safe smime-keys)))))) + smime-keys nil nil nil (car-safe (car-safe smime-keys))))) + from) (goto-char (point-min)) (while (search-forward "\r\n" nil t) (replace-match "\n")) diff --git a/lisp/smime.el b/lisp/smime.el index 5363a40c7..0695d5ac8 100644 --- a/lisp/smime.el +++ b/lisp/smime.el @@ -426,11 +426,7 @@ Any details (stdout and stderr) are left in the buffer specified by (insert-buffer-substring smime-details-buffer) nil)) -;; TODO: fix this properly by giving it a prefix. -(if (featurep 'xemacs) - (defvar from)) - -(defun smime-decrypt-region (b e keyfile) +(defun smime-decrypt-region (b e keyfile &optional from) "Decrypt S/MIME message in region between B and E with key in KEYFILE. On success, replaces region with decrypted data and return non-nil. Any details (stderr on success, stdout and stderr on error) are left @@ -454,8 +450,7 @@ in the buffer specified by `smime-details-buffer'." (delete-file tmpfile))) (progn (delete-region b e) - (when (boundp 'from) - ;; `from' is dynamically bound in mm-dissect. + (when from (insert "From: " from "\n")) (insert-buffer-substring buffer) (kill-buffer buffer)