diff options
| author | 2010-08-13 10:48:56 +0000 | |
|---|---|---|
| committer | 2010-08-13 10:48:56 +0000 | |
| commit | 80c0d45bb037de66439df11930a29fd34d4ecab5 (patch) | |
| tree | 43118eabba03d5076cf76b9a6f534662bb4101fd /src | |
| parent | implemented $certificate() to get info from local cert (ticket #866) (diff) | |
| download | KVIrc-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.cpp | 21 | ||||
| -rw-r--r-- | src/kvilib/net/kvi_ssl.h | 2 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp | 2 | ||||
| -rw-r--r-- | src/modules/str/libkvistr.cpp | 12 |
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(); |
