Implement CSR checking routine 71/84971/1 accepted/tizen/common/20160829.135949 submit/tizen/20160829.010716
authorJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 23 Aug 2016 05:36:56 +0000 (14:36 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 23 Aug 2016 05:36:56 +0000 (14:36 +0900)
Change-Id: Ida96780aef166ab47f3c9cd7f6f4212896923d8d
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
CMakeLists.txt
packaging/pkgmgr-server.spec
src/pkgmgr-server.c

index accc292..ac0deb3 100644 (file)
@@ -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}")
index e2448fa..65ebcb1 100644 (file)
@@ -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
index 22d15a8..1caa7d1 100644 (file)
@@ -42,6 +42,7 @@
 #include <pkgmgr/pkgmgr_parser_db.h>
 #include <tzplatform_config.h>
 #include <drm-tizen-apps.h>
+#include <csr-content-screening.h>
 
 #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);\r
+       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);