]> git.decadent.org.uk Git - dak.git/blobdiff - tools/debianqueued-0.9/debianqueued
debianqueued: No early notifications
[dak.git] / tools / debianqueued-0.9 / debianqueued
index 52af83e89a8971aed2f9d1b7f1c52f9b68475136..7b025518e9aa1d054ab0fbc10e6f9d597f587a1e 100755 (executable)
@@ -27,6 +27,7 @@ use File::Copy;
 use Digest::MD5;
 
 setlocale(&POSIX::LC_ALL, "C");
+$ENV{"LC_ALL"} = "C";
 
 # ---------------------------------------------------------------------------
 #                                                              configuration
@@ -66,7 +67,7 @@ package main;
 ($main::hostname, undef, undef, undef, undef) = gethostbyname(hostname());
 
 my %packages = ();
-my $re_file_safe_prefix = qr/\A([a-zA-Z0-9][a-zA-Z0-9_.:~+-]*)/s;
+my $re_file_safe_prefix = qr/\A([a-zA-Z0-9.][a-zA-Z0-9_.:~+-]*)/s;
 my $re_file_safe = qr/$re_file_safe_prefix\z/s;
 
 # extract -r and -k args
@@ -621,7 +622,7 @@ sub process_changes($\@) {
   my (
        $pgplines,     @files,     @filenames,  @changes_stats,
        $failure_file, $retries,   $last_retry, $upload_time,
-       $file,         $do_report, $ls_l,       $problems_reported,
+       $file,         $do_report, $ls_l,
        $errs,         $pkgname,   $signator,   $extralines
      );
   local (*CHANGES);
@@ -828,16 +829,6 @@ outer_loop: while (<CHANGES>) {
   } ## end for $file (@files)
 
   $do_report = ( time - $upload_time ) > $conf::problem_report_timeout;
-  $problems_reported = $changes_stats[ST_MODE] & S_ISGID;
-
-  # if any of the files is newer than the .changes' ctime (the time
-  # we sent a report and set the sticky bit), send new problem reports
-  if ( $problems_reported && $changes_stats[ST_CTIME] < $upload_time ) {
-    $problems_reported = 0;
-    chmod +( $changes_stats[ST_MODE] &= ~S_ISGID ), $changes;
-    debug("upload_time>changes-ctime => resetting problems reported");
-  }
-  debug("do_report=$do_report problems_reported=$problems_reported");
 
   # now check all files for correct size and md5 sum
   for $file (@files) {
@@ -846,12 +837,7 @@ outer_loop: while (<CHANGES>) {
 
       # could be an upload that isn't complete yet, be quiet,
       # but don't process the file;
-      msg( "log,mail", "$filename doesn't exist\n" )
-        if $do_report && !$problems_reported;
-      msg( "log", "$filename doesn't exist (ignored for now)\n" )
-        if !$do_report;
-      msg( "log", "$filename doesn't exist (already reported)\n" )
-        if $problems_reported;
+      msg( "log", "$filename doesn't exist (ignored for now)\n" );
       ++$errs;
     } elsif ( $file->{"stats"}->[ST_SIZE] < $file->{"size"}
               && !$do_report )
@@ -888,22 +874,7 @@ outer_loop: while (<CHANGES>) {
       msg( "log,mail", "All files it mentions are also removed:\n" );
       msg( "log,mail", "  ", join( ", ", @filenames ), "\n" );
       rm( $changes, @filenames, $failure_file );
-    } elsif ( $do_report && !$problems_reported ) {
-
-      # otherwise, send a problem report, if not done already
-      msg(
-           "mail",
-           "Due to the errors above, the .changes file couldn't ",
-           "be processed.\n",
-           "Please fix the problems for the upload to happen.\n"
-         );
-
-      # remember we already have sent a mail regarding this file
-      debug("Sending problem report mail and setting SGID bit");
-      my $mode = $changes_stats[ST_MODE] |= S_ISGID;
-      msg( "log", "chmod failed: $!" )
-        if ( chmod( $mode, $changes ) != 1 );
-    } ## end elsif ( $do_report && !$problems_reported)
+    }
 
     # else: be quiet
 
@@ -920,9 +891,7 @@ outer_loop: while (<CHANGES>) {
     return;
   } ## end if ( $retries > 0 && (...
 
-  if ( $conf::upload_method eq "ftp" ) {
-    return if !ftp_open();
-  }
+  return if !ftp_open();
 
   # check if the job is already present on target
   # (moved to here, to avoid bothering target as long as there are errors in
@@ -1068,6 +1037,8 @@ sub process_dak_commands {
   }
   msg("log,mail", "(PGP/GnuPG signature by $signator)\n");
 
+  return if !ftp_open();
+
   # check target
   my @filenames = ($commands);
   if (my $ls_l = is_on_target($commands, @filenames)) {
@@ -1096,7 +1067,7 @@ sub process_commands($) {
   my $commands = shift;
   my ( @cmds, $cmd, $pgplines, $signator );
   local (*COMMANDS);
-  my ( @files, $file, @removed, $target_delay );
+  my ($file, @removed, $target_delay );
 
   format_status_str( $main::current_changes, $commands );
   $main::dstat = "c";
@@ -1189,6 +1160,7 @@ outer_loop: while (<COMMANDS>) {
     next if @word < 1;
 
     if ( $word[0] eq "rm" ) {
+      my @files = ();
       foreach ( @word[ 1 .. $#word ] ) {
         my $origword = $_;
         if (m,^DELAYED/([0-9]+)-day/,) {
@@ -1933,6 +1905,7 @@ sub send_status() {
 # open FTP connection to target host if not already open
 #
 sub ftp_open() {
+  return 1 unless $conf::upload_method eq "ftp";
 
   if ($main::FTP_chan) {
 
@@ -2272,11 +2245,7 @@ sub send_mail($$$) {
   my $package =
     keys %main::packages ? join( ' ', keys %main::packages ) : "";
 
-  use Email::Send;
-
-  unless ( defined($Email::Send::Sendmail::SENDMAIL) ) {
-    $Email::Send::Sendmail::SENDMAIL = $conf::mail;
-  }
+  use Email::Sender::Simple;
 
   if ($conf::overridemail) {
        $addr = $conf::overridemail;
@@ -2291,6 +2260,8 @@ Subject: $subject
 Date: $date
 X-Debian: DAK
 X-DAK: DAK
+Precedence: bulk
+Auto-Submitted: auto-generated
 __MESSAGE__
 
   if ( length $package ) {
@@ -2300,17 +2271,7 @@ __MESSAGE__
   $message .= "\n$text";
   $message .= "\nGreetings,\n\n\tYour Debian queue daemon (running on host $main::hostname)\n";
 
-  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|success/ ) {
-    return 0;
-  }
-
-  return 1;
+  return Email::Sender::Simple->try_to_send($message);
 } ## end sub send_mail($$$)
 
 #