]> git.ipfire.org Git - thirdparty/git.git/commitdiff
send-email: set SSL options through IO::Socket::SSL::set_client_defaults
authorThomas Rast <tr@thomasrast.ch>
Sun, 1 Dec 2013 22:48:43 +0000 (23:48 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 Dec 2013 19:45:32 +0000 (11:45 -0800)
When --smtp-encryption=ssl, we use a Net::SMTP::SSL connection,
passing its ->new all the options that would otherwise go to
Net::SMTP->new (most options) and IO::Socket::SSL->start_SSL (for the
SSL options).

However, while Net::SMTP::SSL replaces the underlying socket class
with an SSL socket, it does nothing to allow passing options to that
socket.  So the SSL-relevant options are lost.

Fortunately there is an escape hatch: we can directly set the options
with IO::Socket::SSL::set_client_defaults.  They will then persist
within the IO::Socket::SSL module.

Signed-off-by: Thomas Rast <tr@thomasrast.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-send-email.perl

index 9f31c68b82332ec22119893c24fb00048d085c8d..2016d9c6198957943a8bd2510e217fe72412062a 100755 (executable)
@@ -1214,11 +1214,14 @@ X-Mailer: git-send-email $gitversion
                        $smtp_server_port ||= 465; # ssmtp
                        require Net::SMTP::SSL;
                        $smtp_domain ||= maildomain();
+                       require IO::Socket::SSL;
+                       # Net::SMTP::SSL->new() does not forward any SSL options
+                       IO::Socket::SSL::set_client_defaults(
+                               ssl_verify_params());
                        $smtp ||= Net::SMTP::SSL->new($smtp_server,
                                                      Hello => $smtp_domain,
                                                      Port => $smtp_server_port,
-                                                     Debug => $debug_net_smtp,
-                                                     ssl_verify_params());
+                                                     Debug => $debug_net_smtp);
                }
                else {
                        require Net::SMTP;