[ mailman-Bugs-1519881 ] lost messages risk with contrib/mm-handler
SourceForge.net
noreply at sourceforge.net
Mon Jul 10 12:53:11 CEST 2006
Bugs item #1519881, was opened at 2006-07-10 10:53
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=100103&aid=1519881&group_id=103
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: mail delivery
Group: 2.1 (stable)
Status: Open
Resolution: None
Priority: 5
Submitted By: Richard Barrett (ppsys)
Assigned to: Nobody/Anonymous (nobody)
Summary: lost messages risk with contrib/mm-handler
Initial Comment:
As far as I am aware, this bug is present in all versions of the
contributed sendmail mailer contrib/mm-handler
The Perl code in subversion /trunk/mailman/contrib/mm-handler
contains the following fragment:
$wrapper = new FileHandle "|$MMWRAPPER $cmd $list";
if (!defined($wrapper)) {
## Defer?
print STDERR "$0: cannot exec ",
"\"$MMWRAPPER $cmd $list\": deferring\n";
exit (-1);
}
# Don't need these without the "n" flag on the mailer def....
#$date = &mboxdate(time);
#$wrapper->print ("From $sender $date\n");
# ...because we use these instead.
$from_ = <STDIN>;
$wrapper->print ($from_);
$wrapper->print ("X-Mailman-Handler: $VERSION\n");
while (<STDIN>) {
$wrapper->print ($_);
}
close($wrapper);
This is the code that actually hands off the message from sendmail to
the mailman wrapper.
I note that it still has the problem which the original author, David
Champion <dgc at uchicago.edu>, was made aware some years ago.
The Perl code fails to check the value returned by the close($wrapper).
As the FileHandle being closed is a pipe, the close operation returns
the status value returned by the Mailman wrapper at the far end of the
pipe. This value should be checked.
Not checking this status value means that if the mailman wrapper fails
to successfully enqueue the message for any reason this is not
detected by the sendmail mailer. Meanwhile, the mailer blithely tells
sendmail that the message was successfully delivered.
The likely consequence is that the message will be silently lost.
Adding a test after:
close($wrapper);
such as:
close($wrapper);
die "Mailman delivery wrapper failed" if $?;
nods in the direction of correcting the problem.
I leave aside suggestions that more appropriate, mail related, return
code values might sensibly be used by this sendmail mailer, amongst
other things.
btw: this risk is not theoretical. Some years ago it caused the only loss
of messages by our Mailman system that we have experienced. We
initially fixed, then replaced with a python implementation and finally
ceased all use of this type of sendmail mailer.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=100103&aid=1519881&group_id=103
More information about the Mailman-coders
mailing list