Gnus development mailing list
 help / color / mirror / Atom feed
From: "Arne Jørgensen" <arne@arnested.dk>
Subject: Other IDN-fixes (was: Hashcash-generation/check for IDN-domains)
Date: Tue, 27 Sep 2005 16:29:09 +0200	[thread overview]
Message-ID: <87slvqvb2i.fsf@arnested.dk> (raw)
In-Reply-To: <87y85iejat.fsf@koldfront.dk>

[-- Attachment #1: Type: text/plain, Size: 1385 bytes --]

asjo@koldfront.dk (Adam Sjøgren) writes:

> I (sort-of) recently acquired the domain 'sjøgren.org'.
>
> I just tried sending an email to adam@sjøgren.org - Gnus nicely asked
> me if it should translate sjøgren.org to xn--sjgren-cya.org, and I
> happily accepted.

Your posting just reminded me that I've had and used some fixes for
the IDN-handling for some weeks now (since i bought jøssen.dk).

The patch doesn't solve your problem as far as I can tell.

It fixes the following things though:

1. Decoding articles with more than one IDN-address in the same field
   (i.e. "To: adam@sjøgren.dk, arne@jøssen.dk")

   Currently only the last address is decoded, but the patch fixes a
   regexp in `article-decode-idna-rhs' so all are handled.

2. Also encode and decode address in Reply-To:, Mail-Reply-To: and
   Mail-Followup-To:.

3. When `message-use-idna is 'ask you will be asked whether to replace
   the same idna domain once for every time it is in a header (i.e.
   twice about jøssen.dk for "To: arne@jøssen.dk, palle@jøssen.dk")
   but the replacement is done the first time for both/all.

   The patch only asks once for the same idna domain in each header,
   but will still ask twice about jøssen.dk if it is present in both
   say To: and Reply-To: (that would require a bigger rewrite of the
   idna handling).

Kind regards,
-- 
Arne Jørgensen <http://arnested.dk/>


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: idna.patch --]
[-- Type: text/x-patch, Size: 4647 bytes --]

