ktest.pl: Add MAIL_PATH option to define where to find the mailer
The option MAIL_PATH lets the user decide how to find the mailer they are using. For example, sendmail is usually located in /usr/sbin but is not always in the path of non admin users. Have ktest look through the user's PATH environment variable (adding /usr/sbin) as well, but if that's not good enough, allow the user to define where to find the mailer. Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> squash to mail exec Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
f5ef488557
commit
be1546b87f
|
@ -23,7 +23,7 @@ my %evals;
|
|||
|
||||
#default opts
|
||||
my %default = (
|
||||
"MAILER" => "sendmail", # default mailer
|
||||
"MAILER" => "sendmail", # default mailer
|
||||
"EMAIL_ON_ERROR" => 1,
|
||||
"EMAIL_WHEN_FINISHED" => 1,
|
||||
"EMAIL_WHEN_CANCELED" => 0,
|
||||
|
@ -218,6 +218,7 @@ my $dirname = $FindBin::Bin;
|
|||
|
||||
my $mailto;
|
||||
my $mailer;
|
||||
my $mail_path;
|
||||
my $email_on_error;
|
||||
my $email_when_finished;
|
||||
my $email_when_started;
|
||||
|
@ -250,8 +251,9 @@ my $no_reboot = 1;
|
|||
my $reboot_success = 0;
|
||||
|
||||
my %option_map = (
|
||||
"MAILTO" => \$mailto,
|
||||
"MAILER" => \$mailer,
|
||||
"MAILTO" => \$mailto,
|
||||
"MAILER" => \$mailer,
|
||||
"MAIL_PATH" => \$mail_path,
|
||||
"EMAIL_ON_ERROR" => \$email_on_error,
|
||||
"EMAIL_WHEN_FINISHED" => \$email_when_finished,
|
||||
"EMAIL_WHEN_STARTED" => \$email_when_started,
|
||||
|
@ -4126,12 +4128,29 @@ sub set_test_option {
|
|||
|
||||
sub _mailx_send {
|
||||
my ($subject, $message) = @_;
|
||||
system("$mailer -s \'$subject\' $mailto <<< \'$message\'");
|
||||
system("$mail_path/$mailer -s \'$subject\' $mailto <<< \'$message\'");
|
||||
}
|
||||
|
||||
sub _sendmail_send {
|
||||
my ($subject, $message) = @_;
|
||||
system("echo -e \"Subject: $subject\n\n$message\" | sendmail -t $mailto");
|
||||
system("echo -e \"Subject: $subject\n\n$message\" | $mail_path/sendmail -t $mailto");
|
||||
}
|
||||
|
||||
sub find_mailer {
|
||||
my ($mailer) = @_;
|
||||
|
||||
my @paths = split /:/, $ENV{PATH};
|
||||
|
||||
# sendmail is usually in /usr/sbin
|
||||
$paths[$#paths + 1] = "/usr/sbin";
|
||||
|
||||
foreach my $path (@paths) {
|
||||
if (-x "$path/$mailer") {
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub send_email {
|
||||
|
@ -4140,6 +4159,13 @@ sub send_email {
|
|||
doprint "No email sent: email or mailer not specified in config.\n";
|
||||
return;
|
||||
}
|
||||
if (!defined($mail_path)) {
|
||||
# find the mailer
|
||||
$mail_path = find_mailer $mailer;
|
||||
if (!defined($mail_path)) {
|
||||
die "\nCan not find $mailer in PATH\n";
|
||||
}
|
||||
}
|
||||
if ($mailer eq "mail" || $mailer eq "mailx"){ _mailx_send(@_);}
|
||||
elsif ($mailer eq "sendmail" ) { _sendmail_send(@_);}
|
||||
else { doprint "\nYour mailer: $mailer is not supported.\n" }
|
||||
|
|
|
@ -411,6 +411,10 @@
|
|||
# (default sendmail)
|
||||
#MAILER = sendmail
|
||||
#
|
||||
# The executable to run
|
||||
# (default: for sendmail "/usr/sbin/sendmail", otherwise equals ${MAILER})
|
||||
#MAIL_EXEC = /usr/sbin/sendmail
|
||||
#
|
||||
# Errors are defined as those would terminate the script
|
||||
# (default 1)
|
||||
#EMAIL_ON_ERROR = 1
|
||||
|
|
Loading…
Reference in New Issue