[dak/security] Rewrite the send_mail() function in debianqueued to not use mailx (blech). Doing it this way also gives us an easy way to add arbitrary headers, so I've added X-Debian-Package while I was there.
---
ChangeLog | 4 +++
tools/debianqueued-0.9/ChangeLog | 4 +++
tools/debianqueued-0.9/debianqueued | 45 ++++++++++++++++++++++++----------
3 files changed, 40 insertions(+), 13 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2aaa4a2..b4fd48c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-10 Stephen Gran <sgran@debian.org>
+ * tools/debianqueued-0.9/debianqueued: First pass at a send_mail
+ implementation that sucks less
+
2008-05-09 Joerg Jaspert <joerg@debian.org>
* dak/override.py (main): substitute value in X-Debian-Package
diff --git a/tools/debianqueued-0.9/ChangeLog b/tools/debianqueued-0.9/ChangeLog
index d979a50..77267d9 100644
--- a/tools/debianqueued-0.9/ChangeLog
+++ b/tools/debianqueued-0.9/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-10 Stephen Gran <sgran@debian.org>
+ * debianqueued: First pass at a send_mail implementation that
+ sucks less. This also gives us X-Debian-Package
+
2008-05-08 Joerg Jaspert <joerg@debian.org>
* debianqueued: added header X-Debian: DAK
diff --git a/tools/debianqueued-0.9/debianqueued b/tools/debianqueued-0.9/debianqueued
index e84d385..97359b0 100755
--- a/tools/debianqueued-0.9/debianqueued
+++ b/tools/debianqueued-0.9/debianqueued
@@ -281,6 +281,8 @@ package main;
($main::progname = $0) =~ s,.*/,,;
+my %packages = ();
+
# extract -r and -k args
$main::arg = "";
if (@ARGV == 1 && $ARGV[0] =~ /^-[rk]$/) {
@@ -790,6 +792,7 @@ sub process_changes($\@) {
elsif (/^Source:\s*/i) {
chomp( $pkgname = $' );
$pkgname =~ s/\s+$//;
+ $main::packages{$pkgname}++;
}
elsif (/^Files:/i) {
while( <CHANGES> ) {
@@ -2078,6 +2081,7 @@ sub init_mail(;$) {
$main::mail_addr = "";
$main::mail_text = "";
+ %main::packages = ();
$main::mail_subject = $file ? "Processing of $file" : "";
}
@@ -2120,19 +2124,34 @@ sub send_mail($$$) {
my $subject = shift;
my $text = shift;
- debug( "Sending mail to $addr" );
- debug( "executing $conf::mail -s '$subject' -a 'X-Debian: DAK' '$addr'" );
- if (!open( MAIL, "|$conf::mail -s '$subject' -a 'X-Debian: DAK' '$addr'" )) {
- msg( "log", "Could not open pipe to $conf::mail: $!\n" );
- return 0;
- }
- print MAIL $text;
- print MAIL "\nGreetings,\n\n\tYour Debian queue daemon\n";
- if (!close( MAIL )) {
- msg( "log", "$conf::mail failed (exit status ", $? >> 8, ")\n" );
- return 0;
- }
- return 1;
+ my $package = join(' ', keys %main::packages);
+
+ use Email::Send;
+
+ my $message = <<'__MESSAGE__';
+ To: $addr
+ From: dak@ftp-master.debian.org
+ Subject: $subject
+ X-Debian: DAK
+__MESSAGE__
+
+ if (length $package) {
+ $message .= "X-Debian-Package: $package\n";
+ }
+
+ $message .= "\n$text";
+
+ my $mail = Email::Send->new;
+ for ( qw[Sendmail SMTP] ) {
+ $mail->mailer($_) and last if $mail->mailer_available($_);
+ }
+
+ my $ret = $mail->send($message);
+ if ($ret && $ret !~ /Message sent/) {
+ return 0;
+ }
+
+ return 1;
}
#
--
1.5.6.5
Reply to: