Imported Upstream version 3.3.1
[debian/amanda] / server-src / amreport.pl
index cb3127579d49bc96a40cc7888c2fca022ba5ebe0..ae73bab9587158c6794050c95b8f0e272bdcb0bb 100755 (executable)
@@ -347,8 +347,29 @@ sub open_printer_output
     debug("invoking printer: " . join(" ", @cmd));
 
     # redirect stdout/stderr to stderr, which is usually the amdump log
-    my $pid = open3( my $fh, ">&2", ">&2", @cmd)
-      or error("cannot start $cmd[0]: $!", 1);
+    my ($pid, $fh);
+    if (!-f $Amanda::Constants::LPR || !-x $Amanda::Constants::LPR) {
+       my $errstr = "error: the mailer '$Amanda::Constants::LPR' is not an executable program.";
+       print STDERR "$errstr\n";
+        if ($mode == MODE_SCRIPT) {
+            debug($errstr);
+        } else {
+            error($errstr, 1);
+        }
+    } else {
+       eval { $pid = open3($fh, ">&2", ">&2", @cmd); } or do {
+            ($pid, $fh) = (0, undef);
+            chomp $@;
+            my $errstr = "error: $@: $!";
+
+           print STDERR "$errstr\n";
+            if ($mode == MODE_SCRIPT) {
+               debug($errstr);
+            } else {
+               error($errstr, 1);
+            }
+        };
+    }
     return ($pid, $fh);
 }
 
@@ -398,18 +419,29 @@ sub open_mail_output
 
 
     my ($pid, $fh);
-    eval { $pid = open3($fh, ">&2", ">&2", @cmd); 1; } or do {
-
-        ($pid, $fh) = (0, undef);
-        my $errstr =
-          "error: could not run command: " . join(" ", @cmd) . ": $@";
-
+    if (!-f $cfg_mailer || !-x $cfg_mailer) {
+       my $errstr = "error: the mailer '$cfg_mailer' is not an executable program.";
+       print STDERR "$errstr\n";
         if ($mode == MODE_SCRIPT) {
             debug($errstr);
         } else {
             error($errstr, 1);
         }
-    };
+       
+    } else {
+       eval { $pid = open3($fh, ">&2", ">&2", @cmd) } or do {
+            ($pid, $fh) = (0, undef);
+            chomp $@;
+            my $errstr = "error: $@: $!";
+
+           print STDERR "$errstr\n";
+            if ($mode == MODE_SCRIPT) {
+               debug($errstr);
+            } else {
+               error($errstr, 1);
+            }
+       };
+    }
 
     return ($pid, $fh);
 }
@@ -431,21 +463,23 @@ sub run_output {
     # TODO: add some generic error handling here.  must be compatible
     # with legacy behavior.
 
-    # TODO: modularize these better
-    if ($reportspec->[0] eq 'xml') {
-        print $fh $report->xml_output("" . getconf($CNF_ORG), $config_name);
-    } elsif ($reportspec->[0] eq 'human') {
-       my $hr =
-         Amanda::Report::human->new( $report, $fh, $config_name, $opt_logfname );
-       $hr->print_human_amreport();
-    } elsif ($reportspec->[0] eq 'postscript') {
-       use Amanda::Report::postscript;
-       my $rep =
-         Amanda::Report::postscript->new( $report, $config_name, $opt_logfname );
-       $rep->write_report($fh);
-    }
+    if (defined $fh) {
+       # TODO: modularize these better
+       if ($reportspec->[0] eq 'xml') {
+           print $fh $report->xml_output("" . getconf($CNF_ORG), $config_name);
+       } elsif ($reportspec->[0] eq 'human') {
+           my $hr = Amanda::Report::human->new($report, $fh, $config_name,
+                                               $opt_logfname );
+           $hr->print_human_amreport();
+       } elsif ($reportspec->[0] eq 'postscript') {
+           use Amanda::Report::postscript;
+           my $rep = Amanda::Report::postscript->new($report, $config_name,
+                                                     $opt_logfname );
+           $rep->write_report($fh);
+       }
 
-    close $fh;
+       close $fh;
+    }
 
     # clean up any subprocess
     if (defined $pid) {
@@ -464,6 +498,7 @@ Amanda::Util::setup_application("amreport", "server", $CONTEXT_CMDLINE);
 
 my $config_overrides = new_config_overrides( scalar(@ARGV) + 1 );
 
+debug("Arguments: " . join(' ', @ARGV));
 Getopt::Long::Configure(qw/bundling/);
 GetOptions(