[Mew-dist 07689] Re: route address

Motonori Nakamura motonori at example.com
1999年 2月 24日 (水) 18:38:26 JST


>>>>> On Wed, 24 Feb 1999 13:49:00 +0900, Tomoya Ida <tomoya.ida at example.com> said:

ida> 1.94b8 で To: に次のようなアドレスを指定すると,
ida>    test <@aaa.co.jp, at example.com:zzz at example.com>
ida> 送信エラーになります。
ida>    imput: ERROR: Unbalanced address quotes ('<', '>'): test <@aaa.co.jp

ida> RMAIL では OK なので imput の問題かと思いますが如何でしょうか。

見つかってしまいましたね。実は手抜きなんです。

RFC822bis ではこの形式は obsolete になるんですが、、、
と言って手抜きのままにしておくのはだめでしょうか:)

一応、これで直ると思います。

- motonori@ますますアドホック

*** Address.pm-	Wed Feb 10 08:43:30 1999
--- Address.pm	Wed Feb 24 18:36:42 1999
***************
*** 104,113 ****
      my ($addrout, $pureout, $groupsyntax) = ('', '', '');
      my ($friendly1, $friendly2, $c) = ('', '', '');
      my ($inquote, $incomment, $addrquote) = (0, 0, 0);
!     my ($gotpure, $groupcolon) = (0, 0);
      im_debug("fetch_addr(in): $addrin\n") if (&debug('addr'));
      $FOR_SMTP = (&progname =~ /imput/i) unless (defined($FOR_SMTP));
      $addrin = '' unless (defined($addrin));
      while ($addrin ne '') {
  	if ($addrin =~ /^([^\e"\\()<>:;,]+)(.*)/s) {
  	    $c = $1;
--- 104,114 ----
      my ($addrout, $pureout, $groupsyntax) = ('', '', '');
      my ($friendly1, $friendly2, $c) = ('', '', '');
      my ($inquote, $incomment, $addrquote) = (0, 0, 0);
!     my ($gotpure, $groupcolon, $route) = (0, 0, 0);
      im_debug("fetch_addr(in): $addrin\n") if (&debug('addr'));
      $FOR_SMTP = (&progname =~ /imput/i) unless (defined($FOR_SMTP));
      $addrin = '' unless (defined($addrin));
+     $route = 1 if ($addrin =~ /^\@/);
      while ($addrin ne '') {
  	if ($addrin =~ /^([^\e"\\()<>:;,]+)(.*)/s) {
  	    $c = $1;
***************
*** 128,134 ****
  	    ($c, $addrin) = unpack('a a*', $addrin);
  	}
  
! 	last if ($c eq ',' && !$inquote && !$incomment && !$groupcolon);
  	$friendly2 .= $c unless($addrquote);
  	if ($inquote) {
  	    $addrout .= $c;
--- 129,136 ----
  	    ($c, $addrin) = unpack('a a*', $addrin);
  	}
  
! 	last if ($c eq ',' && !$inquote && !$incomment && !$groupcolon
! 	         && !$route);
  	$friendly2 .= $c unless($addrquote);
  	if ($inquote) {
  	    $addrout .= $c;
***************
*** 171,180 ****
--- 173,184 ----
  	    $pureout = '';
  	    chop($friendly2) unless ($addrquote);
  	    $addrquote++;
+ 	    $route = 1 if ($addrin =~ /^\@/);
  	} elsif ($c eq '>') {
  	    $gotpure = 1;
  	    $pureout =~ s/^<//;
  	    $addrquote--;
+ 	    $route = 0;
  	} elsif ($c eq '\\') {
  	    $addrout .= $c;
  	    $pureout .= $c unless ($gotpure);
***************
*** 197,203 ****
  		$groupsyntax = 1;
  	    }
  	} elsif ($c eq ',') {
! 	    last unless ($groupcolon);
  	}
  	$addrout .= $c;
  	$pureout .= $c unless ($gotpure);
--- 201,207 ----
  		$groupsyntax = 1;
  	    }
  	} elsif ($c eq ',') {
! 	    last unless ($groupcolon || $route);
  	}
  	$addrout .= $c;
  	$pureout .= $c unless ($gotpure);




Mew-dist メーリングリストの案内