diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-09-30 08:41:43 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-09-30 08:41:43 +0200 |
commit | 5d33839c3fc40308cd29dbd0991888ead81fbfa7 (patch) | |
tree | 47abda629562e94d15820ee3b74a7e3b4bead5c4 /lisp/gnus/mml-smime.el | |
parent | 542b78eddeba3f020349c2d02ba2d21e8613d99d (diff) | |
download | emacs-5d33839c3fc40308cd29dbd0991888ead81fbfa7.tar.gz |
Refactor mm-decode and friends to be explicit about when errors happen
* lisp/gnus/mm-decode.el (mm-sec-status):
(mm-sec-error): New functions to handle decryption problems more
explicitly (bug#18393).
(mm-possibly-verify-or-decrypt): Use the `sec-error' data to
determine whether the operation failed or not.
* lisp/gnus/mml-smime.el: Ditto.
* lisp/gnus/mml2015.el: Used throughout.
Diffstat (limited to 'lisp/gnus/mml-smime.el')
-rw-r--r-- | lisp/gnus/mml-smime.el | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el index b2e9b783522..659f2b95289 100644 --- a/lisp/gnus/mml-smime.el +++ b/lisp/gnus/mml-smime.el @@ -274,10 +274,9 @@ Whether the passphrase is cached at all is controlled by (if (not good-signature) (progn ;; we couldn't verify message, fail with openssl output as message - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Failed") - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-details + (mm-sec-error + 'gnus-info "Failed" + 'gnus-details (concat "OpenSSL failed to verify message integrity:\n" "-------------------------------------------\n" openssl-output))) @@ -290,19 +289,18 @@ Whether the passphrase is cached at all is controlled by (while (re-search-forward "-----END CERTIFICATE-----" nil t) (when (smime-pkcs7-email-region (point-min) (point)) (setq addresses (append (smime-buffer-as-string-region - (point-min) (point)) addresses))) + (point-min) (point)) + addresses))) (delete-region (point-min) (point))) (setq addresses (mapcar 'downcase addresses)))) - (if (not (member (downcase (or (mm-handle-multipart-from ctl) "")) addresses)) - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Sender address forged") + (if (not (member (downcase (or (mm-handle-multipart-from ctl) "")) + addresses)) + (mm-sec-error 'gnus-info "Sender address forged") (if good-certificate - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Ok (sender authenticated)") - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Ok (sender not trusted)"))) - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-details + (mm-sec-status 'gnus-info "Ok (sender authenticated)") + (mm-sec-status 'gnus-info "Ok (sender not trusted)"))) + (mm-sec-status + 'gnus-details (concat "Sender claimed to be: " (mm-handle-multipart-from ctl) "\n" (if addresses (concat "Addresses in certificate: " @@ -411,24 +409,20 @@ Content-Disposition: attachment; filename=smime.p7m (cdr handle) "application/x-pkcs7-signature" nil t))))) - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Corrupted") + (mm-sec-error 'gnus-info "Corrupted") (throw 'error handle)) (setq part (replace-regexp-in-string "\n" "\r\n" part) context (epg-make-context 'CMS)) (condition-case error (setq plain (epg-verify-string context (mm-get-part signature) part)) (error - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Failed") + (mm-sec-error 'gnus-info "Failed") (if (eq (car error) 'quit) - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-details "Quit.") - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-details (format "%S" error))) + (mm-sec-status 'gnus-details "Quit.") + (mm-sec-status 'gnus-details (format "%S" error))) (throw 'error handle))) - (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info + (mm-sec-status + 'gnus-info (epg-verify-result-to-string (epg-context-result-for context 'verify))) handle))) |