git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] send-email: Net::SMTP::SSL is obsolete, use only when necessary

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Mar 18, 2017, 22:47 UTC
Message-ID
<CACBZZX5j1dYk8aeRED7T7iJ=b32aFUpfUWPpMpmtofBL3QnVXQ@mail.gmail.com>
In-Reply-To
<20170318222311.9993-1-dennis@kaarsemaker.net>

On Sat, Mar 18, 2017 at 11:23 PM, Dennis Kaarsemaker <dennis@kaarsemaker.net> wrote:

Show 25 quoted lines
> Net::SMTP itself can do the necessary SSL and STARTTLS bits just fine
> since version 1.28, and Net::SMTP::SSL is now deprecated. Since 1.28
> isn't that old yet, keep the old code in place and use it when
> necessary.
>
> Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
> ---
>  Note: I've only been able to test the starttls bits. None of the smtp servers
>  I use actually use ssl, only starttls.
>
>  git-send-email.perl | 52 ++++++++++++++++++++++++++++++++++------------------
>  1 file changed, 34 insertions(+), 18 deletions(-)
>
> diff --git a/git-send-email.perl b/git-send-email.perl
> index eea0a517f7..e247ea39dd 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -1353,10 +1353,12 @@ EOF
>                         die __("The required SMTP server is not properly defined.")
>                 }
>
> +               require Net::SMTP;
> +               my $use_net_smtp_ssl = $Net::SMTP::VERSION lt "1.28";
> +               $smtp_domain ||= maildomain();
> +

While Net::SMTP is unlikely to change its versioning scheme, let's use comparisons via the version module here in case they do change it to something silly, and this ends up introducing a bug.

E.g. 04.00 would be considered a higher version by CPAN than 1.28, but not by this code:

    $ perl -wE 'my ($x, $y) = @ARGV; my ($vx, $vy) = map {
version->parse($_) } ($x, $y); say $vx < $vy ? "vlower" : "vhigher";
say $x lt $y ? "slower" : "shigher"' 04.00 1.28
    vhigher
    slower

If we grep ::VERSION we can find other cases where we've gotten this wrong, unlikely to bite us in practice, but version.pm is in core (so core that you don't even need to use/require it), so let's do this better for new code.

>[...]
> +                                       if ($smtp->code != 220) {
> +                                               die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message);
Here a new message you're adding gets __(), makes sense.
Show 16 quoted lines
> +                                       }
> +                                       require Net::SMTP::SSL;
>                                         $smtp = Net::SMTP::SSL->start_SSL($smtp,
>                                                                           ssl_verify_params())
>                                                 or die "STARTTLS failed! ".IO::Socket::SSL::errstr();
> -                                       $smtp_encryption = '';
> -                                       # Send EHLO again to receive fresh
> -                                       # supported commands
> -                                       $smtp->hello($smtp_domain);
> -                               } else {
> -                                       die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message);
>                                 }
> +                               else {
> +                                       $smtp->starttls(ssl_verify_params())
> +                                               or die "STARTTLS failed! ".IO::Socket::SSL::errstr();
> +                               }

I see you just copied that from above but I wonder if it makes sense to just mark both occurrences with __() too while we're at it.

Previous: Dennis KaarsemakerNext: Dennis Kaarsemaker
Message 6 of 16 in “Remove dependency on deprecated Net::SMTP::SSL”
  1. Remove dependency on deprecated Net::SMTP::SSLMike Fisher, Nov 20, 2016
  2. brian m. carlsonNov 20, 2016
  3. Renato BotelhoJan 13, 2017
  4. Torsten BögershausenNov 21, 2016
  5. send-email: Net::SMTP::SSL is obsolete, use only when necessaryDennis Kaarsemaker, Mar 18, 2017
  6. Ævar Arnfjörð BjarmasonMar 18, 2017
  7. Dennis KaarsemakerMar 18, 2017
  8. send-email: Net::SMTP::SSL is obsolete, use only when necessaryDennis Kaarsemaker, Mar 24, 2017
  9. Dennis KaarsemakerMay 4, 2017
  10. Dennis KaarsemakerMay 19, 2017
  11. Ævar Arnfjörð BjarmasonMay 20, 2017
  12. Junio C HamanoMay 31, 2017
  13. Dennis KaarsemakerJun 1, 2017
  14. Jonathan NiederMay 31, 2017
  15. Junio C HamanoMay 31, 2017
  16. Jonathan NiederMay 31, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.