Index: lisp/ChangeLog
===================================================================
RCS file: /usr/local/cvsroot/gnus/lisp/ChangeLog,v
retrieving revision 7.819
diff -u -p -r7.819 ChangeLog
--- lisp/ChangeLog	27 Sep 2005 02:16:37 -0000	7.819
+++ lisp/ChangeLog	27 Sep 2005 14:25:06 -0000
@@ -1,3 +1,18 @@
+2005-09-27  Arne J^[,Ax^[(Brgensen  <arne@arnested.dk>
+
+	* message.el (message-remove-duplicates): New function.
+	Implementation borrowed from `gnus-remove-duplicates'.
+	(message-idna-to-ascii-rhs): Also encode idna addresses in
+	Reply-To:, Mail-Reply-To: and Mail-Followup-To:.
+	(message-idna-to-ascii-rhs-1): When `message-use-idna' is 'ask
+	only ask about the same idna domain once per header and also tell
+	in what header to replace the idna domain.
+
+	* gnus-art.el (article-decode-idna-rhs): Also decode idna
+	addresses in Reply-To:, Mail-Reply-To: and Mail-Followup-To:.
+	(article-decode-idna-rhs): Fix regexp so that all idna-address in
+	a header is decoded and not just the last one.
+
 2005-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-art.el (gnus-mime-display-single): Don't modify text if it
Index: lisp/gnus-art.el
===================================================================
RCS file: /usr/local/cvsroot/gnus/lisp/gnus-art.el,v
retrieving revision 7.127
diff -u -p -r7.127 gnus-art.el
--- lisp/gnus-art.el	27 Sep 2005 02:16:36 -0000	7.127
+++ lisp/gnus-art.el	27 Sep 2005 14:25:11 -0000
@@ -2385,20 +2385,22 @@ If PROMPT (the prefix), prompt for a cod
 (autoload 'idna-to-unicode "idna")
 
 (defun article-decode-idna-rhs ()
-  "Decode IDNA strings in RHS in From:, To: and Cc: headers in current buffer."
+  "Decode IDNA strings in RHS in various headers in current buffer.
+The following headers are decoded: From:, To:, Cc:, Reply-To:,
+Mail-Reply-To: and Mail-Followup-To:."
   (when gnus-use-idna
     (save-restriction
       (let ((inhibit-point-motion-hooks t)
 	    (inhibit-read-only t))
 	(article-narrow-to-head)
 	(goto-char (point-min))
-	(while (re-search-forward "@.*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t)
+	(while (re-search-forward "@[^ \t\n\r,>]*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t)
 	  (let (ace unicode)
 	    (when (save-match-data
 		    (and (setq ace (match-string 1))
 			 (save-excursion
 			   (and (re-search-backward "^[^ \t]" nil t)
-				(looking-at "From\\|To\\|Cc")))
+				(looking-at "From\\|To\\|Cc\\|Reply-To\\|Mail-Reply-To\\|Mail-Followup-To")))
 			 (setq unicode (idna-to-unicode ace))))
 	      (unless (string= ace unicode)
 		(replace-match unicode nil nil nil 1)))))))))
Index: lisp/message.el
===================================================================
RCS file: /usr/local/cvsroot/gnus/lisp/message.el,v
retrieving revision 7.95
diff -u -p -r7.95 message.el
--- lisp/message.el	25 Sep 2005 21:27:48 -0000	7.95
+++ lisp/message.el	27 Sep 2005 14:25:16 -0000
@@ -2088,6 +2088,14 @@ With prefix-argument just set Follow-Up,
 
 ;;; End of functions adopted from `message-utils.el'.
 
+(defun message-remove-duplicates (list)
+  (let (new)
+    (while list
+      (or (member (car list) new)
+	  (setq new (cons (car list) new)))
+      (setq list (cdr list)))
+    (nreverse new)))
+
 (defun message-remove-header (header &optional is-regexp first reverse)
   "Remove HEADER in the narrowed buffer.
 If IS-REGEXP, HEADER is a regular expression.
@@ -5027,13 +5035,15 @@ subscribed address (and not the addition
   (let ((field (message-fetch-field header))
 	rhs ace  address)
     (when field
-      (dolist (address (mail-header-parse-addresses field))
-	(setq address (car address)
-	      rhs (downcase (or (cadr (split-string address "@")) ""))
-	      ace (downcase (idna-to-ascii rhs)))
+      (dolist (rhs 
+	       (message-remove-duplicates
+		(mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) ""))
+			(mapcar 'downcase
+				(mapcar 'car (mail-header-parse-addresses field))))))
+	(setq ace (downcase (idna-to-ascii rhs)))
 	(when (and (not (equal rhs ace))
 		   (or (not (eq message-use-idna 'ask))
-		       (y-or-n-p (format "Replace %s with %s? " rhs ace))))
+		       (y-or-n-p (format "Replace %s with %s in %s:? " rhs ace header))))
 	  (goto-char (point-min))
 	  (while (re-search-forward (concat "^" header ":") nil t)
 	    (message-narrow-to-field)
@@ -5053,6 +5063,8 @@ See `message-idna-encode'."
 	(message-idna-to-ascii-rhs-1 "From")
 	(message-idna-to-ascii-rhs-1 "To")
 	(message-idna-to-ascii-rhs-1 "Reply-To")
+	(message-idna-to-ascii-rhs-1 "Mail-Reply-To")
+	(message-idna-to-ascii-rhs-1 "Mail-Followup-To")
 	(message-idna-to-ascii-rhs-1 "Cc")))))
 
 (defun message-generate-headers (headers)

  reply	other threads:[~2005-09-27 14:29 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-27 13:23 Hashcash-generation/check for IDN-domains Adam Sjøgren
2005-09-27 14:29 ` Arne Jørgensen [this message]
2005-09-27 15:14   ` Other IDN-fixes Simon Josefsson
2005-09-27 15:09 ` Hashcash-generation/check for IDN-domains Simon Josefsson
2005-09-27 15:31   ` Arne Jørgensen
2005-09-27 15:54   ` Adam Sjøgren
2005-09-28  9:40     ` Simon Josefsson
2005-09-28  9:57       ` Adam Sjøgren
2005-09-29 13:36         ` Simon Josefsson
2005-09-29 14:35           ` Adam Sjøgren
2005-09-30  0:19             ` Simon Josefsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87slvqvb2i.fsf@arnested.dk \
    --to=arne@arnested.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).