forked from enlightenment/efl
emile: move GNUTLS and OpenSSL initialization logic from Eet to Emile.
This commit is contained in:
parent
0b04186a7f
commit
2d342c2814
|
@ -26,20 +26,7 @@
|
|||
#endif /* ifdef HAVE_EVIL */
|
||||
|
||||
#include <Eina.h>
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
# include <gnutls/gnutls.h>
|
||||
# include <gcrypt.h>
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
# include <openssl/err.h>
|
||||
# include <openssl/evp.h>
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
#include <Emile.h>
|
||||
|
||||
#include "Eet.h"
|
||||
#include "Eet_private.h"
|
||||
|
@ -562,49 +549,20 @@ eet_init(void)
|
|||
goto shutdown_mempool;
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
/* Before the library can be used, it must initialize itself if needed. */
|
||||
if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
|
||||
if (!emile_init())
|
||||
{
|
||||
gcry_check_version(NULL);
|
||||
/* Disable warning messages about problems with the secure memory subsystem.
|
||||
This command should be run right after gcry_check_version. */
|
||||
if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
|
||||
goto shutdown_eet; /* This command is used to allocate a pool of secure memory and thus
|
||||
enabling the use of secure memory. It also drops all extra privileges the
|
||||
process has (i.e. if it is run as setuid (root)). If the argument nbytes
|
||||
is 0, secure memory will be disabled. The minimum amount of secure memory
|
||||
allocated is currently 16384 bytes; you may thus use a value of 1 to
|
||||
request that default size. */
|
||||
|
||||
if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0))
|
||||
WRN(
|
||||
"BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
|
||||
EINA_LOG_ERR("Emile: failed to initialize");
|
||||
goto shutdown_emile;
|
||||
}
|
||||
|
||||
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
|
||||
WRN(
|
||||
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
||||
|
||||
if (gnutls_global_init())
|
||||
goto shutdown_eet;
|
||||
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
#ifdef HAVE_OPENSSL
|
||||
ERR_load_crypto_strings();
|
||||
OpenSSL_add_all_algorithms();
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
|
||||
eina_log_timing(_eet_log_dom_global,
|
||||
EINA_LOG_STATE_STOP,
|
||||
EINA_LOG_STATE_INIT);
|
||||
EINA_LOG_STATE_STOP,
|
||||
EINA_LOG_STATE_INIT);
|
||||
|
||||
return eet_init_count;
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
shutdown_eet:
|
||||
shutdown_emile:
|
||||
eet_node_shutdown();
|
||||
#endif
|
||||
shutdown_mempool:
|
||||
eet_mempool_shutdown();
|
||||
unregister_log_domain:
|
||||
|
@ -627,8 +585,8 @@ eet_shutdown(void)
|
|||
return eet_init_count;
|
||||
|
||||
eina_log_timing(_eet_log_dom_global,
|
||||
EINA_LOG_STATE_START,
|
||||
EINA_LOG_STATE_SHUTDOWN);
|
||||
EINA_LOG_STATE_START,
|
||||
EINA_LOG_STATE_SHUTDOWN);
|
||||
|
||||
eet_clearcache();
|
||||
|
||||
|
@ -663,26 +621,8 @@ eet_shutdown(void)
|
|||
|
||||
eina_lock_free(&eet_cache_lock);
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
/* Note that gnutls has a leak where it doesnt free stuff it alloced
|
||||
* on init. valgrind trace here:
|
||||
* 21 bytes in 1 blocks are definitely lost in loss record 24 of 194
|
||||
* at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
|
||||
* by 0x68AC801: strdup (strdup.c:43)
|
||||
* by 0xD215B6A: p11_kit_registered_module_to_name (in /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.0.0)
|
||||
* by 0x9571574: gnutls_pkcs11_init (in /usr/lib/x86_64-linux-gnu/libgnutls.so.26.21.8)
|
||||
* by 0x955B031: gnutls_global_init (in /usr/lib/x86_64-linux-gnu/libgnutls.so.26.21.8)
|
||||
* by 0x6DFD6D0: eet_init (eet_lib.c:608)
|
||||
*
|
||||
* yes - i've tried calling gnutls_pkcs11_deinit() by hand but no luck.
|
||||
* the leak is in there.
|
||||
*/
|
||||
gnutls_global_deinit();
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
#ifdef HAVE_OPENSSL
|
||||
EVP_cleanup();
|
||||
ERR_free_strings();
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
emile_shutdown();
|
||||
|
||||
eina_log_domain_unregister(_eet_log_dom_global);
|
||||
_eet_log_dom_global = -1;
|
||||
eina_shutdown();
|
||||
|
|
|
@ -1,6 +1,27 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif /* ifdef HAVE_CONFIG_H */
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
# include <gnutls/gnutls.h>
|
||||
# include <gnutls/x509.h>
|
||||
# include <gcrypt.h>
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
# include <openssl/ssl.h>
|
||||
# include <openssl/err.h>
|
||||
# include <openssl/evp.h>
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
|
||||
#include <Eina.h>
|
||||
|
||||
#include "Emile.h"
|
||||
#include "emile_private.h"
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
|
||||
static unsigned int _emile_init_count = 0;
|
||||
int _emile_log_dom_global = -1;
|
||||
|
@ -21,7 +42,38 @@ emile_init(void)
|
|||
goto shutdown_eina;
|
||||
}
|
||||
|
||||
// FIXME: Init the rest here.
|
||||
#ifdef HAVE_GNUTLS
|
||||
/* Before the library can be used, it must initialize itself if needed. */
|
||||
if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
|
||||
{
|
||||
gcry_check_version(NULL);
|
||||
/* Disable warning messages about problems with the secure memory subsystem.
|
||||
This command should be run right after gcry_check_version. */
|
||||
if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
|
||||
goto shutdown_eet; /* This command is used to allocate a pool of secure memory and thus
|
||||
enabling the use of secure memory. It also drops all extra privileges the
|
||||
process has (i.e. if it is run as setuid (root)). If the argument nbytes
|
||||
is 0, secure memory will be disabled. The minimum amount of secure memory
|
||||
allocated is currently 16384 bytes; you may thus use a value of 1 to
|
||||
request that default size. */
|
||||
|
||||
if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0))
|
||||
WRN(
|
||||
"BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
|
||||
}
|
||||
|
||||
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
|
||||
WRN(
|
||||
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
||||
|
||||
if (gnutls_global_init())
|
||||
goto shutdown_eet;
|
||||
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
#ifdef HAVE_OPENSSL
|
||||
ERR_load_crypto_strings();
|
||||
OpenSSL_add_all_algorithms();
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
|
||||
eina_log_timing(_emile_log_dom_global,
|
||||
EINA_LOG_STATE_STOP,
|
||||
|
@ -45,7 +97,26 @@ emile_shutdown(void)
|
|||
EINA_LOG_STATE_START,
|
||||
EINA_LOG_STATE_SHUTDOWN);
|
||||
|
||||
// FIXME: Shutdown the rest here.
|
||||
#ifdef HAVE_GNUTLS
|
||||
/* Note that gnutls has a leak where it doesnt free stuff it alloced
|
||||
* on init. valgrind trace here:
|
||||
* 21 bytes in 1 blocks are definitely lost in loss record 24 of 194
|
||||
* at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
|
||||
* by 0x68AC801: strdup (strdup.c:43)
|
||||
* by 0xD215B6A: p11_kit_registered_module_to_name (in /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.0.0)
|
||||
* by 0x9571574: gnutls_pkcs11_init (in /usr/lib/x86_64-linux-gnu/libgnutls.so.26.21.8)
|
||||
* by 0x955B031: gnutls_global_init (in /usr/lib/x86_64-linux-gnu/libgnutls.so.26.21.8)
|
||||
* by 0x6DFD6D0: eet_init (eet_lib.c:608)
|
||||
*
|
||||
* yes - i've tried calling gnutls_pkcs11_deinit() by hand but no luck.
|
||||
* the leak is in there.
|
||||
*/
|
||||
gnutls_global_deinit();
|
||||
#endif /* ifdef HAVE_GNUTLS */
|
||||
#ifdef HAVE_OPENSSL
|
||||
EVP_cleanup();
|
||||
ERR_free_strings();
|
||||
#endif /* ifdef HAVE_OPENSSL */
|
||||
|
||||
eina_log_domain_unregister(_emile_log_dom_global);
|
||||
_emile_log_dom_global = -1;
|
||||
|
|
Loading…
Reference in New Issue