From 5ad7f13a81ed970ac39ef58c03df09527e23aaba Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Sun, 2 Oct 2005 21:34:14 +0000 Subject: [PATCH] added sshsendmail --- sshsendmail | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100755 sshsendmail diff --git a/sshsendmail b/sshsendmail new file mode 100755 index 0000000..6fa22b6 --- /dev/null +++ b/sshsendmail @@ -0,0 +1,150 @@ +#! /usr/bin/perl + +# parse command line options + +# connect to host + +use warnings; +use strict; + +use Getopt::Long; +use Pod::Usage; + +=head1 NAME + +sshsendmail - Uses ssh to send a mail message to a different machine's copy of sendmail. + +=head1 SYNOPSIS + +ss [options] + + Options: + --host, -H host to upload image to + --dir, -D dir to place image (on host of -H set) + --import-options, -I options to import (default -window root) + --convert-options, -C options to convert (for scaling) + --scale, -s make scaled image (default) + --debug, -d debugging level (Default 0) + --help, -h display this help + --man, -m display manual + +=head1 OPTIONS + +=over + +=item B<--identity, -i> + +ssh identity to send to the server we're connecting to + +=item B<--debug, -d> + +Debug verbosity. (Default 0) + +=item B<--help, -h> + +Display brief useage information. + +=item B<--man, -m> + +Display this manual. + +=back + +=head1 EXAMPLES + + ss + +Will pretty much do what you want + + ss -I + +Will take a picture of a window you select. + +=cut + +use User; +use File::Basename qw(basename); +use IO::Handle; +use IO::File; + +use vars qw($DEBUG); + +$0 = basename($0); + +# XXX parse config file + +my %options = (debug => 0, + help => 0, + man => 0, + host => undef, + identity => undef, + username => undef, + log => '/var/mail/log', + 'sendmail-options' => '', + ); + +GetOptions(\%options,'identity|i=s','username|l=s','daemon|d', 'syslog|s', + 'sendmail-options|o=s','log|l=s', + 'help|h|?','man|m'); + +pod2usage() if $options{help}; +pod2usage({verbose=>2}) if $options{man}; + +$DEBUG = $options{debug}; + +if (not @ARGV) { + print STDERR "${0}: Too few command-line arguments\n"; + print <; +#throw away envelope sender +shift @message; +my @recipients; + +while (my $line = shift @message) { + last if $line eq "\n"; + chomp $line; + push @recipients,$line; +} + +@recipients = qw(-t) if not @recipients; + +my @ssh_arguments = ($hostname); + +push @ssh_arguments, '-i', $options{identity} if defined $options{identity}; +push @ssh_arguments, '-l', $options{username} if defined $options{username}; +push @ssh_arguments, q(cat - | /usr/lib/sendmail ).$options{'sendmail-options'}.' '.join(' ',@recipients); +qx(ping -q -c 3 $hostname 2>/dev/null); +if ($?) { + print STDERR "${0}: Failed: unable to ping $hostname\n"; + exit (9); +} +my $ssh = new IO::Handle; +my $log = new IO::File $options{log},'w+' or exit(2); +print {$log} @message or exit(2); +print {$log} join(' ',('ssh',@ssh_arguments)) or exit(2); +open($ssh,'|-','ssh',@ssh_arguments) or exit(17); +print {$ssh} @message or exit(17); +close $ssh or exit(17); +if ($?) { + print STDERR "${0}: Failed: sendmail died for some reason\n"; + print {$log} "${0}: Failed: sendmail died for some reason\n"; + exit (17); +} +else { + print STDERR "${0}: Succeeded: Yeay\n"; + print {$log} "${0}: Failed: sendmail died for some reason\n"; + exit 0; +} -- 2.39.2