]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ktest.pl: Add MAIL_PATH option to define where to find the mailer
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 6 Apr 2018 20:38:56 +0000 (16:38 -0400)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Sun, 8 Apr 2018 00:16:08 +0000 (20:16 -0400)
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>
tools/testing/ktest/ktest.pl
tools/testing/ktest/sample.conf

index 07d0a47816e40105adad63dcd4b68fd4adfec5ee..637545bd9e98e9339a3cee6652330af0e6c26b9c 100755 (executable)
@@ -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" }
index d1a2626aaa0a53554f6663ef994501fd5677ae53..86e7cffc45c0a9894e2f62278792bab6756cef67 100644 (file)
 # (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