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=<[email protected]>, relay=www-data@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=<[email protected]>, relay=www-data@localhost May 28 20:44:31 prt RT: <[email protected]>: 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 [email protected] 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: [email protected] 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: [email protected] * 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 -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

