diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceSSL/Instance.cpp | 23 | ||||
-rw-r--r-- | cpp/src/IceSSL/PluginI.cpp | 17 |
2 files changed, 25 insertions, 15 deletions
diff --git a/cpp/src/IceSSL/Instance.cpp b/cpp/src/IceSSL/Instance.cpp index 8e9f97d62a7..ed556198398 100644 --- a/cpp/src/IceSSL/Instance.cpp +++ b/cpp/src/IceSSL/Instance.cpp @@ -30,8 +30,11 @@ using namespace IceSSL; void IceInternal::incRef(IceSSL::Instance* p) { p->__incRef(); } void IceInternal::decRef(IceSSL::Instance* p) { p->__decRef(); } -static int -opensslPasswordCallback(char* buf, int size, int flag, void* userData) +extern "C" +{ + +int +IceSSL_opensslPasswordCallback(char* buf, int size, int flag, void* userData) { IceSSL::Instance* p = reinterpret_cast<IceSSL::Instance*>(userData); string passwd = p->password(flag == 1); @@ -49,22 +52,24 @@ opensslPasswordCallback(char* buf, int size, int flag, void* userData) } #ifndef OPENSSL_NO_DH -static DH* -opensslDHCallback(SSL* ssl, int /*isExport*/, int keyLength) +DH* +IceSSL_opensslDHCallback(SSL* ssl, int /*isExport*/, int keyLength) { IceSSL::Instance* p = reinterpret_cast<IceSSL::Instance*>(SSL_CTX_get_ex_data(ssl->ctx, 0)); return p->dhParams(keyLength); } #endif -static int -opensslVerifyCallback(int ok, X509_STORE_CTX* ctx) +int +IceSSL_opensslVerifyCallback(int ok, X509_STORE_CTX* ctx) { SSL* ssl = reinterpret_cast<SSL*>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx())); IceSSL::Instance* p = reinterpret_cast<IceSSL::Instance*>(SSL_CTX_get_ex_data(ssl->ctx, 0)); return p->verifyCallback(ok, ssl, ctx); } +} + static bool passwordError() { @@ -190,7 +195,7 @@ IceSSL::Instance::initialize() throw ex; } } - SSL_CTX_set_verify(_ctx, sslVerifyMode, opensslVerifyCallback); + SSL_CTX_set_verify(_ctx, sslVerifyMode, IceSSL_opensslVerifyCallback); } // @@ -203,7 +208,7 @@ IceSSL::Instance::initialize() string password = properties->getProperty(propPrefix + "Password"); if(!password.empty() || _prompt) { - SSL_CTX_set_default_passwd_cb(_ctx, opensslPasswordCallback); + SSL_CTX_set_default_passwd_cb(_ctx, IceSSL_opensslPasswordCallback); SSL_CTX_set_default_passwd_cb_userdata(_ctx, this); _password = password; } @@ -444,7 +449,7 @@ IceSSL::Instance::initialize() #ifndef OPENSSL_NO_DH _dhParams = new DHParams; SSL_CTX_set_options(_ctx, SSL_OP_SINGLE_DH_USE); - SSL_CTX_set_tmp_dh_callback(_ctx, opensslDHCallback); + SSL_CTX_set_tmp_dh_callback(_ctx, IceSSL_opensslDHCallback); #endif // // Properties have the following form: diff --git a/cpp/src/IceSSL/PluginI.cpp b/cpp/src/IceSSL/PluginI.cpp index 7e7bd1fbe8b..556b24ceea8 100644 --- a/cpp/src/IceSSL/PluginI.cpp +++ b/cpp/src/IceSSL/PluginI.cpp @@ -49,11 +49,14 @@ static IceUtil::StaticMutex staticMutex = ICE_STATIC_MUTEX_INITIALIZER; static int instanceCount = 0; static IceUtil::Mutex* locks = 0; +extern "C" +{ + // // OpenSSL mutex callback. // -static void -opensslLockCallback(int mode, int n, const char* file, int line) +void +IceSSL_opensslLockCallback(int mode, int n, const char* file, int line) { if(mode & CRYPTO_LOCK) { @@ -68,8 +71,8 @@ opensslLockCallback(int mode, int n, const char* file, int line) // // OpenSSL thread id callback. // -static unsigned long -opensslThreadIdCallback() +unsigned long +IceSSL_opensslThreadIdCallback() { #if defined(_WIN32) return static_cast<unsigned long>(GetCurrentThreadId()); @@ -88,6 +91,8 @@ opensslThreadIdCallback() #endif } +} + // // Plugin implementation. // @@ -154,8 +159,8 @@ IceSSL::PluginI::setupSSL(const CommunicatorPtr& communicator) // Create the mutexes and set the callbacks. // locks = new IceUtil::Mutex[CRYPTO_num_locks()]; - CRYPTO_set_locking_callback(opensslLockCallback); - CRYPTO_set_id_callback(opensslThreadIdCallback); + CRYPTO_set_locking_callback(IceSSL_opensslLockCallback); + CRYPTO_set_id_callback(IceSSL_opensslThreadIdCallback); // // Load human-readable error messages. |