projects
/
gnus
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(gnus-summary-refer-thread): Implement a version that uses *-request-thread.
[gnus]
/
lisp
/
smime.el
diff --git
a/lisp/smime.el
b/lisp/smime.el
index
b2aa29d
..
e28c07f
100644
(file)
--- a/
lisp/smime.el
+++ b/
lisp/smime.el
@@
-1,25
+1,25
@@
;;; smime.el --- S/MIME support library
;;; smime.el --- S/MIME support library
-;; Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
+
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+;; 2009, 2010 Free Software Foundation, Inc.
;; Author: Simon Josefsson <simon@josefsson.org>
;; Keywords: SMIME X.509 PEM OpenSSL
;; This file is part of GNU Emacs.
;; Author: Simon Josefsson <simon@josefsson.org>
;; Keywords: SMIME X.509 PEM OpenSSL
;; 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 you
r
-;; 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, o
r
+;;
(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
+;; G
NU G
eneral Public License for more details.
;; You should have received a copy of the GNU General Public License
;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;; Commentary:
@@
-42,7
+42,7
@@
;; done on messages encoded in these formats. The terminology chosen
;; reflect this.
;;
;; done on messages encoded in these formats. The terminology chosen
;; reflect this.
;;
-;; The home of this file is in Gnus
CVS
, but also available from
+;; The home of this file is in Gnus, but also available from
;; http://josefsson.org/smime.html.
;;; Quick introduction:
;; http://josefsson.org/smime.html.
;;; Quick introduction:
@@
-63,7
+63,7
@@
;;
;; Now you should be able to sign messages! Create a buffer and write
;; something and run M-x smime-sign-buffer RET RET and you should see
;;
;; Now you should be able to sign messages! Create a buffer and write
;; something and run M-x smime-sign-buffer RET RET and you should see
-;; your message MIME armo
u
red and a signature. Encryption, M-x
+;; your message MIME armored and a signature. Encryption, M-x
;; smime-encrypt-buffer, should also work.
;;
;; To be able to verify messages you need to build up trust with
;; smime-encrypt-buffer, should also work.
;;
;; To be able to verify messages you need to build up trust with
@@
-119,9
+119,15
@@
;;; Code:
;;; Code:
+;; For Emacs <22.2 and XEmacs.
+(eval-and-compile
+ (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
(require 'dig)
(require 'dig)
-(require 'smime-ldap)
-(require 'password)
+
+(if (locate-library "password-cache")
+ (require 'password-cache)
+ (require 'password))
+
(eval-when-compile (require 'cl))
(eval-and-compile
(eval-when-compile (require 'cl))
(eval-and-compile
@@
-237,7
+243,7
@@
If nil, use system defaults."
If needed search base, binddn, passwd, etc. for the LDAP host
must be set in `ldap-host-parameters-alist'."
:type '(repeat (string :tag "Host name"))
If needed search base, binddn, passwd, etc. for the LDAP host
must be set in `ldap-host-parameters-alist'."
:type '(repeat (string :tag "Host name"))
- :version "23.
0
" ;; No Gnus
+ :version "23.
1
" ;; No Gnus
:group 'smime)
(defvar smime-details-buffer "*OpenSSL output*")
:group 'smime)
(defvar smime-details-buffer "*OpenSSL output*")
@@
-255,6
+261,7
@@
must be set in `ldap-host-parameters-alist'."
temporary-file-directory))))))
;; Password dialog function
temporary-file-directory))))))
;; Password dialog function
+(declare-function password-read-and-add "password-cache" (prompt &optional key))
(defun smime-ask-passphrase (&optional cache-key)
"Asks the passphrase to unlock the secret key.
(defun smime-ask-passphrase (&optional cache-key)
"Asks the passphrase to unlock the secret key.
@@
-296,7
+303,7
@@
key and certificate itself."
(smime-new-details-buffer)
(let* ((certfiles (and (cdr-safe keyfile) (cadr keyfile)))
(keyfile (or (car-safe keyfile) keyfile))
(smime-new-details-buffer)
(let* ((certfiles (and (cdr-safe keyfile) (cadr keyfile)))
(keyfile (or (car-safe keyfile) keyfile))
- (buffer (generate-new-buffer
(generate-new-buffer-name " *smime*")
))
+ (buffer (generate-new-buffer
" *smime*"
))
(passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (smime-make-temp-file "smime")))
(if passphrase
(passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (smime-make-temp-file "smime")))
(if passphrase
@@
-331,7
+338,7
@@
If encryption fails, the buffer is not modified. Region is assumed to
have proper MIME tags. CERTFILES is a list of filenames, each file
is expected to contain of a PEM encoded certificate."
(smime-new-details-buffer)
have proper MIME tags. CERTFILES is a list of filenames, each file
is expected to contain of a PEM encoded certificate."
(smime-new-details-buffer)
- (let ((buffer (generate-new-buffer
(generate-new-buffer-name " *smime*")
))
+ (let ((buffer (generate-new-buffer
" *smime*"
))
(tmpfile (smime-make-temp-file "smime")))
(prog1
(when (prog1
(tmpfile (smime-make-temp-file "smime")))
(prog1
(when (prog1
@@
-364,11
+371,9
@@
KEYFILE should contain a PEM encoded key and certificate."
(if keyfile
keyfile
(smime-get-key-with-certs-by-email
(if keyfile
keyfile
(smime-get-key-with-certs-by-email
- (completing-read
- (concat "Sign using which key? "
- (if smime-keys (concat "(default " (caar smime-keys) ") ")
- ""))
- smime-keys nil nil (car-safe (car-safe smime-keys))))))
+ (gnus-completing-read
+ "Sign using key"
+ smime-keys nil (car-safe (car-safe smime-keys))))))
(error "Signing failed"))))
(defun smime-encrypt-buffer (&optional certfiles buffer)
(error "Signing failed"))))
(defun smime-encrypt-buffer (&optional certfiles buffer)
@@
-421,8
+426,7
@@
Any details (stdout and stderr) are left in the buffer specified by
(insert-buffer-substring smime-details-buffer)
nil))
(insert-buffer-substring smime-details-buffer)
nil))
-(eval-when-compile
- (defvar from))
+(defvar from)
(defun smime-decrypt-region (b e keyfile)
"Decrypt S/MIME message in region between B and E with key in KEYFILE.
(defun smime-decrypt-region (b e keyfile)
"Decrypt S/MIME message in region between B and E with key in KEYFILE.
@@
-430,7
+434,7
@@
On success, replaces region with decrypted data and return non-nil.
Any details (stderr on success, stdout and stderr on error) are left
in the buffer specified by `smime-details-buffer'."
(smime-new-details-buffer)
Any details (stderr on success, stdout and stderr on error) are left
in the buffer specified by `smime-details-buffer'."
(smime-new-details-buffer)
- (let ((buffer (generate-new-buffer
(generate-new-buffer-name " *smime*")
))
+ (let ((buffer (generate-new-buffer
" *smime*"
))
CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (smime-make-temp-file "smime")))
(if passphrase
CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (smime-make-temp-file "smime")))
(if passphrase
@@
-495,11
+499,9
@@
in the buffer specified by `smime-details-buffer'."
(expand-file-name
(or keyfile
(smime-get-key-by-email
(expand-file-name
(or keyfile
(smime-get-key-by-email
- (completing-read
- (concat "Decipher using which key? "
- (if smime-keys (concat "(default " (caar smime-keys) ") ")
- ""))
- smime-keys nil nil (car-safe (car-safe smime-keys)))))))))
+ (gnus-completing-read
+ "Decipher using key"
+ smime-keys nil (car-safe (car-safe smime-keys)))))))))
;; Various operations
;; Various operations
@@
-587,11
+589,19
@@
A string or a list of strings is returned."
(defun smime-cert-by-ldap-1 (mail host)
"Get cetificate for MAIL from the ldap server at HOST."
(defun smime-cert-by-ldap-1 (mail host)
"Get cetificate for MAIL from the ldap server at HOST."
- (let ((ldapresult (smime-ldap-search (concat "mail=" mail)
- host '("userCertificate") nil))
+ (let ((ldapresult
+ (funcall
+ (if (featurep 'xemacs)
+ (progn
+ (require 'smime-ldap)
+ 'smime-ldap-search)
+ 'ldap-search)
+ (concat "mail=" mail)
+ host '("userCertificate") nil))
(retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
cert)
(retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
cert)
- (if (>= (length ldapresult) 1)
+ (if (and (>= (length ldapresult) 1)
+ (> (length (cadaar ldapresult)) 0))
(with-current-buffer retbuf
;; Certificates on LDAP servers _should_ be in DER format,
;; but there are some servers out there that distributes the
(with-current-buffer retbuf
;; Certificates on LDAP servers _should_ be in DER format,
;; but there are some servers out there that distributes the
@@
-642,6
+652,9
@@
A string or a list of strings is returned."
(define-key smime-mode-map "q" 'smime-exit)
(define-key smime-mode-map "f" 'smime-certificate-info))
(define-key smime-mode-map "q" 'smime-exit)
(define-key smime-mode-map "f" 'smime-certificate-info))
+(autoload 'gnus-run-mode-hooks "gnus-util")
+(autoload 'gnus-completing-read "gnus-util")
+
(defun smime-mode ()
"Major mode for browsing, viewing and fetching certificates.
(defun smime-mode ()
"Major mode for browsing, viewing and fetching certificates.
@@
-659,7
+672,8
@@
The following commands are available:
(use-local-map smime-mode-map)
(buffer-disable-undo)
(setq truncate-lines t)
(use-local-map smime-mode-map)
(buffer-disable-undo)
(setq truncate-lines t)
- (setq buffer-read-only t))
+ (setq buffer-read-only t)
+ (gnus-run-mode-hooks 'smime-mode-hook))
(defun smime-certificate-info (certfile)
(interactive "fCertificate file: ")
(defun smime-certificate-info (certfile)
(interactive "fCertificate file: ")
@@
-688,8
+702,7
@@
The following commands are available:
"Go to the SMIME buffer."
(interactive)
(unless (get-buffer smime-buffer)
"Go to the SMIME buffer."
(interactive)
(unless (get-buffer smime-buffer)
- (save-excursion
- (set-buffer (get-buffer-create smime-buffer))
+ (with-current-buffer (get-buffer-create smime-buffer)
(smime-mode)))
(smime-draw-buffer)
(switch-to-buffer smime-buffer))
(smime-mode)))
(smime-draw-buffer)
(switch-to-buffer smime-buffer))
@@
-709,5
+722,4
@@
The following commands are available:
(provide 'smime)
(provide 'smime)
-;;; arch-tag: e3f9b938-5085-4510-8a11-6625269c9a9e
;;; smime.el ends here
;;; smime.el ends here