From 4e2567ece46d9dcb1322993e73da0d68020b5cf7 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Tue, 23 Aug 2016 14:36:56 +0900 Subject: [PATCH] Implement CSR checking routine Change-Id: Ida96780aef166ab47f3c9cd7f6f4212896923d8d Signed-off-by: Junghyun Yeon --- CMakeLists.txt | 1 + packaging/pkgmgr-server.spec | 1 + src/pkgmgr-server.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) 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); -- 2.7.4