diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2018-01-29 15:14:17 -0500 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2018-01-29 15:14:17 -0500 |
commit | 08b47080172a3f718f395b867773eee49fe10c18 (patch) | |
tree | 9b077f10195c536ed960a6384847c3679a93eb42 /src/mongo/util | |
parent | dd0855388eeb9d4302087926a0f61eb8e0e47fc1 (diff) | |
download | mongo-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.h | 8 | ||||
-rw-r--r-- | src/mongo/util/net/ssl_manager_openssl.cpp | 40 |
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(); } |