[Mew-dist 1739] Re: concatination of partial messages (patch for IM-65)

Motonori Nakamura motonori at example.com
1997年 8月 29日 (金) 07:13:43 JST


>>>>> On Thu, 28 Aug 1997 18:12:27 +0900, Kiwame TOKAI (東海研) <tokai at example.com> said:

tokai> Content-Type: headerが複数行になっていて、partial部の記述が2行
tokai> 目以降だとうまく行きません。

確かに、そうでした。

せっかく、scan 用にヘッダ解析しているので、それを利用するように
しました。ただ、noscan の場合でも Scan.pm を require することに
なりますが、imget は 99.47% の確率で scan つきで実行されるので、
良いことにしましょう。

# imput で SMTP の際にエラーになった場合のレポートルーチンに
# 問題があったので、それの fix も含んでいます。

- motonori@数字を信じちゃダメよ


--- IM.in/MsgStore.pm.in-	Fri Aug 29 06:41:07 1997
+++ IM.in/MsgStore.pm.in	Fri Aug 29 06:53:22 1997
@@ -86,6 +86,7 @@
     my ($Msg, $dst) = @_;
     my ($PrevDst, @Hdr);
     local *ART;
+    require IM::Scan && import IM::Scan;
 
     im_notice("saving the message into $dst\n");
     if ($PrevDst ne $dst) {
@@ -120,16 +121,10 @@
 	}
 
 	my @Hdr = @$Msg[0..$hcount];
+	my %Head;
+	&store_header(\%Head, join('', @Hdr));
 
 	unless ($main::opt_noscan) {
-	    require IM::Scan && import IM::Scan;
-
-#	    my $f = expand_path($file);
-#	    my %Head = get_header($f);
-	    my %Head;
-
-	    &store_header(\%Head, join('', @Hdr));
-
 	    splice(@$Msg, 0, $hcount);
 	    $Head{'body:'} = &parse_body($Msg, 1);
 
@@ -146,13 +141,12 @@
 #	    }
 	}
 
-	# XXX should be optimized
-	my $mid = &header_value(\@Hdr, 'Message-ID');
-#	my $dt = &header_value(\@Hdr, 'Date');
-	(my $ver = &header_value(\@Hdr, 'Mime-Version')) =~ s/\s//g;
+	my $mid = $Head{'message-id'};
+#	my $dt = $Head{'date'};
+	(my $ver = $Head{'mime-version'}) =~ s/\s//g;
 	my $master = '';
 	if ($ver eq '1.0') {
-	    my $ct = &header_value(\@Hdr, 'Content-Type') . ';';
+	    my $ct = $Head{'content-type'} . ';';
 	    $ct =~ s/\s//g;
 	    if ($ct =~ m|^Message/partial;(.*;)?id=([^;]+);|i) {
 		$master = $2;
--- IM.in/Smtp.pm.in-	Sun Aug 17 12:12:24 1997
+++ IM.in/Smtp.pm.in	Fri Aug 29 07:00:12 1997
@@ -269,7 +269,7 @@
     select (SMTPd); $| = 0; select (STDOUT);
     &set_crlf("\r\n");
     &put_mimed_error_notify(\*SMTPd, $Header, $Body, \@prev_rcpt, \@prev_stat,
-	$Esmtp_flag ? 'esmtp' : 'smtp', 1, &get_session_log);
+	$Esmtp_flag ? 'esmtp' : 'smtp', &get_cur_server, 1, &get_session_log);
     select (SMTPd); $| = 1; select (STDOUT);
     return $rc if ($rc = &tcp_command(\*SMTPd, '.', ''));
     my (@resp) = &command_response;
--- IM.in/Message.pm.in-	Fri Aug 29 06:56:00 1997
+++ IM.in/Message.pm.in	Fri Aug 29 06:58:43 1997
@@ -737,13 +737,14 @@
 ##### GENERATE MIMED ERROR NOTIFY #####
 #
 # put_mimed_error_notify(channel, header, body, recipients, status, protocol,
-#			hidden_dot, session_log)
+#			server, hidden_dot, session_log)
 #	channel: socket/file descriptor to write out
 #	header: message header
 #	bory: message body
 #	recipients:
 #	status:
 #	protocol:
+#	server:
 #	hidden_dot: hidden dot algorithm is used if true
 #	session_log: logged messaged when error occurs
 #	return value: (XXX)
@@ -752,7 +753,8 @@
 #
 sub put_mimed_error_notify (*$$$$$$) {
     local *CHAN = shift;
-    my ($Header, $Body, $Recp, $Stat, $proto, $hidden_dot, $session_log) = @_;
+    my ($Header, $Body, $Recp, $Stat, $proto, $server,
+	$hidden_dot, $session_log) = @_;
     my $subj;
     my $crlf = &crlf;
 
@@ -826,7 +828,7 @@
 		print CHAN "Action: failure$crlf";
 		print CHAN "Status: 5.1.1$crlf";	# XXX
 	    }
-	    print CHAN 'Remote-MTA: ' . &get_cur_server() . $crlf;
+	    print CHAN "Remote-MTA: $server$crlf";
 	    print CHAN "Diagnostic-Code: smtp; $$Stat[$i]$crlf";
 	}
     }



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