X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sshsendmail;h=25330fc27328166b70c6fa1fd54f24d1ecf8368e;hb=c415a1ba1aeca58b537ccd13176ce6968f834091;hp=c9c4530ba0733e06e635da8db8a27182ca1fa45a;hpb=8aa40a6264318236c4c237e17b2dd1283fa331c0;p=bin.git diff --git a/sshsendmail b/sshsendmail index c9c4530..25330fc 100755 --- a/sshsendmail +++ b/sshsendmail @@ -87,7 +87,21 @@ my %options = (debug => 0, 'sendmail_options' => [], ); +my $new_nullmailer = 0; +## The new nullmailer passes options on STDIN and the message on FD 3. +my $message_fd = \*STDIN; +eval { + my $fh = IO::Handle->new() or + die "Unable to create new fd"; + $fh->fdopen(3,"r") or + die "Unable to open fd 3: $!"; + $message_fd = $fh; + $new_nullmailer = 1; + push @ARGV, map {chomp; "--$_"} ; +}; + GetOptions(\%options,'identity|i=s','username|l=s','daemon|d', 'syslog|s', + 'host=s', 'sendmail_options|sendmail-options|o=s@', 'help|h|?','man|m'); @@ -96,7 +110,7 @@ pod2usage({verbose=>2}) if $options{man}; $DEBUG = $options{debug}; -if (not @ARGV) { +if (not (@ARGV or defined $options{host})) { print STDERR "${0}: Too few command-line arguments\n"; print <; +my @message = <$message_fd>; #throw away envelope sender shift @message; my @recipients; @@ -125,7 +141,7 @@ while (my $line = shift @message) { @recipients = qw(-t) if not @recipients; -my @ssh_arguments = ($hostname); +my @ssh_arguments = ($options{host}); push @ssh_arguments, '-i', $options{identity} if defined $options{identity}; push @ssh_arguments, '-l', $options{username} if defined $options{username}; @@ -135,7 +151,7 @@ push @sendmail_options, push @sendmail_options,@recipients; $Data::Dumper::Useqq=1; my $sendmail_options = Data::Dumper->Dump([\@sendmail_options],[qw(*sendmail_options)]); -print STDERR $sendmail_options; +print STDERR $sendmail_options if $DEBUG; push @ssh_arguments, q(perl -e ').</dev/null); +qx(ping -q -w 3 -c 1 $options{host} 2>/dev/null); if ($?) { - syslog(LOG_WARNING,"${0}: Failed: unable to ping $hostname\n"); + syslog(LOG_WARNING,"${0}: Failed: unable to ping $options{host}\n"); exit (9); } -print STDERR md5_hex(join('',@message))."\n"; +print STDERR md5_hex(join('',@message))."\n" if $DEBUG; my $ssh = new IO::Handle; open($ssh,'|-','ssh',@ssh_arguments) or exit(17); print {$ssh} @message or exit(17);