Package: sendmail-base
Version: 8.14.3-5+lenny1
Severity: important
Tags: patch
Since we upgraded our MX servers to lenny, we are seeing spurious random
and unexplained delays in some mail deliveries (from a few minutes to
nearly a full day).
We finally traced the problem to the /etc/cron.d/sendmail file that
handles queue aging.
With the following queue aging configuration in /etc/mail/sendmail.conf :
AGE_DATA="[\
['1h', '', 'hourly-in', 'in'],\
['1h', '', 'hourly-out', 'out'],\
['4h', '', 'daily-in', 'hourly-in'],\
['4h', '', 'daily-out', 'hourly-out'],\
]";
We get the following in /etc/cron.d/sendmail
# Every so often, give sendmail a chance to age the queues.
#
37 * * * * root test -x /etc/init.d/sendmail &&
/usr/share/sendmail/qtool.pl -s 0 /var/spool/mqueue/hourly-in
/var/spool/mqueue/in >/dev/null
26 * * * * root test -x /etc/init.d/sendmail &&
/usr/share/sendmail/qtool.pl -s 0 /var/spool/mqueue/hourly-out
/var/spool/mqueue/out >/dev/null
01 */04 * * * root test -x /etc/init.d/sendmail &&
/usr/share/sendmail/qtool.pl -s 0 /var/spool/mqueue/daily-in
/var/spool/mqueue/hourly-in >/dev/null
15 */04 * * * root test -x /etc/init.d/sendmail &&
/usr/share/sendmail/qtool.pl -s 0 /var/spool/mqueue/daily-out
/var/spool/mqueue/hourly-out >/dev/null
Notice the '-s 0' on all lines when the first two should have -s 3600 and the
last two -s 14400. The consequence is that all mails in the queues are
aged when qtools.pl runs, causing the observed delays.
This problems seems to result from a computation bug in the sm2cron_time()
function in the perl script /usr/share/sendmail/update_conf
This function returns a number of seconds in the variable $seconds but
this same variable is altered several times and ends up containing a
number of seconds modulo 60.
I propose the following patch, which stores the initial value of $seconds
in $allseconds and returns $allseconds in the end.
/usr/share/sendmail$ diff -u update_conf.bad update_conf
--- update_conf.bad 2010-01-29 15:03:10.000000000 +0100
+++ update_conf 2010-05-25 11:42:53.000000000 +0200
@@ -186,12 +186,13 @@
my ($sm) = @_;
my $seconds = 0;
+ my $allseconds = 0;
my $randstart = '00';
if ($sm eq '') {
if ( $main::opt_test ) {
print "mm hh dom mon dow = sm2cron_time($sm);\n";
};
- return ($cron, $seconds);
+ return ($cron, $allseconds);
};
# Convert sendmail time
@@ -214,6 +215,7 @@
+ ($hour * 60 * 60)
+ ($minute * 60)
+ $second;
+ $allseconds = $seconds;
$month = $seconds / (4 * 7 * 24 * 60 * 60);
$seconds = $seconds % (4 * 7 * 24 * 60 * 60);
$week = $seconds / (7 * 24 * 60 * 60);
@@ -293,7 +295,7 @@
if ( $main::opt_test ) {
print "$cron = sm2cron_time($sm);\n";
};
- return ($cron, $seconds);
+ return ($cron, $allseconds);
};
#
-- System Information:
Debian Release: 5.0.4
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Kernel: Linux 2.6.32.9
Locale: lang=fr...@euro, lc_ctype=fr...@euro (charmap=ISO-8859-15)
Shell: /bin/sh linked to /bin/bash
Versions of packages sendmail-base depends on:
ii adduser 3.110 add and remove users and groups
ii m4 1.4.11-1 a macro processing language
ii make 3.81-5 The GNU version of the "make" util
ii perl 5.10.0-19lenny2 Larry Wall's Practical Extraction
sendmail-base recommends no packages.
Versions of packages sendmail-base suggests:
ii ca-certificates 20080809 Common CA certificates
pn logcheck <none> (no description available)
ii logrotate 3.7.1-5 Log rotation utility
pn resolvconf <none> (no description available)
pn sendmail-doc <none> (no description available)
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]