From: Junghyun Yeon Date: Tue, 23 Aug 2016 05:36:56 +0000 (+0900) Subject: Implement CSR checking routine X-Git-Tag: accepted/tizen/common/20160829.135949^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e2567ece46d9dcb1322993e73da0d68020b5cf7;p=platform%2Fcore%2Fappfw%2Fpkgmgr-server.git Implement CSR checking routine Change-Id: Ida96780aef166ab47f3c9cd7f6f4212896923d8d Signed-off-by: Junghyun Yeon --- diff --git a/CMakeLists.txt b/CMakeLists.txt index accc292..ac0deb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ pkg_check_modules(SERVER_DEPS REQUIRED libgum sqlite3 pkgmgr + csr pkgmgr-installer) FOREACH(SERVER_FLAGS ${SERVER_DEPS_CFLAGS}) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SERVER_FLAGS}") diff --git a/packaging/pkgmgr-server.spec b/packaging/pkgmgr-server.spec index e2448fa..65ebcb1 100644 --- a/packaging/pkgmgr-server.spec +++ b/packaging/pkgmgr-server.spec @@ -25,6 +25,7 @@ BuildRequires: pkgconfig(pkgmgr-installer) BuildRequires: pkgconfig(drm-service-core-tizen) BuildRequires: pkgconfig(libgum) BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(csr) BuildRequires: pkgmgr-info-parser-devel BuildRequires: pkgmgr-info-parser BuildRequires: fdupes diff --git a/src/pkgmgr-server.c b/src/pkgmgr-server.c index 22d15a8..1caa7d1 100644 --- a/src/pkgmgr-server.c +++ b/src/pkgmgr-server.c @@ -42,6 +42,7 @@ #include #include #include +#include #include "pkgmgr_installer.h" #include "pkgmgr-server.h" @@ -410,6 +411,35 @@ static int __pkgcmd_find_pid_by_cmdline(const char *dname, return pid; } +static int __check_csr(backend_info *ptr) +{ + csr_cs_context_h context = NULL; + csr_cs_malware_h detected = NULL; + int ret = -1; + + ret = csr_cs_context_create(&context); + if (ret != CSR_ERROR_NONE) { + ERR("Failed to create csr context"); + return -1; + } + + if (context) { + ret = csr_cs_scan_file(context, ptr->pkgid, &detected); + if (ret != CSR_ERROR_NONE) { + ERR("Failed to scan file[%d]", ret); + return -1; + } + + csr_cs_context_destroy(context); + if (detected != NULL) { + ERR("CSR Denied[%s] Installation", ptr->pkgid); + return -1; + } + } + + return 0; +} + static int __pkgcmd_proc_iter_kill_cmdline(const char *apppath, int option) { DIR *dp; @@ -1427,6 +1457,17 @@ gboolean queue_job(void *data) ptr->req_type = item->req_type; DBG("handle request type [%d]", item->req_type); + if (item->req_type == PKGMGR_REQUEST_TYPE_INSTALL || + item->req_type == PKGMGR_REQUEST_TYPE_MOUNT_INSTALL || + item->req_type == PKGMGR_REQUEST_TYPE_REINSTALL) { + ret = __check_csr(ptr); + if (ret != 0) { + ret = -1; + __send_fail_signal(ptr); + goto end; + } + } + switch (item->req_type) { case PKGMGR_REQUEST_TYPE_INSTALL: __set_backend_busy(x); @@ -1513,6 +1554,7 @@ gboolean queue_job(void *data) break; } +end: ptr->pid = ret; free(item);