aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2010-08-13 10:48:56 +0000
committerGravatar Fabio Bas2010-08-13 10:48:56 +0000
commit80c0d45bb037de66439df11930a29fd34d4ecab5 (patch)
tree43118eabba03d5076cf76b9a6f534662bb4101fd /src
parentimplemented $certificate() to get info from local cert (ticket #866) (diff)
downloadKVIrc-80c0d45bb037de66439df11930a29fd34d4ecab5.tar.gz
KVIrc-80c0d45bb037de66439df11930a29fd34d4ecab5.tar.bz2
KVIrc-80c0d45bb037de66439df11930a29fd34d4ecab5.zip
Changed kvissl initialization so that we can initialize ssl also from outside the kvissl class
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4863 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
-rw-r--r--src/kvilib/net/kvi_ssl.cpp21
-rw-r--r--src/kvilib/net/kvi_ssl.h2
-rw-r--r--src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp2
-rw-r--r--src/modules/str/libkvistr.cpp12
4 files changed, 26 insertions, 11 deletions
diff --git a/src/kvilib/net/kvi_ssl.cpp b/src/kvilib/net/kvi_ssl.cpp
index 5581ba9a1..2625d9bd8 100644
--- a/src/kvilib/net/kvi_ssl.cpp
+++ b/src/kvilib/net/kvi_ssl.cpp
@@ -241,11 +241,12 @@ void KviSSL::globalDestroy()
if(dh_1024)DH_free(dh_1024);
if(dh_2048)DH_free(dh_2048);
if(dh_4096)DH_free(dh_4096);
+ globalSSLDestroy();
delete g_pSSLMutex;
g_pSSLMutex = 0;
}
-KviSSL::KviSSL()
+void KviSSL::globalSSLInit()
{
my_ssl_lock();
if(!g_bSSLInitialized)
@@ -253,9 +254,27 @@ KviSSL::KviSSL()
// FIXME: this should be done only if SSL is really needed
SSL_library_init();
SSL_load_error_strings();
+ //needed to support SHA2 in < OpenSSL 0.9.8o and 1.0.0a
+ OpenSSL_add_all_algorithms();
g_bSSLInitialized = true;
}
my_ssl_unlock();
+}
+
+void KviSSL::globalSSLDestroy()
+{
+ my_ssl_lock();
+ if(g_bSSLInitialized)
+ {
+ EVP_cleanup();
+ g_bSSLInitialized = false;
+ }
+ my_ssl_unlock();
+}
+
+KviSSL::KviSSL()
+{
+ globalSSLInit();
m_pSSL = 0;
m_pSSLCtx = 0;
}
diff --git a/src/kvilib/net/kvi_ssl.h b/src/kvilib/net/kvi_ssl.h
index ff6dc78ad..80f608090 100644
--- a/src/kvilib/net/kvi_ssl.h
+++ b/src/kvilib/net/kvi_ssl.h
@@ -157,6 +157,8 @@ public:
public:
static void globalInit();
static void globalDestroy();
+ static void globalSSLInit();
+ static void globalSSLDestroy();
public:
bool initSocket(kvi_socket_t fd);
bool initContext(KviSSL::Method m);
diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
index fd53a61fd..8364ddbe0 100644
--- a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
+++ b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
@@ -484,7 +484,7 @@ namespace KviKvsCoreFunctions
KVSCF_pContext->warning(__tr2qs_ctx("This executable was built without SSL support","dcc"));
return true;
#else
-
+ KviSSL::globalSSLInit();
X509 *cert = 0;
if(!KVI_OPTION_BOOL(KviOption_boolUseSSLCertificate))
diff --git a/src/modules/str/libkvistr.cpp b/src/modules/str/libkvistr.cpp
index 84eaf7a0e..87b71d5b3 100644
--- a/src/modules/str/libkvistr.cpp
+++ b/src/modules/str/libkvistr.cpp
@@ -40,7 +40,7 @@
#if defined( COMPILE_SSL_SUPPORT ) && !defined( COMPILE_NO_EMBEDDED_CODE )
// The current implementation
- #include <openssl/ssl.h>
+ #include <kvi_ssl.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#elif defined(COMPILE_NO_EMBEDDED_CODE)
@@ -2229,15 +2229,12 @@ static bool str_kvs_fnc_evpSign(KviKvsModuleFunctionCall * c)
#if defined(COMPILE_SSL_SUPPORT) && !defined(COMPILE_NO_EMBEDDED_CODE)
+ KviSSL::globalSSLInit();
EVP_MD_CTX md_ctx;
EVP_PKEY * pKey = 0;
unsigned int len = 0;
unsigned char *sig = 0;
- //FIXME do we need a mutex here?
- SSL_library_init();
- SSL_load_error_strings();
-
if(szCert.isEmpty())
{
//use default cert
@@ -2364,10 +2361,7 @@ static bool str_kvs_fnc_evpVerify(KviKvsModuleFunctionCall * c)
#if defined(COMPILE_SSL_SUPPORT) && !defined(COMPILE_NO_EMBEDDED_CODE)
- //FIXME do we need a mutex here?
- SSL_library_init();
- SSL_load_error_strings();
-
+ KviSSL::globalSSLInit();
szSign = QByteArray::fromBase64(szSignB64);
const char * message = szMessage.data();