From: Don Armstrong Date: Sat, 6 Jan 2018 00:02:30 +0000 (-0800) Subject: handle nullmailer versions ≥ 2.0 X-Git-Url: https://git.donarmstrong.com/?p=bin.git;a=commitdiff_plain;h=7c68456bcfc96abb50257894561985047ad9c7ef handle nullmailer versions ≥ 2.0 --- diff --git a/sshsendmail b/sshsendmail index 6256596..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}; @@ -164,9 +180,9 @@ EOF $Data::Dumper::Useqq=0; print STDERR Dumper(\@ssh_arguments) if $DEBUG; -qx(ping -q -w 3 -c 1 $hostname 2>/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" if $DEBUG;