summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeesun Kim <iamjs.kim@samsung.com>2018-01-31 11:19:51 +0900
committerJeesun Kim <iamjs.kim@samsung.com>2018-02-06 11:41:22 +0900
commit6418268f777dc991817c9f631cc6dcf2ba2bdd25 (patch)
tree704c2a0467445fd014b335d9ebe79eff35903586
parent4d78bec2830a038c213e467a5b6c71047eca35d5 (diff)
downloadmsg-service-6418268f777dc991817c9f631cc6dcf2ba2bdd25.tar.gz
msg-service-6418268f777dc991817c9f631cc6dcf2ba2bdd25.tar.bz2
msg-service-6418268f777dc991817c9f631cc6dcf2ba2bdd25.zip
remove csr dependency. use dlopen
Change-Id: I9be6a1666ea723eef922d24d42602dc94b4bd491
-rwxr-xr-xpackaging/msg-service.spec1
-rwxr-xr-xutils/CMakeLists.txt6
-rwxr-xr-xutils/MsgUtilFile.cpp109
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 <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;
@@ -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;
}
+
+