summaryrefslogtreecommitdiff
path: root/src/mongo/util
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2018-01-29 15:14:17 -0500
committerTess Avitabile <tess.avitabile@mongodb.com>2018-01-29 15:14:17 -0500
commit08b47080172a3f718f395b867773eee49fe10c18 (patch)
tree9b077f10195c536ed960a6384847c3679a93eb42 /src/mongo/util
parentdd0855388eeb9d4302087926a0f61eb8e0e47fc1 (diff)
downloadmongo-08b47080172a3f718f395b867773eee49fe10c18.tar.gz
Revert "SERVER-32751 Simplify SSLManagerInterface"
This reverts commit 6d41f4b4c26de7af4752d8854092bcdd2f8de097.
Diffstat (limited to 'src/mongo/util')
-rw-r--r--src/mongo/util/net/ssl_manager.h8
-rw-r--r--src/mongo/util/net/ssl_manager_openssl.cpp40
2 files changed, 41 insertions, 7 deletions
diff --git a/src/mongo/util/net/ssl_manager.h b/src/mongo/util/net/ssl_manager.h
index ea02f94496c..ebf6021fec9 100644
--- a/src/mongo/util/net/ssl_manager.h
+++ b/src/mongo/util/net/ssl_manager.h
@@ -157,8 +157,16 @@ public:
virtual int SSL_write(SSLConnectionInterface* conn, const void* buf, int num) = 0;
+ virtual unsigned long ERR_get_error() = 0;
+
+ virtual char* ERR_error_string(unsigned long e, char* buf) = 0;
+
+ virtual int SSL_get_error(const SSLConnectionInterface* conn, int ret) = 0;
+
virtual int SSL_shutdown(SSLConnectionInterface* conn) = 0;
+ virtual void SSL_free(SSLConnectionInterface* conn) = 0;
+
enum class ConnectionDirection { kIncoming, kOutgoing };
/**
diff --git a/src/mongo/util/net/ssl_manager_openssl.cpp b/src/mongo/util/net/ssl_manager_openssl.cpp
index a9290610d53..fb141e4c9a7 100644
--- a/src/mongo/util/net/ssl_manager_openssl.cpp
+++ b/src/mongo/util/net/ssl_manager_openssl.cpp
@@ -352,7 +352,15 @@ public:
int SSL_write(SSLConnectionInterface* conn, const void* buf, int num) final;
- int SSL_shutdown(SSLConnectionInterface* conn) final;
+ virtual unsigned long ERR_get_error() final;
+
+ virtual char* ERR_error_string(unsigned long e, char* buf) final;
+
+ virtual int SSL_get_error(const SSLConnectionInterface* conn, int ret) final;
+
+ virtual int SSL_shutdown(SSLConnectionInterface* conn) final;
+
+ void SSL_free(SSLConnectionInterface* conn) final;
private:
const int _rolesNid = OBJ_create(mongodbRolesOID.identifier.c_str(),
@@ -627,7 +635,7 @@ int SSLManagerOpenSSL::SSL_read(SSLConnectionInterface* connInterface, void* buf
} while (!_doneWithSSLOp(conn, status));
if (status <= 0)
- _handleSSLError(SSL_get_error(conn->ssl, status), status);
+ _handleSSLError(SSL_get_error(conn, status), status);
return status;
}
@@ -639,10 +647,23 @@ int SSLManagerOpenSSL::SSL_write(SSLConnectionInterface* connInterface, const vo
} while (!_doneWithSSLOp(conn, status));
if (status <= 0)
- _handleSSLError(SSL_get_error(conn->ssl, status), status);
+ _handleSSLError(SSL_get_error(conn, status), status);
return status;
}
+unsigned long SSLManagerOpenSSL::ERR_get_error() {
+ return ::ERR_get_error();
+}
+
+char* SSLManagerOpenSSL::ERR_error_string(unsigned long e, char* buf) {
+ return ::ERR_error_string(e, buf);
+}
+
+int SSLManagerOpenSSL::SSL_get_error(const SSLConnectionInterface* connInterface, int ret) {
+ const SSLConnection* conn = checked_cast<const SSLConnection*>(connInterface);
+ return ::SSL_get_error(conn->ssl, ret);
+}
+
int SSLManagerOpenSSL::SSL_shutdown(SSLConnectionInterface* connInterface) {
int status;
SSLConnectionOpenSSL* conn = checked_cast<SSLConnectionOpenSSL*>(connInterface);
@@ -651,10 +672,15 @@ int SSLManagerOpenSSL::SSL_shutdown(SSLConnectionInterface* connInterface) {
} while (!_doneWithSSLOp(conn, status));
if (status < 0)
- _handleSSLError(SSL_get_error(conn->ssl, status), status);
+ _handleSSLError(SSL_get_error(conn, status), status);
return status;
}
+void SSLManagerOpenSSL::SSL_free(SSLConnectionInterface* connInterface) {
+ SSLConnectionOpenSSL* conn = checked_cast<SSLConnectionOpenSSL*>(connInterface);
+ return ::SSL_free(conn->ssl);
+}
+
Status SSLManagerOpenSSL::initSSLContext(SSL_CTX* context,
const SSLParams& params,
ConnectionDirection direction) {
@@ -1190,14 +1216,14 @@ SSLConnectionInterface* SSLManagerOpenSSL::connect(Socket* socket) {
const auto undotted = removeFQDNRoot(socket->remoteAddr().hostOrIp());
int ret = ::SSL_set_tlsext_host_name(sslConn->ssl, undotted.c_str());
if (ret != 1)
- _handleSSLError(SSL_get_error(sslConn.get()->ssl, ret), ret);
+ _handleSSLError(SSL_get_error(sslConn.get(), ret), ret);
do {
ret = ::SSL_connect(sslConn->ssl);
} while (!_doneWithSSLOp(sslConn.get(), ret));
if (ret != 1)
- _handleSSLError(SSL_get_error(sslConn.get()->ssl, ret), ret);
+ _handleSSLError(SSL_get_error(sslConn.get(), ret), ret);
return sslConn.release();
}
@@ -1214,7 +1240,7 @@ SSLConnectionInterface* SSLManagerOpenSSL::accept(Socket* socket,
} while (!_doneWithSSLOp(sslConn.get(), ret));
if (ret != 1)
- _handleSSLError(SSL_get_error(sslConn.get()->ssl, ret), ret);
+ _handleSSLError(SSL_get_error(sslConn.get(), ret), ret);
return sslConn.release();
}