remove csr dependency. use dlopen 11/168811/2
authorJeesun Kim <iamjs.kim@samsung.com>
Wed, 31 Jan 2018 02:19:51 +0000 (11:19 +0900)
committerjeesun kim <iamjs.kim@samsung.com>
Tue, 6 Feb 2018 02:42:17 +0000 (02:42 +0000)
Change-Id: I9be6a1666ea723eef922d24d42602dc94b4bd491

packaging/msg-service.spec
utils/CMakeLists.txt
utils/MsgUtilFile.cpp

index f8947aa..ae0bde5 100755 (executable)
@@ -28,7 +28,6 @@ BuildRequires: pkgconfig(capi-system-device)
 BuildRequires: pkgconfig(capi-system-info)
 BuildRequires: pkgconfig(capi-telephony)
 BuildRequires: pkgconfig(contacts-service2)
-BuildRequires: pkgconfig(csr)
 BuildRequires: pkgconfig(cynara-client)
 BuildRequires: pkgconfig(cynara-creds-commons)
 BuildRequires: pkgconfig(cynara-creds-socket)
index 5b5b6a6..05b5f0c 100755 (executable)
@@ -45,7 +45,7 @@ INCLUDE_DIRECTORIES(
 
 INCLUDE(FindPkgConfig)
 
-SET(PKG_MODULES glib-2.0 vconf dlog libxml-2.0 boost json-glib-1.0 capi-system-info capi-media-thumbnail-util capi-media-image-util aul sqlite3 capi-media-metadata-extractor icu-uc libsystemd-login libsmack csr contacts-service2)
+SET(PKG_MODULES glib-2.0 vconf dlog libxml-2.0 boost json-glib-1.0 capi-system-info capi-media-thumbnail-util capi-media-image-util aul sqlite3 capi-media-metadata-extractor icu-uc libsystemd-login libsmack contacts-service2)
 pkg_check_modules(utils_pkgs REQUIRED ${PKG_MODULES})
 
 FOREACH(flag ${utils_pkgs_CFLAGS})
@@ -57,10 +57,10 @@ ADD_DEFINITIONS("-DFEATURE_JAVA_MMS")
 
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
 
-SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -ldl")
 
 ADD_LIBRARY(${UTILS-LIB} SHARED ${UTILS-SRCS})
-TARGET_LINK_LIBRARIES(${UTILS-LIB} ${utils_pkgs_LDFLAGS} rt ${VOBJECT-LIB})
+TARGET_LINK_LIBRARIES(${UTILS-LIB} ${utils_pkgs_LDFLAGS} rt ${VOBJECT-LIB} dl)
 
 INSTALL(TARGETS ${UTILS-LIB} DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries)
 
index 0915819..8793c65 100755 (executable)
@@ -26,8 +26,8 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <libgen.h>
+#include <dlfcn.h>
 
-#include <csr-content-screening.h>
 #include <thumbnail_util.h>
 #include <image_util.h>
 
@@ -44,6 +44,8 @@ extern "C" {
        #include <aul.h>
 }
 
+#define PATH_LIBCSR_CLIENT "/usr/lib/libcsr-client.so.2"
+
 MsgMutex g_mx;
 MsgCndVar g_cv;
 
@@ -1244,14 +1246,15 @@ void MsgGetMimeType(char *filePath, char *mimeType, int size)
        aul_get_mime_from_file(filePath, mimeType, size);
 }
 
