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: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>

squash to mail exec
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent f5ef4885
...@@ -23,7 +23,7 @@ my %evals; ...@@ -23,7 +23,7 @@ my %evals;
#default opts #default opts
my %default = ( my %default = (
"MAILER" => "sendmail", # default mailer "MAILER" => "sendmail", # default mailer
"EMAIL_ON_ERROR" => 1, "EMAIL_ON_ERROR" => 1,
"EMAIL_WHEN_FINISHED" => 1, "EMAIL_WHEN_FINISHED" => 1,
"EMAIL_WHEN_CANCELED" => 0, "EMAIL_WHEN_CANCELED" => 0,
...@@ -218,6 +218,7 @@ my $dirname = $FindBin::Bin; ...@@ -218,6 +218,7 @@ my $dirname = $FindBin::Bin;
my $mailto; my $mailto;
my $mailer; my $mailer;
my $mail_path;
my $email_on_error; my $email_on_error;
my $email_when_finished; my $email_when_finished;
my $email_when_started; my $email_when_started;
...@@ -250,8 +251,9 @@ my $no_reboot = 1; ...@@ -250,8 +251,9 @@ my $no_reboot = 1;
my $reboot_success = 0; my $reboot_success = 0;
my %option_map = ( my %option_map = (
"MAILTO" => \$mailto, "MAILTO" => \$mailto,
"MAILER" => \$mailer, "MAILER" => \$mailer,
"MAIL_PATH" => \$mail_path,
"EMAIL_ON_ERROR" => \$email_on_error, "EMAIL_ON_ERROR" => \$email_on_error,
"EMAIL_WHEN_FINISHED" => \$email_when_finished, "EMAIL_WHEN_FINISHED" => \$email_when_finished,
"EMAIL_WHEN_STARTED" => \$email_when_started, "EMAIL_WHEN_STARTED" => \$email_when_started,
...@@ -4126,12 +4128,29 @@ sub set_test_option { ...@@ -4126,12 +4128,29 @@ sub set_test_option {
sub _mailx_send { sub _mailx_send {
my ($subject, $message) = @_; my ($subject, $message) = @_;
system("$mailer -s \'$subject\' $mailto <<< \'$message\'"); system("$mail_path/$mailer -s \'$subject\' $mailto <<< \'$message\'");
} }
sub _sendmail_send { sub _sendmail_send {
my ($subject, $message) = @_; 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 { sub send_email {
...@@ -4140,6 +4159,13 @@ sub send_email { ...@@ -4140,6 +4159,13 @@ sub send_email {
doprint "No email sent: email or mailer not specified in config.\n"; doprint "No email sent: email or mailer not specified in config.\n";
return; 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(@_);} if ($mailer eq "mail" || $mailer eq "mailx"){ _mailx_send(@_);}
elsif ($mailer eq "sendmail" ) { _sendmail_send(@_);} elsif ($mailer eq "sendmail" ) { _sendmail_send(@_);}
else { doprint "\nYour mailer: $mailer is not supported.\n" } else { doprint "\nYour mailer: $mailer is not supported.\n" }
......
...@@ -411,6 +411,10 @@ ...@@ -411,6 +411,10 @@
# (default sendmail) # (default sendmail)
#MAILER = 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 # Errors are defined as those would terminate the script
# (default 1) # (default 1)
#EMAIL_ON_ERROR = 1 #EMAIL_ON_ERROR = 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment