X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmml-smime.el;h=62e742f93a152a873aac30b3b4e106e1b1a46a33;hb=a07fef39c45c3c3c77cafef422daca2460f34882;hp=c2ab25725cffbc99a5ef14375aa273da8de138de;hpb=dc931af3c861abf745e14ab57b727d47879461e8;p=gnus diff --git a/lisp/mml-smime.el b/lisp/mml-smime.el index c2ab25725..62e742f93 100644 --- a/lisp/mml-smime.el +++ b/lisp/mml-smime.el @@ -1,32 +1,34 @@ ;;; mml-smime.el --- S/MIME support for MML ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: Gnus, MIME, S/MIME, MML ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published -;; by the Free Software Foundation; either version 2, or (at your -;; option) any later version. +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. -;; GNU Emacs is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: ;;; Code: +;; For Emacs < 22.2. +(eval-and-compile + (unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))) + (eval-when-compile (require 'cl)) (require 'smime) @@ -51,11 +53,6 @@ mml-smime-epg-verify mml-smime-epg-verify-test))) -(defcustom mml-smime-verbose mml-secure-verbose - "If non-nil, ask the user about the current operation more verbosely." - :group 'mime-security - :type 'boolean) - (defcustom mml-smime-cache-passphrase mml-secure-cache-passphrase "If t, cache passphrase." :group 'mime-security @@ -142,6 +139,8 @@ Whether the passphrase is cached at all is controlled by nil)) (goto-char (point-max))) +(defvar gnus-extract-address-components) + (defun mml-smime-openssl-sign-query () ;; query information (what certificate) from user when MML tag is ;; added, for use later by the signing process @@ -162,10 +161,10 @@ Whether the passphrase is cached at all is controlled by ""))))) (and from (smime-get-key-by-email from))) (smime-get-key-by-email - (completing-read "Sign this part with what signature? " - smime-keys nil nil - (and (listp (car-safe smime-keys)) - (caar smime-keys)))))))) + (gnus-completing-read "Sign this part with what signature" + smime-keys nil nil + (and (listp (car-safe smime-keys)) + (caar smime-keys)))))))) (defun mml-smime-get-file-cert () (ignore-errors @@ -214,13 +213,16 @@ Whether the passphrase is cached at all is controlled by (quit)) result)) +(autoload 'gnus-completing-read "gnus-util") + (defun mml-smime-openssl-encrypt-query () ;; todo: try dns/ldap automatically first, before prompting user (let (certs done) (while (not done) - (ecase (read (gnus-completing-read-with-default - "ldap" "Fetch certificate from" - '(("dns") ("ldap") ("file")) nil t)) + (ecase (read (gnus-completing-read + "Fetch certificate from" + '(("dns") ("ldap") ("file")) t nil nil + "ldap")) (dns (setq certs (append certs (mml-smime-get-dns-cert)))) (ldap (setq certs (append certs @@ -298,13 +300,13 @@ Whether the passphrase is cached at all is controlled by (defun mml-smime-openssl-verify-test (handle ctl) smime-openssl-program) -(eval-and-compile - (autoload 'epg-make-context "epg")) +(defvar epg-user-id-alist) +(defvar epg-digest-algorithm-alist) +(defvar inhibit-redisplay) +(defvar password-cache-expiry) (eval-when-compile - (defvar epg-user-id-alist) - (defvar epg-digest-algorithm-alist) - (defvar inhibit-redisplay) + (autoload 'epg-make-context "epg") (autoload 'epg-context-set-armor "epg") (autoload 'epg-context-set-signers "epg") (autoload 'epg-context-result-for "epg") @@ -321,12 +323,6 @@ Whether the passphrase is cached at all is controlled by (autoload 'epg-expand-group "epg-config") (autoload 'epa-select-keys "epa")) -(eval-when-compile - (defvar password-cache-expiry) - (autoload 'password-read "password") - (autoload 'password-cache-add "password") - (autoload 'password-cache-remove "password")) - (defvar mml-smime-epg-secret-key-id-list nil) (defun mml-smime-epg-passphrase-callback (context key-id ignore) @@ -350,6 +346,10 @@ Whether the passphrase is cached at all is controlled by (cons key-id mml-smime-epg-secret-key-id-list)) (copy-sequence passphrase))))) +(declare-function epg-key-sub-key-list "ext:epg" (key)) +(declare-function epg-sub-key-capability "ext:epg" (sub-key)) +(declare-function epg-sub-key-validity "ext:epg" (sub-key)) + (defun mml-smime-epg-find-usable-key (keys usage) (catch 'found (while keys @@ -362,6 +362,12 @@ Whether the passphrase is cached at all is controlled by (setq pointer (cdr pointer)))) (setq keys (cdr keys))))) +(autoload 'mml-compute-boundary "mml") + +;; We require mm-decode, which requires mm-bodies, which autoloads +;; message-options-get (!). +(declare-function message-options-set "message" (symbol value)) + (defun mml-smime-epg-sign (cont) (let* ((inhibit-redisplay t) (context (epg-make-context 'CMS)) @@ -371,7 +377,7 @@ Whether the passphrase is cached at all is controlled by (or (message-options-get 'mml-smime-epg-signers) (message-options-set 'mml-smime-epg-signers - (if mml-smime-verbose + (if (eq mm-sign-option 'guided) (epa-select-keys context "\ Select keys for signing. If no one is selected, default secret key is used. " @@ -452,7 +458,7 @@ Content-Disposition: attachment; filename=smime.p7s (message-options-set 'message-recipients (read-string "Recipients: "))) "[ \f\t\n\r\v,]+")))) - (if mml-smime-verbose + (if (eq mm-encrypt-option 'guided) (setq recipients (epa-select-keys context "\ Select recipients for encryption. @@ -510,10 +516,14 @@ Content-Disposition: attachment; filename=smime.p7m ctl 'protocol) "application/pkcs7-signature") t))) - (null (setq signature (mm-find-part-by-type - (cdr handle) - "application/pkcs7-signature" - nil t)))) + (null (setq signature (or (mm-find-part-by-type + (cdr handle) + "application/pkcs7-signature" + nil t) + (mm-find-part-by-type + (cdr handle) + "application/x-pkcs7-signature" + nil t))))) (mm-set-handle-multipart-parameter mm-security-handle 'gnus-info "Corrupted") (throw 'error handle)) @@ -540,5 +550,4 @@ Content-Disposition: attachment; filename=smime.p7m (provide 'mml-smime) -;;; arch-tag: f1bf94d4-f2cd-4c6f-b059-ad69492817e2 ;;; mml-smime.el ends here