-
 int MsgTcsScanFile(const char *filepath, int *bLevel)
 {
        MSG_BEGIN();
-       csr_cs_context_h csr_handle = NULL;
-       csr_cs_malware_h detected = NULL;
-       int ret = 0;
-       int ret_b_level = -1;
+
+       int (*_csr_cs_context_create)(void **handle);
+       int (*_csr_cs_scan_file)(void *handle, const char *filepath, void **malware);
+       int (*_csr_cs_context_destroy)(void *handle);
+       int (*_csr_cs_malware_get_severity)(void *malware, void *severity);
+       int (*_csr_cs_malware_get_name)(void *malware, char **name);
 
        if (MsgAccessFile(filepath, R_OK) == false) {
                MSG_SEC_DEBUG("not exist source file [%s]", filepath);
@@ -1260,51 +1263,81 @@ int MsgTcsScanFile(const char *filepath, int *bLevel)
 
        MSG_SEC_DEBUG("Scanning file name : %s\n", filepath);
 
-       ret = csr_cs_context_create(&csr_handle);
-       if (ret != CSR_ERROR_NONE) {
+       void *lib_handle = NULL;
+       lib_handle = dlopen(PATH_LIBCSR_CLIENT, RTLD_LAZY);
+       if (!lib_handle) {
+               MSG_ERR("Unable to open %s", PATH_LIBCSR_CLIENT);
+               return 0;
+       }
+
+       _csr_cs_context_create = (int(*)(void**))dlsym(lib_handle, "csr_cs_context_create");
+       _csr_cs_scan_file = (int(*)(void*, const char*, void**))dlsym(lib_handle, "csr_cs_scan_file");
+       _csr_cs_context_destroy = (int(*)(void*))dlsym(lib_handle, "csr_cs_context_destroy");
+       _csr_cs_malware_get_severity = (int(*)(void*, void*))dlsym(lib_handle, "csr_cs_malware_get_severity");
+       _csr_cs_malware_get_name = (int(*)(void*, char**))dlsym(lib_handle, "csr_cs_malware_get_name");
+
+       int ret = 0;
+       if (!_csr_cs_context_create || !_csr_cs_scan_file || !_csr_cs_context_destroy
+                       || !_csr_cs_malware_get_severity || !_csr_cs_malware_get_name) {
+               MSG_ERR("Failed to load CSR symbols");
+               if (lib_handle)
+                               dlclose(lib_handle);
+               return -1;
+       }
+
+       void *csr_handle = NULL;
+       ret = _csr_cs_context_create(&csr_handle);
+       if (ret != 0) {
                MSG_DEBUG("csr_cs_context_create error: err = %d\n", ret);
+               if (lib_handle)
+                               dlclose(lib_handle);
                return -1;
        }
 
-       ret = csr_cs_scan_file(csr_handle, filepath, &detected);
-       if (ret == CSR_ERROR_NONE) {
-               if (detected) {
-                       csr_cs_severity_level_e severity = CSR_CS_SEVERITY_LOW;
-                       char *name = NULL;
+       do {
+               void *detected = NULL;
+               ret = _csr_cs_scan_file(csr_handle, filepath, &detected);
+               if (ret != 0) {
+                       MSG_DEBUG("csr_cs_scan_file fail: err = %d\n", ret);
+                       break;
+               }
 
-                       ret = csr_cs_malware_get_severity(detected, &severity);
-                       if (ret != CSR_ERROR_NONE) {
-                               MSG_DEBUG("csr_cs_malware_get_severity error: err = %d\n", ret);
-                       }
+               if (NULL == detected) {
+                       MSG_DEBUG("Nothing detected");
+                       break;
+               }
 
-                       ret = csr_cs_malware_get_name(detected, &name);
-                       if (ret != CSR_ERROR_NONE) {
-                               MSG_DEBUG("csr_cs_malware_get_name error: err = %d\n", ret);
-                       }
+               int severity = 0x01; /* CSR_CS_SEVERITY_LOW */
+               ret = _csr_cs_malware_get_severity(detected, &severity);
+               if (ret != 0) {
+                       MSG_DEBUG("csr_cs_malware_get_severity error: err = %d\n", ret);
+               }
+               MSG_DEBUG(" +-- Malware Severity class: %d\n", severity);
 
-                       MSG_SEC_DEBUG(" +-- Malware Name: [%s]\n", name);
-                       MSG_DEBUG(" +-- Malware Severity class: %d\n", severity);
+               char *name = NULL;
+               ret = _csr_cs_malware_get_name(detected, &name);
+               if (ret != 0) {
+                       MSG_DEBUG("csr_cs_malware_get_name error: err = %d\n", ret);
+               }
+               MSG_SEC_DEBUG(" +-- Malware Name: [%s]\n", name);
 
-                       ret_b_level = (int)severity;
+               if (name)
+                       free(name);
 
-                       if (name) {
-                               free(name);
-                               name = NULL;
-                       }
-               }
-       } else {
-               MSG_DEBUG("csr_cs_scan_file fail: err = %d\n", ret);
-       }
+               if (bLevel)
+                       *bLevel = severity;
 
-       ret = csr_cs_context_destroy(csr_handle);
-       if (ret != CSR_ERROR_NONE) {
+       } while (0);
+
+       ret = _csr_cs_context_destroy(csr_handle);
+       if (ret != 0)
                MSG_DEBUG("csr_cs_context_destroy error: err = %d\n", ret);
-       }
 
-       if (bLevel)
-               *bLevel = ret_b_level;
+       if (lib_handle)
+               dlclose(lib_handle);
 
        MSG_END();
-
        return 0;
 }
+
+