send-email: set SSL options through IO::Socket::SSL::set_client_defaults

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>

Thomas Rast committed Dec 1, 2013 at 23:48 UTC 5508f3ed2c1cdb515e658cfc29ca0d5cd6683190
1 file changed +5 -2
git-send-email.perl
+5 -2
@@ -1214,11 +1214,14 @@ X-Mailer: git-send-email $gitversion
1214 $smtp_server_port ||= 465; # ssmtp
1215 require Net::SMTP::SSL;
1216 $smtp_domain ||= maildomain();
1217 + require IO::Socket::SSL;
1218 + # Net::SMTP::SSL->new() does not forward any SSL options
1219 + IO::Socket::SSL::set_client_defaults(
1220 + ssl_verify_params());
1221 $smtp ||= Net::SMTP::SSL->new($smtp_server,
1222 Hello => $smtp_domain,
1223 Port => $smtp_server_port,
1220 - Debug => $debug_net_smtp,
1221 - ssl_verify_params());
1224 + Debug => $debug_net_smtp);
1225 }
1226 else {
1227 require Net::SMTP;