X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmml2015.el;h=e61ce7d353b04e82d8a1332d35699caf9542cf70;hb=7855c28b8ddeb14a6f637bcae5048f28d764271e;hp=1715a3dc8a240b04909ba4f741aad650e991da8f;hpb=f2549abf20a6449cc6bc8ce46f490687aab277b5;p=gnus diff --git a/lisp/mml2015.el b/lisp/mml2015.el index 1715a3dc8..e61ce7d35 100644 --- a/lisp/mml2015.el +++ b/lisp/mml2015.el @@ -75,17 +75,15 @@ (defvar mml2015-result-buffer nil) -(defvar mml2015-trust-boundaries-alist - '((trust-undefined . nil) - (trust-none . nil) - (trust-marginal . t) - (trust-full . t) - (trust-ultimate . t)) - "Trust boundaries for a signer's GnuPG key. -This alist contains pairs of the form (trust-symbol . boolean), with -symbols that are contained in `gpg-unabbrev-trust-alist'. The boolean -specifies whether the given trust value is good enough to be trusted -by you.") +(defcustom mml2015-unabbrev-trust-alist + '(("TRUST_UNDEFINED" . nil) + ("TRUST_NEVER" . nil) + ("TRUST_MARGINAL" . t) + ("TRUST_FULLY" . t) + ("TRUST_ULTIMATE" . t)) + "Map GnuPG trust output values to a boolean saying if you trust the key." + :type '(repeat (cons (regexp :tag "GnuPG output regexp") + (boolean :tag "Trust key")))) ;;; mailcrypt wrapper @@ -427,39 +425,36 @@ by you.") (defun mml2015-gpg-extract-signature-details () (goto-char (point-min)) - (if (and (eq mml2015-use 'gpg) - (boundp 'gpg-unabbrev-trust-alist)) - (let* ((expired (re-search-forward - "^\\[GNUPG:\\] SIGEXPIRED$" - nil t)) - (signer (and (re-search-forward - "^\\[GNUPG:\\] GOODSIG \\([0-9A-Za-z]*\\) \\(.*\\)$" - nil t) - (cons (match-string 1) (match-string 2)))) - (fprint (and (re-search-forward - "^\\[GNUPG:\\] VALIDSIG \\([0-9a-zA-Z]*\\) " - nil t) - (match-string 1))) - (trust (and (re-search-forward - "^\\[GNUPG:\\] \\(TRUST_.*\\)$" - nil t) - (match-string 1))) - (trust-good-enough-p - (cdr (assoc (cdr (assoc trust gpg-unabbrev-trust-alist)) - mml2015-trust-boundaries-alist)))) - (cond ((and signer fprint) - (concat (cdr signer) - (unless trust-good-enough-p - (concat "\nUntrusted, Fingerprint: " - (mml2015-gpg-pretty-print-fpr fprint))) - (when expired - (format "\nWARNING: Signature from expired key (%s)" - (car signer))))) - (t - "From unknown user"))) - (if (re-search-forward "^\\(gpg: \\)?Good signature from \"\\(.*\\)\"$" nil t) - (match-string 2) - "From unknown user"))) + (let* ((expired (re-search-forward + "^\\[GNUPG:\\] SIGEXPIRED$" + nil t)) + (signer (and (re-search-forward + "^\\[GNUPG:\\] GOODSIG \\([0-9A-Za-z]*\\) \\(.*\\)$" + nil t) + (cons (match-string 1) (match-string 2)))) + (fprint (and (re-search-forward + "^\\[GNUPG:\\] VALIDSIG \\([0-9a-zA-Z]*\\) " + nil t) + (match-string 1))) + (trust (and (re-search-forward + "^\\[GNUPG:\\] \\(TRUST_.*\\)$" + nil t) + (match-string 1))) + (trust-good-enough-p + (cdr (assoc trust mml2015-unabbrev-trust-alist)))) + (cond ((and signer fprint) + (concat (cdr signer) + (unless trust-good-enough-p + (concat "\nUntrusted, Fingerprint: " + (mml2015-gpg-pretty-print-fpr fprint))) + (when expired + (format "\nWARNING: Signature from expired key (%s)" + (car signer))))) + ((re-search-forward + "^\\(gpg: \\)?Good signature from \"\\(.*\\)\"$" nil t) + (match-string 2)) + (t + "From unknown user")))) (defun mml2015-gpg-verify (handle ctl) (catch 'error @@ -664,7 +659,10 @@ by you.") (pgg-decrypt-region (point-min) (point-max)) (setq decrypt-status (with-current-buffer mml2015-result-buffer - (buffer-string)))) + (buffer-string))) + (mm-set-handle-multipart-parameter + mm-security-handle 'gnus-details + decrypt-status)) (error (mm-set-handle-multipart-parameter mm-security-handle 'gnus-details (mml2015-format-error err)) @@ -674,6 +672,9 @@ by you.") mm-security-handle 'gnus-details "Quit.") nil)) (with-current-buffer pgg-output-buffer + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) (setq handles (mm-dissect-buffer t)) (mm-destroy-parts handle) (mm-set-handle-multipart-parameter @@ -688,7 +689,8 @@ by you.") handles (list handles))) (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Failed")))))) + mm-security-handle 'gnus-info "Failed") + (throw 'error handle)))))) (defun mml2015-pgg-clear-decrypt () (let ((pgg-errors-buffer mml2015-result-buffer)) @@ -701,6 +703,9 @@ by you.") (progn (erase-buffer) (insert-buffer pgg-output-buffer) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-info "OK")) (mm-set-handle-multipart-parameter @@ -736,11 +741,17 @@ by you.") (mm-insert-part signature)) (if (condition-case err (prog1 - (pgg-verify-region (point-min) (point-max) signature-file t) + (pgg-verify-region (point-min) (point-max) + signature-file t) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-details - (with-current-buffer pgg-output-buffer - (buffer-string)))) + (concat (with-current-buffer pgg-output-buffer + (buffer-string)) + (with-current-buffer pgg-errors-buffer + (buffer-string))))) (error (mm-set-handle-multipart-parameter mm-security-handle 'gnus-details (mml2015-format-error err)) @@ -753,21 +764,30 @@ by you.") (delete-file signature-file) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-info - (with-current-buffer pgg-output-buffer + (with-current-buffer pgg-errors-buffer (mml2015-gpg-extract-signature-details)))) (delete-file signature-file) (mm-set-handle-multipart-parameter - mm-security-handle 'gnus-info "Failed")))))) + mm-security-handle 'gnus-info "Failed"))))) + handle) (defun mml2015-pgg-clear-verify () - (let ((pgg-errors-buffer mml2015-result-buffer)) + (let ((pgg-errors-buffer mml2015-result-buffer) + (text (current-buffer))) (if (condition-case err (prog1 - (pgg-verify-region (point-min) (point-max) nil t) + (mm-with-unibyte-buffer + (insert-buffer text) + (pgg-verify-region (point-min) (point-max) nil t)) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t)) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-details - (with-current-buffer mml2015-result-buffer - (buffer-string)))) + (concat (with-current-buffer pgg-output-buffer + (buffer-string)) + (with-current-buffer pgg-errors-buffer + (buffer-string))))) (error (mm-set-handle-multipart-parameter mm-security-handle 'gnus-details (mml2015-format-error err)) @@ -778,7 +798,7 @@ by you.") nil)) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-info - (with-current-buffer pgg-output-buffer + (with-current-buffer pgg-errors-buffer (mml2015-gpg-extract-signature-details))) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-info "Failed")))) @@ -812,7 +832,8 @@ by you.") (message-options-get 'message-recipients) (message-options-set 'message-recipients (read-string "Recipients: "))) - "[ \f\t\n\r\v,]+")) + "[ \f\t\n\r\v,]+") + sign) (pop-to-buffer mml2015-result-buffer) (error "Encrypt error")) (delete-region (point-min) (point-max))