[Mew-dist 06347] Re: imjoin adds extra header fields
Motonori Nakamura
motonori at example.com
1998年 9月 8日 (火) 12:50:31 JST
>>>>> "OBATA" == OBATA Noboru <obata at example.com> writes:
OBATA> 時々 message/partial なメールが届き imjoin のお世話になっている
OBATA> のですが、その結果得られたメールに、いくつかのヘッダが重複する
OBATA> ことがあります。
OBATA> そこで、これを修正しようとしたパッチを作りました。このあたりの
OBATA> 事情に詳しい方に何とかして頂けたらと思います。よろしくお願いし
OBATA> ます。
本文を読まずに例を見ながら実装したのがばれてしまいましたが、
だいたいそれで OK だと思います。あと、imcat, imput にも
修正を加えました。im-100 へのパッチです。
- motonori
-------------- next part --------------
diff -cr ../im-100-/IM/Message.pm ./IM/Message.pm
*** ../im-100-/IM/Message.pm Sat Sep 5 08:04:24 1998
--- ./IM/Message.pm Tue Sep 8 10:47:44 1998
***************
*** 253,259 ****
im_debug("entering put_header\n")
if (&debug('header') || &debug('put'));
! hdr: foreach $line (@$Header) {
next if ($line =~ /^ KILLED /);
if ($line =~ /^ ORIGINAL /) {
next if ($sel ne 'original');
--- 253,260 ----
im_debug("entering put_header\n")
if (&debug('header') || &debug('put'));
! hdr: foreach (@$Header) {
! $line = $_;
next if ($line =~ /^ KILLED /);
if ($line =~ /^ ORIGINAL /) {
next if ($sel ne 'original');
***************
*** 264,271 ****
}
}
if ($sel =~ /^partial:/) {
! if ($line =~ /^(Mime-Version|Message-Id|Encrypted|Lines):/i
! || $line =~ /^Content-/i) {
next if ($sel =~ /:ext$/);
} else {
next if ($sel =~ /:int$/);
--- 265,272 ----
}
}
if ($sel =~ /^partial:/) {
! if ($line =~ /^(Subject|Mime-Version|Message-Id|Encrypted|Lines):/i
! || $line =~ /^Content-/i) {
next if ($sel =~ /:ext$/);
} else {
next if ($sel =~ /:int$/);
***************
*** 422,428 ****
$end = $#$Body;
} else {
$start = $main::Lines_to_partial * ($part - 1);
! $end = $main::Lines_to_partial * $part - 1;
$end = $#$Body if ($end > $#$Body);
}
im_debug("entering put_body\n") if (&debug('put'));
--- 423,430 ----
$end = $#$Body;
} else {
$start = $main::Lines_to_partial * ($part - 1);
! $end = $main::Lines_to_partial * $part;
! $start++ if ($part > 1);
$end = $#$Body if ($end > $#$Body);
}
im_debug("entering put_body\n") if (&debug('put'));
***************
*** 530,535 ****
--- 532,539 ----
print CHAN "Message-Id: $main::Cur_mid$crlf";
$First_part_mid = $main::Cur_mid if ($part == 1);
}
+ my $subj = &header_value($Header, 'Subject');
+ print CHAN "Subject: $subj (part $part of $total)$crlf";
print CHAN "Mime-Version: 1.0$crlf";
print CHAN "Content-Type: Message/partial;$crlf";
printf CHAN "\tid=\"%s\"; number=%d; total=%d$crlf",
diff -cr ../im-100-/imcat.in ./imcat.in
*** ../im-100-/imcat.in Sat Sep 5 08:03:48 1998
--- ./imcat.in Tue Sep 8 10:55:55 1998
***************
*** 341,359 ****
for ($i = 1; $i <= $#paths; $i++) {
if (open(MSG, "<$paths[$i]")) {
$/ = "\n\n";
! if ($i == 1) {
! my $header = <MSG>;
my $skip = 0;
foreach (split("\n", $header)) {
next if (/^[ \t]/ && $skip);
$skip = 0;
! if (/^(Content|Message-ID)/i) {
$skip = 1;
next;
}
! last if (/^\n/);
print "$_\n";
}
} else {
# skip header part
<MSG>;
--- 341,372 ----
for ($i = 1; $i <= $#paths; $i++) {
if (open(MSG, "<$paths[$i]")) {
$/ = "\n\n";
! if ($i == 1) { # first partial message
! my $header = <MSG>; # header of enclosing message
my $skip = 0;
foreach (split("\n", $header)) {
next if (/^[ \t]/ && $skip);
$skip = 0;
! if (/^(Content-|Subject|Message-ID|Encrypted|MIME-Version)/i) {
$skip = 1;
next;
}
! last if (/^$/);
print "$_\n";
}
+ $header = <MSG>; # header of enclosed message
+ $skip = 0;
+ foreach (split("\n", $header)) {
+ next if (/^[ \t]/ && $skip);
+ $skip = 0;
+ unless (/^(Content-|Subject|Message-ID|Encrypted|MIME-Version)/i) {
+ $skip = 1;
+ next;
+ }
+ last if (/^$/);
+ print "$_\n";
+ }
+ print "\n";
} else {
# skip header part
<MSG>;
diff -cr ../im-100-/imjoin.in ./imjoin.in
*** ../im-100-/imjoin.in Sat Sep 5 08:03:54 1998
--- ./imjoin.in Tue Sep 8 10:57:13 1998
***************
*** 161,179 ****
for ($i = 1; $i <= $#index; $i++) {
if (open(MSG, "<$index[$i]")) {
$/ = "\n\n";
! if ($i == 1) {
! my $header = <MSG>;
my $skip = 0;
foreach (split("\n", $header)) {
next if (/^[ \t]/ && $skip);
$skip = 0;
! if (/^(Content|Message-ID)/i) {
$skip = 1;
next;
}
! last if (/^\n/);
push (@Message, "$_\n");
}
} else {
# skip header part
<MSG>;
--- 161,192 ----
for ($i = 1; $i <= $#index; $i++) {
if (open(MSG, "<$index[$i]")) {
$/ = "\n\n";
! if ($i == 1) { # first partial message
! my $header = <MSG>; # header of enclosing message
my $skip = 0;
foreach (split("\n", $header)) {
next if (/^[ \t]/ && $skip);
$skip = 0;
! if (/^(Content-|Subject|Message-ID|Encrypted|MIME-Version)/i) {
$skip = 1;
next;
}
! last if (/^$/);
push (@Message, "$_\n");
}
+ $header = <MSG>; # header of enclosed message
+ $skip = 0;
+ foreach (split("\n", $header)) {
+ next if (/^[ \t]/ && $skip);
+ $skip = 0;
+ unless (/^(Content-|Subject|Message-ID|Encrypted|MIME-Version)/i) {
+ $skip = 1;
+ next;
+ }
+ last if (/^$/);
+ push (@Message, "$_\n");
+ }
+ push (@Message, "\n");
} else {
# skip header part
<MSG>;
Mew-dist メーリングリストの案内