[request-tracker-maintainers] Bug#674865: request-tracker3.8: Cannot send mail after DSA-2480

Paul Szabo paul.szabo at sydney.edu.au
Mon May 28 11:47:52 UTC 2012


Package: request-tracker3.8
Version: 3.8.8-7+squeeze2
Severity: important

Since the 
http://www.debian.org/security/2012/dsa-2480
update, my RT is not sending email but logging:

May 28 11:46:07 prt sendmail[2531]: q4S1k7vj002531: collect: premature EOM: Bad file descriptor
May 28 11:46:07 prt sendmail[2531]: q4S1k7vj002531: from=www-data, size=0, class=0, nrcpts=0, msgid=<201205280146.q4S1k7vj002531 at prt.pc.maths.usyd.edu.au>, relay=www-data at localhost

Changing one file, adding some sleeps:

# diff -u /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm.bak /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm
--- /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm.bak 2012-05-19 22:37:07.000000000 +1000
+++ /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm     2012-05-28 20:38:49.000000000 +1000
@@ -454,7 +454,9 @@
             my $pid = IPC::Open2::open2( $stdout, $mail, $path, @args )
                 or die "couldn't execute program: $!";
 
+sleep 1;
             $args{'Entity'}->print($mail);
+sleep 1;
             close $mail or die "close pipe failed: $!";
 
             waitpid($pid, 0);

causes it to log instead the somewhat more informative:

