X-Git-Url: https://git.sthu.org/?a=blobdiff_plain;f=caff%2Fcaff;h=f9bb72d90404f88805d17e13328ec408c3f892fa;hb=a22fce97e4ae55320bd3e66ea305567f3c83db20;hp=11655a4dcc2a3fd8f8269ea97981abd72a535304;hpb=a98d318d4a212079a507864de1cc19c4eee5940b;p=pgp-tools.git diff --git a/caff/caff b/caff/caff index 11655a4..f9bb72d 100755 --- a/caff/caff +++ b/caff/caff @@ -756,13 +756,13 @@ sub import_key($$) { ###### -# Send an email to $address. If $can_encrypt is true then the mail +# Create an email to $address. If $can_encrypt is true then the mail # will be PGP/MIME encrypted to $longkeyid. # # $longkeyid, $uid, and @attached will be used in the email and the template. ###### -#send_mail($address, $can_encrypt, $longkeyid, $uid, @attached); -sub send_mail($$$@) { +# create_mail($address, $can_encrypt, $longkeyid, $uid, @attached); +sub create_mail($$$@) { my ($address, $can_encrypt, $key_id, @keys) = @_; my $template = Text::Template->new(TYPE => 'STRING', SOURCE => $CONFIG{'mail-template'}) @@ -855,9 +855,21 @@ 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); - 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); + return $message_entity; +}; + +###### +# send a mail message (MIME::Entity) +###### +my $warned_about_broken_mailer_send = 0; +sub send_message($) { + my ($message_entity) = @_; + + if ( (scalar @{$CONFIG{'mailer-send'}} > 0) && !$warned_about_broken_mailer_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.)"); + $warned_about_broken_mailer_send = 1; + }; $message_entity->send(@{$CONFIG{'mailer-send'}}); - $message_entity->stringify(); }; ###### @@ -1064,25 +1076,25 @@ sub import_keys_to_sign() { ################### Getopt::Long::config('bundling'); if (!GetOptions ( - '-h' => \$params->{'help'}, - '--help' => \$params->{'help'}, - '--version' => \$params->{'version'}, - '-V' => \$params->{'version'}, - '-u=s' => \$params->{'local-user'}, - '--local-user=s' => \$params->{'local-user'}, - '-e' => \$params->{'export-old'}, - '--export-old' => \$params->{'export-old'}, - '-E' => \$params->{'no-export-old'}, - '--no-export-old' => \$params->{'no-export-old'}, + '-h' => \$params->{'help'}, + '--help' => \$params->{'help'}, + '--version' => \$params->{'version'}, + '-V' => \$params->{'version'}, + '-u=s' => \$params->{'local-user'}, + '--local-user=s' => \$params->{'local-user'}, + '-e' => \$params->{'export-old'}, + '--export-old' => \$params->{'export-old'}, + '-E' => \$params->{'no-export-old'}, + '--no-export-old' => \$params->{'no-export-old'}, '-m:s' => \$params->{'mail'}, '--mail:s' => \$params->{'mail'}, - '-M' => \$params->{'no-mail'}, - '--no-mail' => \$params->{'no-mail'}, - '-R' => \$params->{'no-download'}, - '--no-download' => \$params->{'no-download'}, - '-S' => \$params->{'no-sign'}, - '--no-sign' => \$params->{'no-sign'}, - '--key-file=s@' => \$params->{'key-files'}, + '-M' => \$params->{'no-mail'}, + '--no-mail' => \$params->{'no-mail'}, + '-R' => \$params->{'no-download'}, + '--no-download' => \$params->{'no-download'}, + '-S' => \$params->{'no-sign'}, + '--no-sign' => \$params->{'no-sign'}, + '--key-file=s@' => \$params->{'key-files'}, '--keys-from-gnupg' => \$params->{'keys-from-gnupg'}, )) { usage(\*STDERR, 1); @@ -1096,15 +1108,9 @@ if ($params->{'version'}) { }; usage(\*STDERR, 1) unless scalar @ARGV >= 1; -$CONFIG{'local-user'} = $params->{'local-user'} if defined $params->{'local-user'}; -$CONFIG{'no-download'} = $params->{'no-download'} if defined $params->{'no-download'}; -$CONFIG{'no-sign'} = $params->{'no-sign'} if defined $params->{'no-sign'}; - -$CONFIG{'no-mail'} = $params->{'no-mail'} if defined $params->{'no-mail'}; -$CONFIG{'mail'} = $params->{'mail'} if defined $params->{'mail'}; - -$CONFIG{'keys-from-gnupg'} = $params->{'keys-from-gnupg'} if defined $params->{'keys-from-gnupg'}; - +for my $hashkey (qw{local-user no-download no-sign no-mail mail keys-from-gnupg}) { + $CONFIG{$hashkey} = $params->{$hashkey} if defined $params->{$hashkey}; +}; # If old 'no-mail' parameter, or if the 'mail' parameter is set to 'no' if ( defined $CONFIG{'no-mail'} || ( defined $CONFIG{'mail'} && $CONFIG{'mail'} eq 'no' ) ) { @@ -1457,17 +1463,18 @@ for my $keyid (@keyids_ok) { if (!$uid->{'is_uat'} && ($uid->{'text'} =~ /@/)) { my $address = $uid->{'text'}; $address =~ s/.*<(.*)>.*/$1/; - if (ask("Mail signature for $uid->{'text'} to '$address'?", $CONFIG{'mail'} ne 'ask-no', $CONFIG{'mail'} eq 'yes')) { - my $mail = send_mail($address, $can_encrypt, $longkeyid, $uid, @attached); - if (defined $mail) { - my $keydir = "$KEYSBASE/$DATE_STRING"; - my $mailfile = "$keydir/$longkeyid.mail.".$uid->{'serial'}.".".sanitize_uid($uid->{'text'}); - open (KEY, ">$mailfile") or die ("Cannot open $mailfile: $!\n"); - print KEY $mail; - close KEY; - } else { - warn "Generating mail failed.\n"; - }; + my $mail = create_mail($address, $can_encrypt, $longkeyid, $uid, @attached); + if (defined $mail) { + my $should_send_mail = ask("Mail signature for $uid->{'text'} to '$address'?", $CONFIG{'mail'} ne 'ask-no', $CONFIG{'mail'} eq 'yes'); + send_message($mail) if $should_send_mail; + + my $keydir = "$KEYSBASE/$DATE_STRING"; + my $mailfile = "$keydir/$longkeyid.mail.".($should_send_mail ? '' : 'unsent.').$uid->{'serial'}.".".sanitize_uid($uid->{'text'}); + open (MAILFILE, ">$mailfile") or die ("Cannot open $mailfile: $!\n"); + print MAILFILE $mail->stringify(); + close MAILFILE; + } else { + warn "Generating mail failed.\n"; }; }; };