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);
}
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);
}
# 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) {
my $config_overrides = new_config_overrides( scalar(@ARGV) + 1 );
+debug("Arguments: " . join(' ', @ARGV));
Getopt::Long::Configure(qw/bundling/);
GetOptions(