summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceSSL/Instance.cpp23
-rw-r--r--cpp/src/IceSSL/PluginI.cpp17
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.