X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famreport.pl;h=b2913eb046580ba86b8d95f9cb0f6f9e687cf9eb;hb=HEAD;hp=9264e00aafca8bd1a035c47b475dcbcd77c6ce0a;hpb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;p=debian%2Famanda diff --git a/server-src/amreport.pl b/server-src/amreport.pl index 9264e00..b2913eb 100755 --- a/server-src/amreport.pl +++ b/server-src/amreport.pl @@ -1,9 +1,10 @@ #! @PERL@ -# Copyright (c) 2010 Zmanda, Inc. All Rights Reserved. +# Copyright (c) 2010-2012 Zmanda, Inc. All Rights Reserved. # -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 as published -# by the Free Software Foundation. +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY @@ -67,7 +68,7 @@ my (@outputs, @output_queue); sub usage { print < command-line mode options: [--log=logfile] [--ps=filename] [--text=filename] [--xml=filename] [--print=printer] [--mail-text=recipient] @@ -347,8 +348,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); } @@ -363,7 +385,8 @@ sub open_mail_output my $datestamp = $report->get_program_info( - $report->get_flag("amflush_run") ? "amflush" : "planner", "start" ); + $report->get_flag("amflush_run") ? "amflush" : + $report->get_flag("amvault_run") ? "amvault" : "planner", "start" ); $datestamp /= 1000000 if $datestamp > 99999999; $datestamp = int($datestamp); @@ -397,18 +420,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); } @@ -430,21 +464,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) { @@ -463,6 +499,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(