X-Git-Url: http://git.sthu.org/?a=blobdiff_plain;f=caff%2Fcaff;h=af8ae22671a4a40f85e3fa522bb403df9f04e7a6;hb=66818ae697389eea714a997da1fbec96b273cedd;hp=6868d416a5600e688af902d22d4568670a480468;hpb=7866200d1dd1e6fdbc9b9cf6cfd1c3c29b75e533;p=pgp-tools.git diff --git a/caff/caff b/caff/caff index 6868d41..af8ae22 100755 --- a/caff/caff +++ b/caff/caff @@ -50,7 +50,8 @@ CA Fire and Forget is a script that helps you in keysigning. It takes a list of keyids on the command line, fetches them from a keyserver and calls GnuPG so that you can sign it. It then mails each key to all its email addresses - only including the one UID that we send to in each mail, pruned from all but self -sigs and sigs done by you. +sigs and sigs done by you. The mailed key is encrypted with itself as a means +to verify that key belongs to the recipient. =head1 OPTIONS @@ -244,6 +245,23 @@ Add a Reply-To: header to messages sent. Default: none. Address to send blind carbon copies to when sending mail. Default: none. +=item B [array] + +Parameters to pass to Mail::Mailer. +This could for example be + + $CONFIG{mailer-send} = [ 'smtp', Server => 'mail.server', Auth => ['user', 'pass'] ] + +to use the perl SMTP client or + + $CONFIG{mailer-send} = [ 'sendmail', '-o8' ] + +to pass arguments to the sendmail program. +For more information run C<< perldoc Mail::Mailer >>. +Setting this option is strongly discouraged. Fix your local MTA +instead. +Default: none. + =back =head1 AUTHORS @@ -285,6 +303,10 @@ my $VERSION = "0.0.0.$REVISION_NUMER"; +sub mywarn($) { + my ($line) = @_; + print "[WARN] $line\n"; +}; sub notice($) { my ($line) = @_; print "[NOTICE] $line\n"; @@ -373,6 +395,22 @@ $Ckeys\$CONFIG{'keyid'} = [ qw{@keys} ]; EOT }; +sub check_executable($$) { + # (GnuPG::Interface gives lousy errors when the gpg binary isn't found, + # so we want to check manually.) + my ($purpose, $fn) = @_; + # Only check provided fnames with a slash in them. + return unless defined $fn; + if ($fn =~ m!/!) { + die ("$PROGRAM_NAME: $purpose executable '$fn' not found.\n") unless -x $fn; + } else { + for my $p (split(':', $ENV{PATH})) { + return if -x "$p/$fn"; + }; + die ("$PROGRAM_NAME: $purpose executable '$fn' not found on path.\n") unless -x $fn; + }; +}; + sub load_config() { my $config = $ENV{'HOME'} . '/.caffrc'; unless (-f $config) { @@ -402,10 +440,15 @@ sub load_config() { $CONFIG{'gpg'} = 'gpg' unless defined $CONFIG{'gpg'}; $CONFIG{'gpg-sign'} = $CONFIG{'gpg'} unless defined $CONFIG{'gpg-sign'}; $CONFIG{'gpg-delsig'} = $CONFIG{'gpg'} unless defined $CONFIG{'gpg-delsig'}; + check_executable("gpg", $CONFIG{'gpg'}); + check_executable("gpg-sign", $CONFIG{'gpg-sign'}); + check_executable("gpg-delsig", $CONFIG{'gpg-delsig'}); $CONFIG{'secret-keyring'} = $ENV{'HOME'}.'/.gnupg/secring.gpg' unless defined $CONFIG{'secret-keyring'}; $CONFIG{'no-download'} = 0 unless defined $CONFIG{'no-download'}; $CONFIG{'no-sign'} = 0 unless defined $CONFIG{'no-sign'}; $CONFIG{'key-files'} = () unless defined $CONFIG{'key-files'}; + $CONFIG{'mailer-send'} = [] unless defined $CONFIG{'mailer-send'}; + die ("$PROGRAM_NAME: mailer-send is not an array ref in $config.\n") unless (ref $CONFIG{'mailer-send'} eq 'ARRAY'); $CONFIG{'mail-template'} = <<'EOM' unless defined $CONFIG{'mail-template'}; Hi, @@ -727,7 +770,8 @@ sub send_mail($$$@) { $message = $stdout; $message_entity = MIME::Entity->build( - Type => 'multipart/encrypted; protocol="application/pgp-encrypted"'); + Type => 'multipart/encrypted; protocol="application/pgp-encrypted"', + Encoding => '7bit'); $message_entity->attach( Type => "application/pgp-encrypted", @@ -749,7 +793,8 @@ sub send_mail($$$@) { $message_entity->head->add("Reply-To", $CONFIG{'reply-to'}) if defined $CONFIG{'reply-to'}; $message_entity->head->add("Bcc", $CONFIG{'bcc'}) if defined $CONFIG{'bcc'}; $message_entity->head->add("User-Agent", $USER_AGENT); - $message_entity->send(); + mywarn("You have set arguments to pass to Mail::Mailer. Better fix your MTA. (Also, Mail::Mailer's error reporting is non existant, so it won't tell you when it doesn't work.)") if (scalar @{$CONFIG{'mailer-send'}} > 0); + $message_entity->send(@{$CONFIG{'mailer-send'}}); $message_entity->stringify(); };