Use the ca-certificates in /etc/ssl/certs by default (that's where most distributions put it). SSL_VERIFY_NONE is now the fallback mode. Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- Documentation/config.txt | 3 +++ Documentation/git-send-email.txt | 4 ++++ git-send-email.perl | 22 ++++++++++++++++++---- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index b4d4887..b216a63 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -2048,6 +2048,9 @@ sendemail.smtpencryption:: sendemail.smtpssl:: Deprecated alias for 'sendemail.smtpencryption = ssl'. +sendemail.smtpsslcertpath:: + Path to ca-certificates. Defaults to `/etc/ssl/certs`. + sendemail.<identity>.*:: Identity-specific versions of the 'sendemail.*' parameters found below, taking precedence over those when the this diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index 40a9a9a..605f263 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -198,6 +198,10 @@ must be used for each option. --smtp-ssl:: Legacy alias for '--smtp-encryption ssl'. +--smtp-ssl-cert-path:: + Path to ca-certificates. Defaults to `/etc/ssl/certs`, or + 'sendemail.smtpsslcertpath'. + --smtp-user=<user>:: Username for SMTP-AUTH. Default is the value of 'sendemail.smtpuser'; if a username is not specified (with '--smtp-user' or 'sendemail.smtpuser'), diff --git a/git-send-email.perl b/git-send-email.perl index 758100d..026bcbc 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -69,6 +69,8 @@ git send-email [options] <file | directory | rev-list options > --smtp-pass <str> * Password for SMTP-AUTH; not necessary. --smtp-encryption <str> * tls or ssl; anything else disables. --smtp-ssl * Deprecated. Use '--smtp-encryption ssl'. + --smtp-ssl-cert-path <str> * Path to ca-certificates. Defaults to + /etc/ssl/certs. --smtp-domain <str> * The domain name sent to HELO/EHLO handshake --smtp-debug <0|1> * Disable, enable Net::SMTP debug. @@ -195,6 +197,7 @@ my ($thread, $chain_reply_to, $suppress_from, $signed_off_by_cc); my ($to_cmd, $cc_cmd); my ($smtp_server, $smtp_server_port, @smtp_server_options); my ($smtp_authuser, $smtp_encryption); +my ($smtp_ssl_cert_path); my ($identity, $aliasfiletype, @alias_files, $smtp_domain); my ($validate, $confirm); my (@suppress_cc); @@ -220,6 +223,7 @@ my %config_settings = ( "smtpserveroption" => \@smtp_server_options, "smtpuser" => \$smtp_authuser, "smtppass" => \$smtp_authpass, + "smtpsslcertpath" => \$smtp_ssl_cert_path, "smtpdomain" => \$smtp_domain, "to" => \@initial_to, "tocmd" => \$to_cmd, @@ -1193,13 +1197,23 @@ X-Mailer: git-send-email $gitversion Debug => $debug_net_smtp); if ($smtp_encryption eq 'tls' && $smtp) { require Net::SMTP::SSL; - use IO::Socket::SSL qw(SSL_VERIFY_NONE); + use IO::Socket::SSL qw(SSL_VERIFY_PEER SSL_VERIFY_NONE); $smtp->command('STARTTLS'); $smtp->response(); if ($smtp->code == 220) { - $smtp = Net::SMTP::SSL->start_SSL($smtp, - SSL_verify_mode => SSL_VERIFY_NONE) - or die "STARTTLS failed! ".$smtp->message; + # Attempt to use a ca-certificate by default + $smtp_ssl_cert_path |= "/etc/ssl/certs"; + if (-d $smtp_ssl_cert_path) { + $smtp = Net::SMTP::SSL->start_SSL($smtp, + SSL_verify_mode => SSL_VERIFY_PEER, + SSL_ca_path => $smtp_ssl_cert_path) + or die "STARTTLS failed! ".$smtp->message; + } else { + print STDERR "warning: Using SSL_VERIFY_NONE. See sendemail.smtpsslcertpath.\n"; + $smtp = Net::SMTP::SSL->start_SSL($smtp, + SSL_verify_mode => SSL_VERIFY_NONE) + or die "STARTTLS failed! ".$smtp->message; + } $smtp_encryption = ''; # Send EHLO again to receive fresh # supported commands -- 1.8.3.2.723.gad7967b.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html