2000-11-19 12:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
authorShengHuo ZHU <zsh@cs.rochester.edu>
Sun, 19 Nov 2000 16:47:11 +0000 (16:47 +0000)
committerShengHuo ZHU <zsh@cs.rochester.edu>
Sun, 19 Nov 2000 16:47:11 +0000 (16:47 +0000)
* gnus-art.el (article-verify-x-pgp-sig): Check whether
original-article-buffer exists.

* rfc2047.el (rfc2047-q-encoding-alist): Match Resent-.
(rfc2047-header-encoding-alist): Addresses are different from text.
(rfc2047-encode-message-header): Ditto.
(rfc2047-dissect-region): Extra parameter.
(rfc2047-encode-region): Ditto.
(rfc2047-encode-string): Ditto.

lisp/ChangeLog
lisp/gnus-art.el
lisp/rfc2047.el

index ea019ca..4fd6a96 100644 (file)
@@ -1,3 +1,15 @@
+2000-11-19 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-verify-x-pgp-sig): Check whether
+       original-article-buffer exists.
+
+       * rfc2047.el (rfc2047-q-encoding-alist): Match Resent-.
+       (rfc2047-header-encoding-alist): Addresses are different from text.
+       (rfc2047-encode-message-header): Ditto.
+       (rfc2047-dissect-region): Extra parameter.
+       (rfc2047-encode-region): Ditto.
+       (rfc2047-encode-string): Ditto.
+
 2000-11-19 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-uu.el (mm-uu-pgp-encrypted-extract-1): New function.
