From 6418268f777dc991817c9f631cc6dcf2ba2bdd25 Mon Sep 17 00:00:00 2001 From: Jeesun Kim Date: Wed, 31 Jan 2018 11:19:51 +0900 Subject: [PATCH] remove csr dependency. use dlopen Change-Id: I9be6a1666ea723eef922d24d42602dc94b4bd491 --- packaging/msg-service.spec | 1 - utils/CMakeLists.txt | 6 +-- utils/MsgUtilFile.cpp | 109 +++++++++++++++++++++++++++++---------------- 3 files changed, 74 insertions(+), 42 deletions(-) diff --git a/packaging/msg-service.spec b/packaging/msg-service.spec index f8947aa..ae0bde5 100755 --- a/packaging/msg-service.spec +++ b/packaging/msg-service.spec @@ -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) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 5b5b6a6..05b5f0c 100755 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -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) diff --git a/utils/MsgUtilFile.cpp b/utils/MsgUtilFile.cpp index bfc58a5..bf8c35e 100755 --- a/utils/MsgUtilFile.cpp +++ b/utils/MsgUtilFile.cpp @@ -26,8 +26,8 @@ #include #include #include +#include -#include #include #include @@ -44,6 +44,8 @@ extern "C" { #include } +#define PATH_LIBCSR_CLIENT "/usr/lib/libcsr-client.so.2" + MsgMutex g_mx; MsgCndVar g_cv; @@ -1276,14 +1278,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); @@ -1292,51 +1295,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; + + } while (0); - ret = csr_cs_context_destroy(csr_handle); - if (ret != CSR_ERROR_NONE) { + 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; } + + -- 2.7.4