2000-11-18 Simon Josefsson <sj@extundo.com>
authorSimon Josefsson <jas@extundo.com>
Sat, 18 Nov 2000 20:59:20 +0000 (20:59 +0000)
committerSimon Josefsson <jas@extundo.com>
Sat, 18 Nov 2000 20:59:20 +0000 (20:59 +0000)
* mml2015.el (mml2015-mailcrypt-clear-verify): New function.
(mml2015-function-alist): Use it.

* mml-sec.el (mml-sign-alist): Update names.
(mml-encrypt-alist): Ditto.
(mml-secure-part-smime-sign): Moved to mml-smime.el
as `mml-smime-sign-query'.
(mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as
`mml-smime-get-file-cert'.
(mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as
`mml-smime-get-dns-cert'.
(mml-secure-part-smime-encrypt): Moved to mml-smime.el as
`mml-smime-encrypt-query'.
(mml-smime-sign-buffer): Use mml-smime-sign.
(mml-smime-encrypt-buffer): Use mml-smime-encrypt.

* mml-smime.el (mml-smime-sign): New function.
(mml-smime-encrypt):
(mml-smime-sign-query):
(mml-smime-get-file-cert):
(mml-smime-get-dns-cert):
(mml-smime-encrypt-query): Moved from mml-sec.el.

lisp/ChangeLog
lisp/mml-sec.el
lisp/mml-smime.el
lisp/mml2015.el

index 35a0493..20fb406 100644 (file)
@@ -1,3 +1,33 @@
+2000-11-18  Simon Josefsson  <sj@extundo.com>
+
+       * mml2015.el (mml2015-mailcrypt-clear-verify): New function.
+       (mml2015-function-alist): Use it.
+
+       * mml-sec.el (mml-sign-alist): Update names.
+       (mml-encrypt-alist): Ditto.
+       (mml-secure-part-smime-sign): Moved to mml-smime.el
+       as `mml-smime-sign-query'.
+       (mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as
+       `mml-smime-get-file-cert'.
+       (mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as
+       `mml-smime-get-dns-cert'.
+       (mml-secure-part-smime-encrypt): Moved to mml-smime.el as
+       `mml-smime-encrypt-query'.
+       (mml-smime-sign-buffer): Use mml-smime-sign.
+       (mml-smime-encrypt-buffer): Use mml-smime-encrypt.
+
+       * mml-smime.el (mml-smime-sign): New function.
+       (mml-smime-encrypt): 
+       (mml-smime-sign-query): 
+       (mml-smime-get-file-cert): 
+       (mml-smime-get-dns-cert): 
+       (mml-smime-encrypt-query): Moved from mml-sec.el.
+
+2000-11-16  Simon Josefsson  <sj@extundo.com>
+
+       * mml2015.el (mml2015-gpg-clear-verify): New function.
+       (mml2015-function-alist): Add it.
+
 2000-11-17 14:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * message.el (message-setup-fill-variables): Use
index 40fd25d..0d1dfee 100644 (file)
 
 (require 'smime)
 (require 'mml2015)
+(require 'mml-smime)
 (eval-when-compile (require 'cl))
 
 (defvar mml-sign-alist
-  '(("smime"     mml-smime-sign-buffer     mml-secure-part-smime-sign)
+  '(("smime"     mml-smime-sign-buffer     mml-smime-sign-query)
     ("pgpmime"   mml-pgpmime-sign-buffer   list))
   "Alist of MIME signer functions.")
 
@@ -36,7 +37,7 @@
   "Default sign method.")
 
 (defvar mml-encrypt-alist
-  '(("smime"     mml-smime-encrypt-buffer mml-secure-part-smime-encrypt)
+  '(("smime"     mml-smime-encrypt-buffer     mml-smime-encrypt-query)
     ("pgpmime"   mml-pgpmime-encrypt-buffer   list))
   "Alist of MIME encryption functions.")
 
 ;;; Security functions
 
 (defun mml-smime-sign-buffer (cont)
-  (or (smime-sign-buffer (cdr (assq 'keyfile cont)))
+  (or (mml-smime-sign cont)
       (error "Signing failed... inspect message logs for errors")))
 
 (defun mml-smime-encrypt-buffer (cont)
-  (let (certnames certfiles tmp file tmpfiles)
-    (while (setq tmp (pop cont))
-      (if (and (consp tmp) (eq (car tmp) 'certfile))
-         (push (cdr tmp) certnames)))
-    (while (setq tmp (pop certnames))
-      (if (not (and (not (file-exists-p tmp))
-                   (get-buffer tmp)))
-         (push tmp certfiles)
-       (setq file (make-temp-name mm-tmp-directory))
-       (with-current-buffer tmp
-         (write-region (point-min) (point-max) file))
-       (push file certfiles)
-       (push file tmpfiles)))
-    (if (smime-encrypt-buffer certfiles)
-       (while (setq tmp (pop tmpfiles))
-         (delete-file tmp))
-      (while (setq tmp (pop tmpfiles))
-       (delete-file tmp))
-      (error "Encryption failed... inspect message logs for errors"))))
+  (or (mml-smime-encrypt cont)
+      (error "Encryption failed... inspect message logs for errors")))
 
 (defun mml-pgpmime-sign-buffer (cont)
   (or (mml2015-sign cont)
   (or (mml2015-encrypt cont)
       (error "Encryption failed... inspect message logs for errors")))
 
-(defun mml-secure-part-smime-sign ()
-  (when (null smime-keys)
-    (customize-variable 'smime-keys)
-    (error "No S/MIME keys configured, use customize to add your key"))
-  (list 'keyfile
-       (if (= (length smime-keys) 1)
-           (cadar smime-keys)
-         (or (let ((from (cadr (funcall gnus-extract-address-components 
-                                        (or (save-excursion
-                                              (save-restriction
-                                                (message-narrow-to-headers)
-                                                (message-fetch-field "from")))
-                                            "")))))
-               (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))))))))
-
-(defun mml-secure-part-smime-encrypt-by-file ()
-  (ignore-errors
-    (list 'certfile (read-file-name
-                    "File with recipient's S/MIME certificate: "
-                    smime-certificate-directory nil t ""))))
-
-
-(defun mml-secure-part-smime-encrypt-by-dns ()
-  ;; todo: deal with comma separated multiple recipients
-  (let (result who bad cert)
-    (condition-case ()
-       (while (not result)
-         (setq who (read-from-minibuffer
-                    (format "%sLookup certificate for: " (or bad ""))
-                    (cadr (funcall gnus-extract-address-components 
-                                   (or (save-excursion
-                                         (save-restriction
-                                           (message-narrow-to-headers)
-                                           (message-fetch-field "to")))
-                                       "")))))
-         (if (setq cert (smime-cert-by-dns who))
-             (setq result (list 'certfile (buffer-name cert)))
-           (setq bad (format "`%s' not found. " who))))
-      (quit))
-    result))
-
-(defun mml-secure-part-smime-encrypt ()
-  ;; todo: add ldap support (xemacs ldap api?)
-  ;; todo: try dns/ldap automatically first, before prompting user
-  (let (certs done)
-    (while (not done)
-      (ecase (read (gnus-completing-read "dns" "Fetch certificate from"
-                                        '(("dns") ("file")) nil t))
-       (dns (setq certs (append certs
-                                (mml-secure-part-smime-encrypt-by-dns))))
-       (file (setq certs (append certs
-                                 (mml-secure-part-smime-encrypt-by-file)))))
-      (setq done (not (y-or-n-p "Add more recipients? "))))
-    certs))
-
 (defun mml-secure-part (method &optional sign)
   (save-excursion
     (let ((tags (funcall (nth 2 (assoc method (if sign mml-sign-alist
index 62e27d6..146ead4 100644 (file)
@@ -2,7 +2,7 @@
 ;; Copyright (c) 2000 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
-;; Keywords: Gnus, MIME, SMIME, MML
+;; Keywords: Gnus, MIME, S/MIME, MML
 
 ;; This file is a part of GNU Emacs.
 
 
 ;;; Commentary:
 
-;; todo: move s/mime code from mml-sec.el here.
-
 ;;; Code:
 
 (require 'smime)
 (require 'mm-decode)
 
+(defun mml-smime-sign (cont)
+  (smime-sign-buffer (cdr (assq 'keyfile cont))))
+
+(defun mml-smime-encrypt (cont)
+  (let (certnames certfiles tmp file tmpfiles)
+    ;; xxx tmp files are always an security issue
+    (while (setq tmp (pop cont))
+      (if (and (consp tmp) (eq (car tmp) 'certfile))
+         (push (cdr tmp) certnames)))
+    (while (setq tmp (pop certnames))
+      (if (not (and (not (file-exists-p tmp))
+                   (get-buffer tmp)))
+         (push tmp certfiles)
+       (setq file (make-temp-name mm-tmp-directory))
+       (with-current-buffer tmp
+         (write-region (point-min) (point-max) file))
+       (push file certfiles)
+       (push file tmpfiles)))
+    (if (smime-encrypt-buffer certfiles)
+       (progn
+         (while (setq tmp (pop tmpfiles))
+           (delete-file tmp))
+         t)
+      (while (setq tmp (pop tmpfiles))
+       (delete-file tmp))
+      nil)))
+
+(defun mml-smime-sign-query ()
+  ;; query information (what certificate) from user when MML tag is
+  ;; added, for use later by the signing process
+  (when (null smime-keys)
+    (customize-variable 'smime-keys)
+    (error "No S/MIME keys configured, use customize to add your key"))
+  (list 'keyfile
+       (if (= (length smime-keys) 1)
+           (cadar smime-keys)
+         (or (let ((from (cadr (funcall gnus-extract-address-components
+                                        (or (save-excursion
+                                              (save-restriction
+                                                (message-narrow-to-headers)
+                                                (message-fetch-field "from")))
+                                            "")))))
+               (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))))))))
+
+(defun mml-smime-get-file-cert ()
+  (ignore-errors
+    (list 'certfile (read-file-name
+                    "File with recipient's S/MIME certificate: "
+                    smime-certificate-directory nil t ""))))
+
+(defun mml-smime-get-dns-cert ()
+  ;; todo: deal with comma separated multiple recipients
+  (let (result who bad cert)
+    (condition-case ()
+       (while (not result)
+         (setq who (read-from-minibuffer
+                    (format "%sLookup certificate for: " (or bad ""))
+                    (cadr (funcall gnus-extract-address-components 
+                                   (or (save-excursion
+                                         (save-restriction
+                                           (message-narrow-to-headers)
+                                           (message-fetch-field "to")))
+                                       "")))))
+         (if (setq cert (smime-cert-by-dns who))
+             (setq result (list 'certfile (buffer-name cert)))
+           (setq bad (format "`%s' not found. " who))))
+      (quit))
+    result))
+
+(defun mml-smime-encrypt-query ()
+  ;; todo: add ldap support (xemacs ldap api?)
+  ;; todo: try dns/ldap automatically first, before prompting user
+  (let (certs done)
+    (while (not done)
+      (ecase (read (gnus-completing-read "dns" "Fetch certificate from"
+                                        '(("dns") ("file")) nil t))
+       (dns (setq certs (append certs
+                                (mml-smime-get-dns-cert))))
+       (file (setq certs (append certs
+                                 (mml-smime-get-file-cert)))))
+      (setq done (not (y-or-n-p "Add more recipients? "))))
+    certs))
+
 (defun mml-smime-verify (handle ctl)
   (with-current-buffer (mm-handle-multipart-original-buffer ctl)
     ;; xxx modifies buffer -- noone else uses the buffer, so what the heck
       (mm-set-handle-multipart-parameter 
        mm-security-handle 'gnus-info "Failed")
       (mm-set-handle-multipart-parameter
-       mm-security-handle 'gnus-details (with-current-buffer smime-details-buffer 
-                                         (buffer-string))))
+       mm-security-handle 'gnus-details 
+       (with-current-buffer smime-details-buffer 
+        (buffer-string))))
     handle))
 
 (defun mml-smime-verify-test (handle ctl)
index ff72f35..20ccdc4 100644 (file)
@@ -53,7 +53,7 @@
         mml2015-gpg-encrypt
         mml2015-gpg-verify
         mml2015-gpg-decrypt
-        nil
+        mml2015-gpg-clear-verify
         mml2015-gpg-clear-decrypt))
   "Alist of PGP/MIME functions.")
 
         mm-security-handle 'gnus-info "OK"))
       handle)))
 
+(defun mml2015-gpg-clear-verify ()
+  (if (condition-case err
+         (funcall mml2015-verify-function)
+       (error 
+        (mm-set-handle-multipart-parameter 
+         mm-security-handle 'gnus-details (cadr err)) 
+        nil)
+       (quit
+        (mm-set-handle-multipart-parameter 
+         mm-security-handle 'gnus-details "Quit.") 
+        nil))
+      (mm-set-handle-multipart-parameter 
+       mm-security-handle 'gnus-info "OK")
+    (mm-set-handle-multipart-parameter 
+     mm-security-handle 'gnus-info "Failed")))
+
 (defun mml2015-gpg-sign (cont)
   (let ((boundary 
         (funcall mml-boundary-function (incf mml-multipart-number)))