Revert "Migrate to openssl 1.1" 44/214844/1 accepted/tizen/unified/20190929.221435 submit/tizen/20190927.052346
authorRandeep Singh <randeep.s@samsung.com>
Fri, 27 Sep 2019 05:21:51 +0000 (05:21 +0000)
committerRandeep Singh <randeep.s@samsung.com>
Fri, 27 Sep 2019 05:21:51 +0000 (05:21 +0000)
This reverts commit 3026248cf34aad012eb486f287adcd33d4d3578f.

Change-Id: Id66fac61bc5739411968c8953bf76d5df7de5e6c

email-api/email-api-smime.c
email-common-use/include/email-internal-types.h
email-core/CMakeLists.txt
email-core/email-core-smime.c
email-core/include/email-core-smime.h
email-daemon/CMakeLists.txt
email-daemon/email-daemon-event.c
email-daemon/email-daemon-init.c
email-daemon/include/email-daemon-event.h
packaging/email-service.spec

index 07c8d18fc4eaedb239f638e68f93e5c3aee59e6b..40b9fcfc2c4aee8b6cc1521b18e8a7616bf05288 100755 (executable)
@@ -137,10 +137,13 @@ EXPORT_API int email_get_decrypt_message(int mail_id, email_mail_data_t **output
         }
 
        if (p_output_mail_data->smime_type == EMAIL_SMIME_ENCRYPTED || p_output_mail_data->smime_type == EMAIL_SMIME_SIGNED_AND_ENCRYPTED) {
+                emcore_init_openssl_library();
                if (!emcore_smime_get_decrypt_message(p_output_attachment_data[i].attachment_path, p_account_tbl->certificate_path, &decrypt_filepath, &err)) {
                        EM_DEBUG_EXCEPTION("emcore_smime_get_decrypt_message failed");
+                        emcore_clean_openssl_library();
                        goto FINISH_OFF;
                }
+                emcore_clean_openssl_library();
        } else if (p_output_mail_data->smime_type == EMAIL_PGP_ENCRYPTED) {
                if ((err = emcore_pgp_get_decrypted_message(p_output_attachment_data[i].attachment_path, p_output_mail_data->pgp_password, false, &decrypt_filepath, verify)) != EMAIL_ERROR_NONE) {
                        EM_DEBUG_EXCEPTION("emcore_pgp_get_decrypted_message failed : [%d]", err);
@@ -247,10 +250,13 @@ EXPORT_API int email_get_decrypt_message_ex(email_mail_data_t *input_mail_data,
         }
 
        if (input_mail_data->smime_type == EMAIL_SMIME_ENCRYPTED || input_mail_data->smime_type == EMAIL_SMIME_SIGNED_AND_ENCRYPTED) {
+               emcore_init_openssl_library();
                if (!emcore_smime_get_decrypt_message(input_attachment_data[i].attachment_path, p_account_tbl->certificate_path, &decrypt_filepath, &err)) {
                        EM_DEBUG_EXCEPTION("emcore_smime_get_decrypt_message failed");
+                       emcore_clean_openssl_library();
                        goto FINISH_OFF;
                }
+               emcore_clean_openssl_library();
        } else if (input_mail_data->smime_type == EMAIL_PGP_ENCRYPTED) {
                if ((err = emcore_pgp_get_decrypted_message(input_attachment_data[i].attachment_path, input_mail_data->pgp_password, false, &decrypt_filepath, verify)) != EMAIL_ERROR_NONE) {
                        EM_DEBUG_EXCEPTION("emcore_pgp_get_decrypted_message failed : [%d]", err);
@@ -374,9 +380,11 @@ EXPORT_API int email_verify_signature_ex(email_mail_data_t *input_mail_data, ema
        }
 
        if (input_mail_data->smime_type == EMAIL_SMIME_SIGNED) {
+               emcore_init_openssl_library();
                if (!emcore_verify_signature(input_attachment_data[count].attachment_path, input_mail_data->file_path_mime_entity, verify, &err))
                        EM_DEBUG_EXCEPTION("emcore_verify_signature failed : [%d]", err);
 
+               emcore_clean_openssl_library();
        } else if (input_mail_data->smime_type == EMAIL_PGP_SIGNED) {
                if ((err = emcore_pgp_get_verify_signature(input_attachment_data[count].attachment_path, input_mail_data->file_path_mime_entity, input_mail_data->digest_type, verify)) != EMAIL_ERROR_NONE)
                        EM_DEBUG_EXCEPTION("emcore_pgp_get_verify_siganture failed : [%d]", err);
index 6c8b6918a1708e835e7bd64f941c18dfe90d8b85..a9d839a6ef1705e18564a4ae0da9685383086d3b 100755 (executable)
@@ -90,6 +90,7 @@ extern "C"
 #define __FEATURE_BODY_SEARCH__
 #define __FEATURE_ACCESS_CONTROL__
 #define __FEATURE_UPDATE_DB_TABLE_SCHEMA__
+#define __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
 /* #define __FEATURE_COMPARE_DOMAIN__ */
 /* #define __FEATURE_FORK_FOR_CURL__ */
 /* #define __FEATURE_USE_DRM_API__ */
index f4bd0680283994b964806d53255af9ad6ffe8d4e..6a111cc8b6a9a872b696f18f6ba04e997ffb90cd 100755 (executable)
@@ -71,7 +71,7 @@ INCLUDE_DIRECTORIES(
 
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(storage_pkgs REQUIRED glib-2.0 dlog openssl1.1 vconf dbus-1 contacts-service2 libtzplatform-config)
+pkg_check_modules(storage_pkgs REQUIRED glib-2.0 dlog openssl vconf dbus-1 contacts-service2 libtzplatform-config)
 
 set(EXTRA_CFLAGS "")
 FOREACH(flag ${storage_pkgs_CFLAGS})
@@ -110,7 +110,7 @@ INCLUDE_DIRECTORIES(
 )
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(network_pkgs REQUIRED glib-2.0 uw-imap-toolkit dbus-1 vconf dlog openssl1.1)
+pkg_check_modules(network_pkgs REQUIRED glib-2.0 uw-imap-toolkit dbus-1 vconf dlog openssl)
 
 FOREACH(flag ${network_pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
@@ -234,8 +234,8 @@ INCLUDE_DIRECTORIES(
 
 INCLUDE(FindPkgConfig)
 SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 key-manager tpkp-curl
-                       uw-imap-toolkit vconf vconf-internal-keys contacts-service2
-                       openssl1.1 accounts-svc alarm-service notification libcurl libxml-2.0
+                       uw-imap-toolkit vconf vconf-internal-keys contacts-service2 
+                       openssl accounts-svc alarm-service notification libcurl libxml-2.0 
                        cert-svc-vcore badge capi-appfw-application icu-i18n gmime-2.6 storage dpm cryptsvc)
 
 pkg_check_modules(core_pkgs REQUIRED ${PKG_MODULES})
index 2127d3454abec410b7ec7a5690e7e7c33c9225b8..3ee8862c8779d4c10af173764e50d8a2af9801f6 100755 (executable)
@@ -1038,3 +1038,18 @@ FINISH_OFF:
        return err;
 }
 
+INTERNAL_FUNC void emcore_init_openssl_library()
+{
+        EM_DEBUG_FUNC_BEGIN();
+        SSL_library_init();
+        ERR_load_crypto_strings();
+        EM_DEBUG_FUNC_END();
+}
+
+INTERNAL_FUNC void emcore_clean_openssl_library()
+{
+        EM_DEBUG_FUNC_BEGIN();
+        ERR_free_strings();
+        EVP_cleanup();
+        EM_DEBUG_FUNC_END();
+}
index 1af087247dedca8617499f1604ce962f51a8662a..5aa3587e5508975ad85a108ddfc2172c651061a0 100755 (executable)
@@ -47,4 +47,7 @@ INTERNAL_FUNC int emcore_smime_get_decrypt_message(char *encrypt_message, char *
 
 INTERNAL_FUNC int emcore_convert_mail_data_to_smime_data(char *multi_user_name, emstorage_account_tbl_t *account_tbl_item, email_mail_data_t *input_mail_data, email_attachment_data_t *input_attachment_data_list, int input_attachment_count, email_mail_data_t **output_mail_data, email_attachment_data_t **output_attachment_data_list, int *output_attachment_count);
 
+INTERNAL_FUNC void emcore_init_openssl_library();
+INTERNAL_FUNC void emcore_clean_openssl_library();
+
 #endif /* EM_CORE_SMIME_H_ */
index fa6f7dccc60f988923231f517afaeb9dde165e0f..e69788088f6b6b6c7f648b5b7b0973ef4b30df78 100755 (executable)
@@ -48,9 +48,9 @@ INCLUDE_DIRECTORIES(
 )
 
 INCLUDE(FindPkgConfig)
-SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 uw-imap-toolkit
-                               vconf vconf-internal-keys contacts-service2 alarm-service
-                               msg-service libwbxml2 libsmack notification
+SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 openssl uw-imap-toolkit 
+                               vconf vconf-internal-keys contacts-service2 alarm-service 
+                               msg-service libwbxml2 libsmack notification 
                                capi-network-connection gmime-2.6)
 
 pkg_check_modules(main_pkgs REQUIRED ${PKG_MODULES})
index 8409a26a0bc7a02cc5333b98a8381965a894b712..a7d9e70a12c2e30bc22e492aa1aff55d04dda0ba 100644 (file)
@@ -130,6 +130,66 @@ extern email_event_t *sync_failed_event_data;
 
 static gpointer partial_body_download_thread(gpointer data);
 
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+
+#include <openssl/crypto.h>
+
+#define MAX_THREAD_NUMBER   100
+
+static pthread_mutex_t *lock_cs;
+static long *lock_count;
+
+void pthreads_locking_callback(int mode, int type, char *file, int line)
+{
+       if (mode & CRYPTO_LOCK) {
+               pthread_mutex_lock(&(lock_cs[type]));
+               lock_count[type]++;
+       } else {
+               pthread_mutex_unlock(&(lock_cs[type]));
+       }
+}
+
+unsigned long pthreads_thread_id(void)
+{
+       return (unsigned long)pthread_self();
+}
+
+INTERNAL_FUNC void emdaemon_setup_handler_for_open_ssl_multithread(void)
+{
+       EM_DEBUG_FUNC_BEGIN();
+       int i = 0;
+
+       lock_cs    = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
+       lock_count = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(long));
+
+       for (i = 0; i < CRYPTO_num_locks(); i++) {
+               lock_count[i] = 0;
+               pthread_mutex_init(&(lock_cs[i]), NULL);
+       }
+
+       CRYPTO_set_id_callback((unsigned long (*)())pthreads_thread_id);
+       CRYPTO_set_locking_callback((void (*)())pthreads_locking_callback);
+       EM_DEBUG_FUNC_END();
+}
+
+INTERNAL_FUNC void emdaemon_cleanup_handler_for_open_ssl_multithread(void)
+{
+       EM_DEBUG_FUNC_BEGIN();
+       int i = 0;
+
+       CRYPTO_set_locking_callback(NULL);
+       for (i = 0; i < CRYPTO_num_locks(); i++) {
+               pthread_mutex_destroy(&(lock_cs[i]));
+               EM_DEBUG_LOG("%8ld:%s", lock_count[i], CRYPTO_get_lock_name(i));
+       }
+       OPENSSL_free(lock_cs);
+       OPENSSL_free(lock_count);
+
+       EM_DEBUG_FUNC_END();
+}
+
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
 /* start api event_data loop */
 INTERNAL_FUNC int emdaemon_start_event_loop(int *err_code)
 {
index 96745b865aef847724b397774e180ef911ac6726..f61de58b409f10d1c7cf55bf818da8b1d2a00447 100755 (executable)
@@ -99,6 +99,10 @@ static int _emdaemon_load_email_core()
        if (!emdaemon_core_init(&err))
                goto FINISH_OFF;
 
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+       emdaemon_setup_handler_for_open_ssl_multithread();
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
        if (emdaemon_start_event_loop(&err) < 0)
                goto FINISH_OFF;
 
@@ -152,6 +156,10 @@ static int _emdaemon_unload_email_core()
        emcore_stop_auto_download_loop(&err);
 #endif
 
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+       emdaemon_cleanup_handler_for_open_ssl_multithread();
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
        EM_DEBUG_FUNC_END("err [%d]", err);
        return err;
 }
@@ -651,6 +659,9 @@ INTERNAL_FUNC int emdaemon_finalize(int* err_code)
                goto FINISH_OFF;
        }
 
+        /* Openssl clean up */
+        emcore_clean_openssl_library();
+
        ret = true;
 
 FINISH_OFF:
@@ -738,6 +749,9 @@ INTERNAL_FUNC int emdaemon_core_init(int *err_code)
 
        emdaemon_init_alarm_data_list();
 
+       /* Openssl library init */
+       emcore_init_openssl_library();
+
        if (err_code)
                *err_code = EMAIL_ERROR_NONE;
 
index 13cfd22646acc43ad54a9ddd9f15001c247f6c4d..799338e8e238859c5df08f5d25d65bddf0fec67f 100755 (executable)
@@ -34,6 +34,11 @@ INTERNAL_FUNC int emdaemon_start_event_loop(int *err_code);
 INTERNAL_FUNC int emdaemon_start_event_loop_for_sending_mails(int *err_code);
 INTERNAL_FUNC int emdaemon_start_thread_for_downloading_partial_body(int *err_code);
 
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+INTERNAL_FUNC void emdaemon_setup_handler_for_open_ssl_multithread(void);
+INTERNAL_FUNC void emdaemon_cleanup_handler_for_open_ssl_multithread(void);
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 387a5f68384dd26adb2b6bdc5ce1bbb0f8265fb1..3f93a85728807a68dc2f7131b48be3e6494416e7 100755 (executable)
@@ -31,7 +31,7 @@ BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(dbus-1)
 BuildRequires:  pkgconfig(uw-imap-toolkit)
-BuildRequires:  pkgconfig(openssl1.1)
+BuildRequires:  pkgconfig(openssl)
 BuildRequires:  pkgconfig(alarm-service)
 BuildRequires:  pkgconfig(key-manager)
 BuildRequires:  pkgconfig(notification)