emile: move GNUTLS and OpenSSL initialization logic from Eet to Emile.
authorCedric BAIL <cedric.bail@samsung.com>
Tue, 17 Mar 2015 07:49:58 +0000 (08:49 +0100)
committerCedric BAIL <cedric@osg.samsung.com>
Tue, 17 Mar 2015 08:58:17 +0000 (09:58 +0100)
src/lib/eet/eet_lib.c
src/lib/emile/emile_main.c

index dcf11e936dbe7ca12e7db7237255e54d6bc95247..0d5eb58c5c7a001744c5751259c7ae4091335603 100644 (file)
 #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();
index 389f66022b70b332e3f03933606ee44f4a3d47d3..5aa80acd66f475e983bdd2bc067d7ad1c24164d8 100644 (file)
@@ -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;