Index: lisp/mml-sec.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/mml-sec.el,v retrieving revision 1.8 diff -u -r1.8 mml-sec.el --- lisp/mml-sec.el 2001/11/12 21:33:12 1.8 +++ lisp/mml-sec.el 2002/01/19 08:07:04 @@ -127,6 +127,61 @@ (interactive) (mml-secure-part "smime")) +;; defuns that add the proper <#secure ...> tag to the top of the message body +(defun mml-secure-message (method &optional sign) + (let ((mode (if sign "sign" "encrypt")) + insert-loc) + (mml-unsecure-message) + (save-excursion + (goto-char (point-max)) + (cond ((re-search-backward + (concat "^" (regexp-quote mail-header-separator) "\n") nil t) + (goto-char (setq insert-loc (match-end 0))) + (unless (looking-at "<#secure") + (mml-insert-tag + 'secure 'method method 'mode mode))) + (t (error + "The message is corrupted. No mail header separator")))) + (when (eql insert-loc (point)) + (forward-line 1)))) + +(defun mml-unsecure-message () + (interactive) + (save-excursion + (goto-char (point-max)) + (when (re-search-backward "^<#secure.*>\n" nil t) + (kill-region (match-beginning 0) (match-end 0))))) + +(defun mml-secure-message-sign-smime () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "smime" 'sign)) + +(defun mml-secure-message-sign-pgp () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "pgp" 'sign)) + +(defun mml-secure-message-sign-pgpmime () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "pgpmime" 'sign)) + +(defun mml-secure-message-encrypt-smime () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "smime")) + +(defun mml-secure-message-encrypt-pgp () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "pgp")) + +(defun mml-secure-message-encrypt-pgpmime () + "Add MML tag to encrypt/sign the entire message." + (interactive) + (mml-secure-message "pgpmime")) + (provide 'mml-sec) ;;; mml-sec.el ends here Index: lisp/mml.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/mml.el,v retrieving revision 6.47 diff -u -r6.47 mml.el --- lisp/mml.el 2002/01/12 00:55:06 6.47 +++ lisp/mml.el 2002/01/19 08:07:05 @@ -143,6 +143,34 @@ (while (and (not (eobp)) (not (looking-at "<#/multipart"))) (cond + ((looking-at "<#secure") + ;; The secure part is essentially a meta-meta tag, which + ;; expands to either a part tag if there are no other parts in + ;; the document or a multipart tag if there are other parts + ;; included in the message + (let* (secure-mode + (taginfo (mml-read-tag)) + (recipient (cdr (assq 'recipient taginfo)))) + (save-excursion + (if + (re-search-forward + "^<#\\(/\\)?\\(multipart\\|part\\|external\\|mml\\)." nil t) + (setq secure-mode "multipart") + (setq secure-mode "part"))) + (save-excursion + (goto-char (point-min)) + (re-search-forward "<#secure.*>")) + (delete-region (match-beginning 0) (match-end 0)) + (forward-char -1) + (mml-insert-tag secure-mode + (cdr (assq 'mode taginfo)) + (cdr (assq 'method taginfo)) + (and recipient 'recipient) + recipient)) + (delete-backward-char 1) + ;; restart the parse + (goto-char (point-min))) + ((looking-at "<#multipart") (push (nconc (mml-read-tag) (mml-parse-1)) struct)) ((looking-at "<#external") @@ -750,12 +778,12 @@ (encrypt (make-sparse-keymap)) (map (make-sparse-keymap)) (main (make-sparse-keymap))) - (define-key sign "p" 'mml-secure-sign-pgpmime) - (define-key sign "o" 'mml-secure-sign-pgp) - (define-key sign "s" 'mml-secure-sign-smime) - (define-key encrypt "p" 'mml-secure-encrypt-pgpmime) - (define-key encrypt "o" 'mml-secure-encrypt-pgp) - (define-key encrypt "s" 'mml-secure-encrypt-smime) + (define-key sign "p" 'mml-secure-message-sign-pgpmime) + (define-key sign "o" 'mml-secure-message-sign-pgp) + (define-key sign "s" 'mml-secure-message-sign-smime) + (define-key encrypt "p" 'mml-secure-message-encrypt-pgpmime) + (define-key encrypt "o" 'mml-secure-message-encrypt-pgp) + (define-key encrypt "s" 'mml-secure-message-encrypt-smime) (define-key map "f" 'mml-attach-file) (define-key map "b" 'mml-attach-buffer) (define-key map "e" 'mml-attach-external) @@ -782,12 +810,12 @@ ["Attach External" mml-attach-external t] ["Insert Part" mml-insert-part t] ["Insert Multipart" mml-insert-multipart t] - ["PGP/MIME Sign" mml-secure-sign-pgpmime t] - ["PGP/MIME Encrypt" mml-secure-encrypt-pgpmime t] - ["PGP Sign" mml-secure-sign-pgp t] - ["PGP Encrypt" mml-secure-encrypt-pgp t] - ["S/MIME Sign" mml-secure-sign-smime t] - ["S/MIME Encrypt" mml-secure-encrypt-smime t] + ["PGP/MIME Sign" mml-secure-message-sign-pgpmime t] + ["PGP/MIME Encrypt" mml-secure-message-encrypt-pgpmime t] + ["PGP Sign" mml-secure-message-sign-pgp t] + ["PGP Encrypt" mml-secure-message-encrypt-pgp t] + ["S/MIME Sign" mml-secure-message-sign-smime t] + ["S/MIME Encrypt" mml-secure-message-encrypt-smime t] ;;["Narrow" mml-narrow-to-part t] ["Quote MML" mml-quote-region t] ["Validate MML" mml-validate t]