index e93483a..ef29979 100644 (file)
@@ -2570,72 +2570,73 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 (defun article-verify-x-pgp-sig ()
   "Verify X-PGP-Sig."
   (interactive)
-  (let ((sig (with-current-buffer gnus-original-article-buffer
-              (gnus-fetch-field "X-PGP-Sig")))
-       items info headers)
-    (when (and sig (mm-uu-pgp-signed-test))
-      (with-temp-buffer
-       (insert-buffer gnus-original-article-buffer)
-       (setq items (split-string sig))
-       (message-narrow-to-head)
-       (let ((inhibit-point-motion-hooks t)
-             (case-fold-search t))
-         ;; Don't verify multiple headers.
-         (setq headers (mapconcat (lambda (header)
-                                    (concat header ": " 
-                                            (mail-fetch-field header) "\n"))
-                                  (split-string (nth 1 items) ",") "")))
-       (delete-region (point-min) (point-max))
-       (insert "-----BEGIN PGP SIGNED MESSAGE-----\n\n")
-       (insert "X-Signed-Headers: " (nth 1 items) "\n")
-       (insert headers)
-       (widen)
-       (forward-line)
-       (while (not (eobp))
-         (if (looking-at "^-")
-             (insert "- "))
-         (forward-line))
-       (insert "\n-----BEGIN PGP SIGNATURE-----\n")
-       (insert "Version: " (car items) "\n\n")
-       (insert (mapconcat 'identity (cddr items) "\n"))
-       (insert "\n-----END PGP SIGNATURE-----\n")
-       (let ((mm-security-handle (list (format "multipart/signed"))))
-         (mml2015-clean-buffer)
-         (let ((coding-system-for-write (or gnus-newsgroup-charset
-                                            'iso-8859-1)))
-           (funcall (mml2015-clear-verify-function)))
-         (setq info 
-               (or (mm-handle-multipart-ctl-parameter 
-                    mm-security-handle 'gnus-details)
-                   (mm-handle-multipart-ctl-parameter 
-                    mm-security-handle 'gnus-info)))))
-      (when info
-       (let (buffer-read-only bface eface)
-         (save-restriction
+  (if (gnus-buffer-live-p gnus-original-article-buffer)
+      (let ((sig (with-current-buffer gnus-original-article-buffer
+                  (gnus-fetch-field "X-PGP-Sig")))
+           items info headers)
+       (when (and sig (mm-uu-pgp-signed-test))
+         (with-temp-buffer
+           (insert-buffer gnus-original-article-buffer)
+           (setq items (split-string sig))
            (message-narrow-to-head)
-           (goto-char (point-max))
-           (forward-line -1)
-           (setq bface (get-text-property (gnus-point-at-bol) 'face)
-                 eface (get-text-property (1- (gnus-point-at-eol)) 'face))
-           (message-remove-header "X-Gnus-PGP-Verify")
-           (if (re-search-forward "^X-PGP-Sig:" nil t)
-               (forward-line)
-             (goto-char (point-max)))
-           (narrow-to-region (point) (point))
-           (insert "X-Gnus-PGP-Verify: " info "\n")
-           (goto-char (point-min))
+           (let ((inhibit-point-motion-hooks t)
+                 (case-fold-search t))
+             ;; Don't verify multiple headers.
+             (setq headers (mapconcat (lambda (header)
+                                        (concat header ": " 
+                                                (mail-fetch-field header) "\n"))
+                                      (split-string (nth 1 items) ",") "")))
+           (delete-region (point-min) (point-max))
+           (insert "-----BEGIN PGP SIGNED MESSAGE-----\n\n")
+           (insert "X-Signed-Headers: " (nth 1 items) "\n")
+           (insert headers)
+           (widen)
            (forward-line)
            (while (not (eobp))
-             (if (not (looking-at "^[ \t]"))
-                 (insert " "))
+             (if (looking-at "^-")
+                 (insert "- "))
              (forward-line))
-           ;; Do highlighting.
-           (goto-char (point-min))
-           (when (looking-at "\\([^:]+\\): *")
-             (put-text-property (match-beginning 1) (1+ (match-end 1))
-                                'face bface)
-             (put-text-property (match-end 0) (point-max)
-                                'face eface))))))))
+           (insert "\n-----BEGIN PGP SIGNATURE-----\n")
+           (insert "Version: " (car items) "\n\n")
+           (insert (mapconcat 'identity (cddr items) "\n"))
+           (insert "\n-----END PGP SIGNATURE-----\n")
+           (let ((mm-security-handle (list (format "multipart/signed"))))
+             (mml2015-clean-buffer)
+             (let ((coding-system-for-write (or gnus-newsgroup-charset
+                                                'iso-8859-1)))
+               (funcall (mml2015-clear-verify-function)))
+             (setq info 
+                   (or (mm-handle-multipart-ctl-parameter 
+                        mm-security-handle 'gnus-details)
+                       (mm-handle-multipart-ctl-parameter 
+                        mm-security-handle 'gnus-info)))))
+         (when info
+           (let (buffer-read-only bface eface)
+             (save-restriction
+               (message-narrow-to-head)
+               (goto-char (point-max))
+               (forward-line -1)
+               (setq bface (get-text-property (gnus-point-at-bol) 'face)
+                     eface (get-text-property (1- (gnus-point-at-eol)) 'face))
+               (message-remove-header "X-Gnus-PGP-Verify")
+               (if (re-search-forward "^X-PGP-Sig:" nil t)
+                   (forward-line)
+                 (goto-char (point-max)))
+               (narrow-to-region (point) (point))
+               (insert "X-Gnus-PGP-Verify: " info "\n")
+               (goto-char (point-min))
+               (forward-line)
+               (while (not (eobp))
+                 (if (not (looking-at "^[ \t]"))
+                     (insert " "))
+                 (forward-line))
+               ;; Do highlighting.
+               (goto-char (point-min))
+               (when (looking-at "\\([^:]+\\): *")
+                 (put-text-property (match-beginning 1) (1+ (match-end 1))
+                                    'face bface)
+                 (put-text-property (match-end 0) (point-max)
+                                    'face eface)))))))))
 
 (eval-and-compile
   (mapcar
index 081da41..529e211 100644 (file)
@@ -38,6 +38,8 @@
 (defvar rfc2047-header-encoding-alist
   '(("Newsgroups" . nil)
     ("Message-ID" . nil)
+    ("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\)" .
+     "-A-Za-z0-9!*+/=_")
     (t . mime))
   "*Header/encoding method alist.
 The list is traversed sequentially.  The keys can either be
@@ -49,7 +51,8 @@ The values can be:
 2) `mime', in which case the header will be encoded according to RFC2047;
 3) a charset, in which case it will be encoded as that charset;
 4) `default', in which case the field will be encoded as the rest
-   of the article.")
+   of the article.
+5) a string, like `mime', expect for using it as word-chars.")
 
 (defvar rfc2047-charset-encoding-alist
   '((us-ascii . nil)
@@ -82,7 +85,8 @@ Valid encodings are nil, `Q' and `B'.")
   "Alist of RFC2047 encodings to encoding functions.")
 
 (defvar rfc2047-q-encoding-alist
-  '(("\\(From\\|Cc\\|To\\|Bcc\||Reply-To\\):" . "-A-Za-z0-9!*+/") 
+  '(("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\):" 
+     . "-A-Za-z0-9!*+/" )
     ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
     ;; Avoid using 8bit characters. Some versions of Emacs has bug!
     ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
@@ -137,6 +141,8 @@ Should be called narrowed to the head of the message."
                (setq alist nil
                      method (cdr elem))))
            (cond
+            ((stringp method)
+             (rfc2047-encode-region (point-min) (point-max) method))
             ((eq method 'mime)
              (rfc2047-encode-region (point-min) (point-max)))
             ((eq method 'default)
@@ -176,11 +182,12 @@ Should be called narrowed to the head of the message."
        (setq found t)))
     found))
 
-(defun rfc2047-dissect-region (b e)
+(defun rfc2047-dissect-region (b e &optional word-chars)
   "Dissect the region between B and E into words."
-  (let ((word-chars "-A-Za-z0-9!*+/") 
-       ;; Not using ietf-drums-specials-token makes life simple.
-       mail-parse-mule-charset
+  (unless word-chars
+    ;; Anything except most CTLs, WSP
+    (setq word-chars "\010\012\014\041-\177"))
+  (let (mail-parse-mule-charset
        words point current 
        result word)
     (save-restriction
@@ -230,9 +237,9 @@ Should be called narrowed to the head of the message."
        (setq word (pop words))))
     result))
 
-(defun rfc2047-encode-region (b e)
+(defun rfc2047-encode-region (b e &optional word-chars)
   "Encode all encodable words in REGION."
-  (let ((words (rfc2047-dissect-region b e)) word)
+  (let ((words (rfc2047-dissect-region b e word-chars)) word)
     (save-restriction
       (narrow-to-region b e)
       (delete-region (point-min) (point-max))
@@ -252,11 +259,11 @@ Should be called narrowed to the head of the message."
                          (cdr word))))
       (rfc2047-fold-region (point-min) (point-max)))))
 
-(defun rfc2047-encode-string (string)
+(defun rfc2047-encode-string (string &optional word-chars)
   "Encode words in STRING."
   (with-temp-buffer
     (insert string)
-    (rfc2047-encode-region (point-min) (point-max))
+    (rfc2047-encode-region (point-min) (point-max) word-chars)
     (buffer-string)))
 
 (defun rfc2047-encode (b e charset)