Commit 08a2a939 by Carlos Martín Nieto

openssl: don't try to teardown an unconnected SSL context

SSL_shutdown() does not like it when we pass an unitialized ssl context
to it. This means that when we fail to connect to a host, we hide the
error message saying so with OpenSSL's indecipherable error message.
parent 7dd51284
...@@ -302,6 +302,7 @@ cert_fail_name: ...@@ -302,6 +302,7 @@ cert_fail_name:
typedef struct { typedef struct {
git_stream parent; git_stream parent;
git_stream *io; git_stream *io;
bool connected;
char *host; char *host;
SSL *ssl; SSL *ssl;
git_cert_x509 cert_info; git_cert_x509 cert_info;
...@@ -318,6 +319,8 @@ int openssl_connect(git_stream *stream) ...@@ -318,6 +319,8 @@ int openssl_connect(git_stream *stream)
if ((ret = git_stream_connect(st->io)) < 0) if ((ret = git_stream_connect(st->io)) < 0)
return ret; return ret;
st->connected = true;
bio = BIO_new(&git_stream_bio_method); bio = BIO_new(&git_stream_bio_method);
GITERR_CHECK_ALLOC(bio); GITERR_CHECK_ALLOC(bio);
bio->ptr = st->io; bio->ptr = st->io;
...@@ -405,9 +408,11 @@ int openssl_close(git_stream *stream) ...@@ -405,9 +408,11 @@ int openssl_close(git_stream *stream)
openssl_stream *st = (openssl_stream *) stream; openssl_stream *st = (openssl_stream *) stream;
int ret; int ret;
if ((ret = ssl_teardown(st->ssl)) < 0) if (st->connected && (ret = ssl_teardown(st->ssl)) < 0)
return -1; return -1;
st->connected = false;
return git_stream_close(st->io); return git_stream_close(st->io);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment