On Thu, May 07, 2009 at 02:09:34PM -0600, Caleb Anthony wrote:
> Attached is a new patch. This one adds two new subs:
> ld_emailalert_net_smtp and ld_emailalert_mail_send. If an SMTP server
> is set in ldirectord.cf, then ld_emailalert_net_smtp will be called
> and the email will be sent via SMTP. If an SMTP server is not set in
> ldirectord.cf then ld_emailalert_mail_send will be called and the
> email will be sent via the Mail::Send methods.
>
> Let me know what you think.
Hi Caleb,
That looks pretty good to me. How well tested is it?
I have rediffed it against the current http://hg.linux-ha.org/dev tree.
The result is below:
Index: dev/ldirectord/ldirectord.in
===================================================================
--- dev.orig/ldirectord/ldirectord.in 2009-05-08 10:21:45.000000000 +1000
+++ dev/ldirectord/ldirectord.in 2009-05-08 10:27:02.000000000 +1000
@@ -248,6 +248,13 @@ If defined in a virtual server section t
Default: all
+B<smtp = >I<ip_address|hostname>B<">
+
+A valid SMTP server address to use for sending email via SMTP.
+
+If defined in a virtual server section then the global value is overridden.
+
+
B<execute = ">I<configuration>B<">
Use this directive to start an instance of ldirectord for
@@ -662,6 +669,7 @@ use vars qw(
$EMAILALERT
$EMAILALERTFREQ
$EMAILALERTSTATUS
+ $SMTP
$CLEANSTOP
$CALLBACK
@@ -1422,6 +1430,9 @@ sub read_config
($1 eq "yes" || $1 eq "no")
or &config_error($line,
"cleanstop must be 'yes' or 'no'");
$vsrv{cleanstop} = $1;
+ } elsif ($rcmd =~ /^smtp\s*=\s*(.*)/) {
+ $1 =~ /(^([0-9A-Za-z._+-]+))/ or
&config_error($line, "invalid SMTP server address");
+ $vsrv{smtp} = $1;
} else {
&config_error($line, "Unknown command
\"$linedata\"");
}
@@ -1540,6 +1551,10 @@ sub read_config
($1 eq "yes" || $1 eq "no")
or &config_error($line, "cleanstop must be 'yes' or
'no'");
$CLEANSTOP = $1;
+ } elsif ($linedata =~ /^smtp\s*=\s*(.*)/) {
+ $1 =~ /(^([0-9A-Za-z._+-]+))/ or &config_error($line,
+ "invalid SMTP server address");
+ $SMTP = $1;
} else {
if ($linedata =~ /^timeout\s*=\s*(.*)/) {
&config_error($line,
@@ -4109,14 +4124,13 @@ sub daemon_status_str
sub ld_emailalert_send
{
my ($subject, $v, $rserver, $currenttime) = (@_);
- my $emailmsg;
- my $emailfh;
my $status = 0;
my $to_addr;
my $frequency;
my $virtual_str;
my $id;
my $statusfilter;
+ my $smtp_server;
$frequency = defined $v->{emailalertfreq} ? $v->{emailalert} :
$EMAILALERTFREQ;
@@ -4143,6 +4157,72 @@ sub ld_emailalert_send
return 0;
}
+ $smtp_server = defined $v->{smtp} ? $v->{smtp} :
+ $SMTP;
+
+ if (defined $smtp_server) {
+ $status = &ld_emailalert_net_smtp($smtp_server, $to_addr,
$subject);
+ }
+ else {
+ $status = &ld_emailalert_mail_send($to_addr, $subject);
+ }
+
+ return($status);
+}
+
+# ld_emailalert_net_smtp
+# Send email alerts via SMTP server
+# pre: smtp: SMTP server defined
+# post: message is emailed if SMTP server is valid and working
+# return: 0 on success
+# 1 on error
+
+sub ld_emailalert_net_smtp
+{
+ my ($smtp_server, $to_addr, $subject) = (@_);
+ my $status = 0;
+
+ use Net::SMTP;
+ use Sys::Hostname;
+
+ my $hostname = hostname;
+
+ my $smtp = Net::SMTP->new($smtp_server);
+
+ if ($smtp) {
+ $smtp->mail("$ENV{USER}\@$hostname");
+ $smtp->to($to_addr);
+ $smtp->data();
+ $smtp->datasend("From: $ENV{USER}\@$hostname\n");
+ $smtp->datasend("To: $to_addr\n");
+ $smtp->datasend("Subject: $subject\n\n");
+ $smtp->datasend("Log-Message: $subject\n" .
+ "Daemon-Status: " .
+ &daemon_status_str() . "\n");
+ $smtp->dataend();
+ $smtp->quit;
+ } else {
+ &ld_log("failed to send SMTP email message\n");
+ $status = 1;
+ }
+
+ return($status);
+}
+
+# ld_emailalert_mail_send
+# Send email alerts via Mail::Send
+# pre: smtp: SMTP server not defined
+# post: message is emailed if one of the Mail::Send methods works
+# return: 0 on success
+# 1 on error
+
+sub ld_emailalert_mail_send
+{
+ my ($to_addr, $subject) = (@_);
+ my $emailmsg;
+ my $emailfh;
+ my $status = 0;
+
use Mail::Send;
&ld_log("emailalert: $subject");
@@ -4160,7 +4240,6 @@ sub ld_emailalert_send
return($status);
}
-
# ld_emailalert_resend
# Resend email alerts as neccessary
# pre: none
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
|