Skip to content

Commit

Permalink
send-email: enable SSL level 1 debug output
Browse files Browse the repository at this point in the history
If a server's certificate isn't accepted by send-email, the output is:

	Unable to initialize SMTP properly. Check config and use --smtp-debug.

but adding --smtp-debug=1 just produces the same output since we don't
get as far as talking SMTP.

Turning on SSL debug at level 1 gives:

	DEBUG: .../IO/Socket/SSL.pm:1796: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
	DEBUG: .../IO/Socket/SSL.pm:673: fatal SSL error: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
	DEBUG: .../IO/Socket/SSL.pm:1780: IO::Socket::IP configuration failed

IO::Socket::SSL defines level 1 debug as "print out errors from
IO::Socket::SSL and ciphers from Net::SSLeay".  In fact, it aliases
Net::SSLeay::trace which is defined to guarantee silence at level 0 and
only emit error messages at level 1, so let's enable it by default.

The modification of warnings is needed to avoid a warning about:

	Name "IO::Socket::SSL::DEBUG" used only once: possible typo

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
John Keeping authored and Junio C Hamano committed Dec 11, 2015
1 parent 5cb2e16 commit 9d60524
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions git-send-email.perl
Original file line number Diff line number Diff line change
Expand Up @@ -1318,6 +1318,13 @@ sub send_message {
require Net::SMTP::SSL;
$smtp_domain ||= maildomain();
require IO::Socket::SSL;

# Suppress "variable accessed once" warning.
{
no warnings 'once';
$IO::Socket::SSL::DEBUG = 1;
}

# Net::SMTP::SSL->new() does not forward any SSL options
IO::Socket::SSL::set_client_defaults(
ssl_verify_params());
Expand Down

0 comments on commit 9d60524

Please sign in to comment.