May 28 20:44:30 prt sendmail[5447]: q4SAiUOt005447: collect: premature EOM: Bad file descriptor
May 28 20:44:30 prt sendmail[5447]: q4SAiUOt005447: from=www-data, size=0, class=0, nrcpts=0, msgid=<201205281044.q4SAiUOt005447 at prt.pc.maths.usyd.edu.au>, relay=www-data at localhost
May 28 20:44:31 prt RT: <rt-3.8.8-5421-1338201870-1014.5363-7-0 at maths.usyd.edu.au>: Could not send mail with command `/usr/sbin/sendmail -oi -t`: program unexpectedly closed pipe at /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm line 450.  Stack:   [/usr/share/request-tracker3.8/lib/RT/Interface/Email.pm:450]   [/usr/lib/perl/5.10/IO/Handle.pm:148]   [/usr/share/perl5/MIME/Head.pm:532]   [/usr/share/perl5/Mail/Internet.pm:112]   [/usr/share/perl5/MIME/Entity.pm:1771]   [/usr/share/request-tracker3.8/lib/RT/Interface/Email.pm:458]   [/usr/share/request-tracker3.8/lib/RT/Action/SendEmail.pm:307]   [/usr/share/request-tracker3.8/lib/RT/Action/SendEmail.pm:129]   [/usr/share/request-tracker3.8/lib/RT/ScripAction_Overlay.pm:238]   [/usr/share/request-tracker3.8/lib/RT/Scrip_Overlay.pm:477]   [/usr/share/request-tracker3.8/lib/RT/Scrips_Overlay.pm:196]   [/usr/share/request-tracker3.8/lib/RT/Transaction_Overlay.pm:188]   [/usr/share/request-tracker3.8/lib/RT/Record.pm:145!
 7]   [/usr/share/request-tracker3

The following change seems to solve the issue, seems cleaner,
and might return better error messages:

# diff -u /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm.bak /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm
--- /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm.bak 2012-05-19 22:37:07.000000000 +1000
+++ /usr/share/request-tracker3.8/lib/RT/Interface/Email.pm     2012-05-28 21:34:51.000000000 +1000
@@ -443,28 +443,38 @@
         }
 
         eval {
-            # don't ignore CHLD signal to get proper exit code
-            local $SIG{'CHLD'} = 'DEFAULT';
-
-            # if something wrong with $mail->print we will get PIPE signal, handle it
-            local $SIG{'PIPE'} = sub { die "program unexpectedly closed pipe" };
-
-            require IPC::Open2;
-            my ($mail, $stdout);
-            my $pid = IPC::Open2::open2( $stdout, $mail, $path, @args )
-                or die "couldn't execute program: $!";
-
-            $args{'Entity'}->print($mail);
-            close $mail or die "close pipe failed: $!";
-
-            waitpid($pid, 0);
-            if ($?) {
-                # sendmail exit statuses mostly errors with data not software
-                # TODO: status parsing: core dump, exit on signal or EX_*
-                my $msg = "$msgid: `$path @args` exited with code ". ($?>>8);
-                $msg = ", interrupted by signal ". ($?&127) if $?&127;
-                $RT::Logger->error( $msg );
-            }
+            ## don't ignore CHLD signal to get proper exit code
+            #local $SIG{'CHLD'} = 'DEFAULT';
+            #
+            ## if something wrong with $mail->print we will get PIPE signal, handle it
+            #local $SIG{'PIPE'} = sub { die "program unexpectedly closed pipe" };
+            #
+            #require IPC::Open2;
+            #my ($mail, $stdout);
+            #my $pid = IPC::Open2::open2( $stdout, $mail, $path, @args )
+            #    or die "couldn't execute program: $!";
+            #
+            #$args{'Entity'}->print($mail);
+            #close $mail or die "close pipe failed: $!";
+            #
+            #waitpid($pid, 0);
+            #if ($?) {
+            #    # sendmail exit statuses mostly errors with data not software
+            #    # TODO: status parsing: core dump, exit on signal or EX_*
+            #    my $msg = "$msgid: `$path @args` exited with code ". ($?>>8);
+            #    $msg = ", interrupted by signal ". ($?&127) if $?&127;
+            #    $RT::Logger->error( $msg );
+            #}
+            #####
+            #use File::Temp;    # Done above
+            my $tmp_fh = File::Temp->new() or die "Cannot create temp file for sendmail data\n";
+            my $tmp_fn = $tmp_fh->filename or die "Nameless temp file for sendmail data\n";
+            $args{'Entity'}->print($tmp_fh) or die "Cannot write temp file for sendmail data\n";
+            close ($tmp_fh) or die "Cannot close temp file for sendmail data\n";
+            my $cmd = "$path @args < $tmp_fn 2>&1 || echo \"Sendmail failed, status \$?\"";
+            #$RT::Logger->info( "PSz using command: $cmd" );
+            my $msg = `$cmd`; die "$msg\n" if $msg;
+            unlink ($tmp_fn) or die "Cannot delete temp file for sendmail data\n";
         };
         if ( $@ ) {
             $RT::Logger->crit( "$msgid: Could not send mail with command `$path @args`: " . $@ );


Cheers, Paul

Paul Szabo   psz at maths.usyd.edu.au   http://www.maths.usyd.edu.au/u/psz/
School of Mathematics and Statistics   University of Sydney    Australia


-- Package-specific info:
Changed files:
  usr/share/request-tracker3.8/lib/RT/Interface/Email.pm

-- System Information:
Debian Release: 6.0.5
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-pk05.15-i386 (SMP w/2 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages request-tracker3.8 depends on:
ii  dbconfig-common        1.8.46+squeeze.0  common framework for packaging dat
ii  debconf [debconf-2.0]  1.5.36.1          Debian configuration management sy
ii  libapache-session-perl 1.87-1            Perl modules for keeping persisten
ii  libcache-simple-timede 0.27-2            Perl module to cache and expire ke
ii  libcalendar-simple-per 1.21-1            module for producing simple calend
ii  libcgi-fast-perl       5.10.1-17squeeze3 CGI::Fast Perl module
ii  libcgi-pm-perl         3.49-1squeeze1    module for Common Gateway Interfac
ii  libclass-returnvalue-p 0.55-1            A return-value object that lets yo
ii  libcss-squish-perl     0.09-1            module to compact many CSS files i
ii  libdata-ical-perl      0.16+dfsg-1       Perl module for manipulating iCale
ii  libdbi-perl            1.612-1           Perl Database Interface (DBI)
ii  libdbix-searchbuilder- 1.56-1            Perl implementation of a simple OR
ii  libdevel-stacktrace-pe 1.2100-1          Perl module containing stack trace
ii  libemail-address-perl  1.889-2           RFC 2822 Address Parsing and Creat
ii  libfcgi-procmanager-pe 0.18-2            Functions for managing FastCGI app
ii  libfile-sharedir-perl  1.00-0.1          Locate per-dist and per-module sha
ii  libgd-graph-perl       1.44-3            Graph Plotting Module for Perl 5
ii  libgd-text-perl        0.86-5            Text utilities for use with GD
ii  libgnupg-interface-per 0.42-3            Perl interface to GnuPG
ii  libgraphviz-perl       2.04-1            Perl interface to the GraphViz gra
ii  libhtml-mason-perl     1:1.44-1          HTML::Mason Perl module
ii  libhtml-parser-perl    3.66-1            collection of modules that parse H
ii  libhtml-rewriteattribu 0.03-1            concise attribute rewriting
ii  libhtml-scrubber-perl  0.08-4            Perl extension for scrubbing/sanit
ii  libipc-run-safehandles 0.02-1            Use IPC::Run and IPC::Run3 safely
ii  libjs-prototype        1.6.1-1           JavaScript Framework for dynamic w
ii  libjs-scriptaculous    1.8.3-1           JavaScript library for dynamic web
ii  liblocale-maketext-fuz 0.10-1            Maketext from already interpolated
ii  liblocale-maketext-lex 0.82-1            lexicon-handling backends for Loca
ii  liblog-dispatch-perl   2.22-1            Dispatches messages to multiple Lo
ii  libmailtools-perl      2.06-1            Manipulate email in perl programs
ii  libmime-perl           5.427-2           transitional dummy package
ii  libmime-tools-perl [li 5.428-1           Perl5 modules for MIME-compliant m
ii  libmime-types-perl     1.30-1            Perl extension for determining MIM
ii  libmodule-versions-rep 1.06-1            Report versions of all modules in 
ii  libperlio-eol-perl     0.14-1+b1         PerlIO layer for normalizing line 
ii  libregexp-common-perl  2010010201-1      module with common regular express
ii  libtext-autoformat-per 1.669002-1        module for automatic text wrapping
ii  libtext-quoted-perl    2.06-1            Perl module to extract the structu
ii  libtext-template-perl  1.45-1            Text::Template perl module
ii  libtext-wikiformat-per 0.78-1            translates Wiki formatted text int
ii  libtext-wrapper-perl   1.02-1            Simple word wrapping routine
ii  libtime-modules-perl   2006.0814-2       Various Perl modules for time/date
ii  libtimedate-perl       1.2000-1          collection of modules to manipulat
ii  libtree-simple-perl    1.18-1            A simple tree object
ii  libuniversal-require-p 0.13-1            Load modules from a variable
ii  libxml-rss-perl        1.48-1            Perl module for managing RSS (RDF 
ii  libxml-simple-perl     2.18-3            Perl module for reading and writin
ii  perl [libdigest-sha-pe 5.10.1-17squeeze3 Larry Wall's Practical Extraction 
ii  perl-modules [libcgi-p 5.10.1-17squeeze3 Core Perl modules
ii  rt3.8-apache2          3.8.8-7+squeeze2  Apache 2 specific files for reques
ii  rt3.8-clients          3.8.8-7+squeeze2  mail gateway and command-line inte
ii  rt3.8-db-sqlite        3.8.8-7+squeeze2  SQLite database backend for reques
ii  sendmail-bin [mail-tra 8.14.3-9.4        powerful, efficient, and scalable 
ii  sysklogd [system-log-d 1.5-6             System Logging Daemon
ii  ucf                    3.0025+nmu1       Update Configuration File: preserv

Versions of packages request-tracker3.8 recommends:
ii  cron [cron-daemon]            3.0pl1-116 process scheduling daemon
ii  libdatetime-locale-perl       1:0.45-1   Perl extension providing localizat
ii  libdatetime-perl              2:0.6100-2 module for manipulating dates, tim
ii  speedy-cgi-perl               2.22-13    speed up perl scripts by making th

Versions of packages request-tracker3.8 suggests:
pn  rt3.8-rtfm                    <none>     (no description available)

-- debconf information:
  request-tracker3.8/mysql/method: unix socket
  request-tracker3.8/dbconfig-reinstall: false
  request-tracker3.8/db/dbname: rtdb
* request-tracker3.8/dbconfig-install: false
  request-tracker3.8/remote/newhost:
  request-tracker3.8/db/app-user: rtuser
* request-tracker3.8/rtname: SMSsup
  request-tracker3.8/internal/reconfiguring: false
  request-tracker3.8/passwords-do-not-match:
  request-tracker3.8/pgsql/no-empty-passwords:
* request-tracker3.8/handle-siteconfig-permissions: false
* request-tracker3.8/correspondaddress: rt at maths.usyd.edu.au
  request-tracker3.8/dbconfig-upgrade: true
  request-tracker3.8/purge: false
* request-tracker3.8/webpath: /rt
  request-tracker3.8/upgrade-backup: true
  request-tracker3.8/db/basepath:
  request-tracker3.8/internal/skip-preseed: true
* request-tracker3.8/commentaddress: rt-comment at maths.usyd.edu.au
* request-tracker3.8/organization: maths.usyd.edu.au
  request-tracker3.8/pgsql/authmethod-user: password
  request-tracker3.8/install-error: abort
  request-tracker3.8/dbconfig-remove:
  request-tracker3.8/missing-db-package-error: abort
  request-tracker3.8/remove-error: abort
  request-tracker3.8/warn-sqlite-file:
  request-tracker3.8/pgsql/admin-user: postgres
  request-tracker3.8/remote/host:
  request-tracker3.8/database-type:
* request-tracker3.8/install-cronjobs: false
  request-tracker3.8/upgrade-error: abort
  request-tracker3.8/mysql/admin-user: root
  request-tracker3.8/remote/port:
  request-tracker3.8/pgsql/changeconf: false
  request-tracker3.8/pgsql/method: unix socket
  request-tracker3.8/pgsql/authmethod-admin: ident
  request-tracker3.8/pgsql/manualconf:
* request-tracker3.8/webbaseurl: http://www.maths.usyd.edu.au





More information about the pkg-request-tracker-maintainers mailing list