seperate security to util 34/278234/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 30 Jun 2022 00:29:41 +0000 (09:29 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 18 Jul 2022 05:59:07 +0000 (14:59 +0900)
keyrouter and input-device only depends on security.
dpms does not need to depends on security.

Change-Id: I84f319dce5d7fb8f8a4c7e1c0d92ce871aeb7986

src/input-devicemgr/input-devicemgr.c
src/input-devicemgr/meson.build
src/keyrouter/keyrouter.c
src/keyrouter/meson.build
src/meson.build
src/security.c [new file with mode: 0644]
src/security.h [new file with mode: 0644]
src/util.h
src/util/meson.build [deleted file]
src/util/security.c [deleted file]

index 91b7d5754d3056b43c70a2b87b415295f6fa5e43..b3fc5675c09e64c3ed813bc5eae6581c37a8dab2 100644 (file)
@@ -9,6 +9,7 @@
 #include <libds/interfaces/touch.h>
 
 #include "util.h"
+#include "security.h"
 #include "input-devicemgr.h"
 
 #define TIZEN_INPUT_DEVICEMGR_VERSION 4
index 7006326c2de2da8a08ef63a05212f31d94ef2cab..1e69463e66a2bfb6b966918f981bf8e82c3d2988 100644 (file)
@@ -1,9 +1,11 @@
 libds_tizen_input_devicemgr_files = [
+  tizen_security_files,
   'input-devicemgr.c',
 ]
 
 libds_tizen_input_devicemgr_deps = [
   dep_libds_tizen,
+  deps_tizen_security,
   dependency('tizen-extension-server', required: true),
 ]
 
index 4bcee93ff010af99ff75e8b3478f7c9e3db07a8e..2e825c61b6759715340ed462e86f411be06ff78a 100644 (file)
@@ -8,6 +8,7 @@
 #include "libds-tizen/keyrouter.h"
 
 #include "util.h"
+#include "security.h"
 #include "keyrouter.h"
 
 #define TIZEN_KEYROUTER_VERSION 2
index 7c9f01c11594e95426f469a400c432f8b9aebd56..af235ceb0b802693222c1701eff4197b2de5e1e0 100644 (file)
@@ -1,10 +1,12 @@
 libds_tizen_keyrouter_files = [
+  tizen_security_files,
   'keyrouter_grab.c',
   'keyrouter.c',
 ]
 
 libds_tizen_keyrouter_deps = [
   dep_libds_tizen,
+  deps_tizen_security,
   dependency('tizen-extension-server', required: true),
 ]
 
index 7f7447ecf40904cb58fd97b514ea828b44a4cc19..4d8a290d33caceacb031b518f1afb0517bc27a97 100644 (file)
@@ -22,7 +22,16 @@ libds_tizen_deps = [
   dependency('libds', required: true),
 ]
 
-subdir('util')
+tizen_security_files = [
+  '../security.c',
+]
+
+deps_tizen_security = [
+  base_deps,
+  dependency('cynara-client', required: true),
+  dependency('cynara-session', required: true),
+  dependency('libsmack', required: true)
+]
 
 lib_libds_tizen = shared_library('ds-tizen', libds_tizen_files,
   dependencies: libds_tizen_deps,
diff --git a/src/security.c b/src/security.c
new file mode 100644 (file)
index 0000000..8a8a0ac
--- /dev/null
@@ -0,0 +1,165 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include <cynara-session.h>
+#include <cynara-client.h>
+#include <cynara-creds-socket.h>
+#include <sys/smack.h>
+
+#include <libds/log.h>
+#include "util.h"
+
+#define CYNARA_BUFSIZE 128
+
+struct ds_cynara
+{
+    cynara *handle;
+    int references;
+};
+
+static struct ds_cynara ds_cynara;
+
+static bool ds_cynara_init(void);
+static void ds_cynara_finish(void);
+static bool ds_cynara_check_privilege(pid_t pid, uid_t uid,
+        const char *privilege);
+
+bool
+tizen_security_check_privilege(pid_t pid, uid_t uid, const char *privilege)
+{
+    return ds_cynara_check_privilege(pid, uid, privilege);
+}
+
+bool
+tizen_security_init(void)
+{
+    return ds_cynara_init();
+}
+
+void
+tizen_security_finish(void)
+{
+    ds_cynara_finish();
+}
+
+static void
+print_cynara_error(int err, const char *fmt, ...)
+{
+    int ret;
+    va_list args;
+    char buf[CYNARA_BUFSIZE] = "\0";
+    char tmp[CYNARA_BUFSIZE + CYNARA_BUFSIZE] = "\0";
+
+    if (fmt) {
+        va_start(args, fmt);
+        vsnprintf(tmp, CYNARA_BUFSIZE + CYNARA_BUFSIZE, fmt, args);
+        va_end(args);
+    }
+
+    ret = cynara_strerror(err, buf, CYNARA_BUFSIZE);
+    if (ret != CYNARA_API_SUCCESS) {
+        ds_err("Failed to get cynara_strerror. error : %d (error log about %s: %d)\n", ret, tmp, err);
+        return;
+    }
+
+    ds_err("%s is failed. (%s)\n", tmp, buf);
+}
+
+static bool
+ds_cynara_init(void)
+{
+    int ret = CYNARA_API_SUCCESS;
+    int retry_cnt = 0;
+
+    if (++ds_cynara.references != 1)
+        return true;
+
+    for (retry_cnt = 0; retry_cnt < 5; retry_cnt++) {
+        ds_dbg("Retry cynara initialize: %d\n", retry_cnt + 1);
+
+        ret = cynara_initialize(&ds_cynara.handle, NULL);
+
+        if (CYNARA_API_SUCCESS == ret) {
+            ds_dbg("Succeed to initialize cynara !\n");
+            return true;
+        }
+
+        print_cynara_error(ret, "cynara_initialize");
+    }
+
+    ds_err("Failed to initialize cynara! (error:%d, retry_cnt=%d)\n",
+        ret, retry_cnt);
+
+    --ds_cynara.references;
+
+    return false;
+
+}
+
+static void
+ds_cynara_finish(void)
+{
+    if (ds_cynara.references < 1) {
+        ds_err("%s called without ds_cynara_init\n", __FUNCTION__);
+        return;
+    }
+
+    if (--ds_cynara.references != 0)
+        return;
+
+    cynara_finish(ds_cynara.handle);
+    ds_cynara.handle = NULL;
+}
+
+static bool
+ds_cynara_check_privilege(pid_t pid, uid_t uid, const char *privilege)
+{
+    bool res = false;
+    char *client_smack = NULL;
+    char *client_session = NULL;
+    char uid_str[16] = { 0, };
+    int len = -1;
+    int ret = -1;
+
+    if (!ds_cynara.handle) {
+        ds_err("ds_cynara has not been initialized.\n");
+        return false;
+    }
+
+    ret = smack_new_label_from_process((int)pid, &client_smack);
+    if (ret <= 0)
+        goto finish;
+
+    snprintf(uid_str, 15, "%d", (int)uid);
+
+    client_session = cynara_session_from_pid(pid);
+    if (!client_session)
+        goto finish;
+
+    ret = cynara_check(ds_cynara.handle, client_smack, client_session,
+            uid_str, privilege);
+
+    if (ret == CYNARA_API_ACCESS_ALLOWED)
+        res = true;
+    else
+        print_cynara_error(ret, "privilege: %s, client_smack: %s, pid: %d",
+                privilege, client_smack, pid);
+
+finish:
+    ds_dbg("Privilege Check For '%s' %s pid:%u uid:%u client_smack:%s(len:%d) "
+            "client_session:%s ret:%d",
+            privilege, res ? "SUCCESS" : "FAIL", pid, uid,
+            client_smack ? client_smack : "N/A", len,
+            client_session ? client_session: "N/A", ret);
+
+    if (client_session)
+        free(client_session);
+
+    if (client_smack)
+        free(client_smack);
+
+    return res;
+}
diff --git a/src/security.h b/src/security.h
new file mode 100644 (file)
index 0000000..0c522a0
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef DS_TIZEN_SECURITY_H
+#define DS_TIZEN_SECURITY_H
+
+#include <unistd.h>
+
+bool
+tizen_security_init(void);
+
+void
+tizen_security_finish(void);
+
+bool
+tizen_security_check_privilege(pid_t pid, uid_t uid, const char *privilege);
+
+#endif
index 126467c0b71907f6992dda0f85f01a52988316d6..425caf376e419e38cda0ad525994d2f116ae7f98 100644 (file)
@@ -1,17 +1,6 @@
-#ifndef DS_UTIL_H
-#define DS_UTIL_H
-
-#include <unistd.h>
+#ifndef DS_TIZEN_UTIL_H
+#define DS_TIZEN_UTIL_H
 
 #define MIN(a,b) ((a)<(b)?(a):(b))
 
-bool
-tizen_security_init(void);
-
-void
-tizen_security_finish(void);
-
-bool
-tizen_security_check_privilege(pid_t pid, uid_t uid, const char *privilege);
-
 #endif
diff --git a/src/util/meson.build b/src/util/meson.build
deleted file mode 100644 (file)
index 0ec6a9d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-libds_tizen_files += files('security.c')
-libds_tizen_deps += [
-  dependency('cynara-client', required: true),
-  dependency('cynara-session', required: true),
-  dependency('libsmack', required: true)
-]
diff --git a/src/util/security.c b/src/util/security.c
deleted file mode 100644 (file)
index 8a8a0ac..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-#include <cynara-session.h>
-#include <cynara-client.h>
-#include <cynara-creds-socket.h>
-#include <sys/smack.h>
-
-#include <libds/log.h>
-#include "util.h"
-
-#define CYNARA_BUFSIZE 128
-
-struct ds_cynara
-{
-    cynara *handle;
-    int references;
-};
-
-static struct ds_cynara ds_cynara;
-
-static bool ds_cynara_init(void);
-static void ds_cynara_finish(void);
-static bool ds_cynara_check_privilege(pid_t pid, uid_t uid,
-        const char *privilege);
-
-bool
-tizen_security_check_privilege(pid_t pid, uid_t uid, const char *privilege)
-{
-    return ds_cynara_check_privilege(pid, uid, privilege);
-}
-
-bool
-tizen_security_init(void)
-{
-    return ds_cynara_init();
-}
-
-void
-tizen_security_finish(void)
-{
-    ds_cynara_finish();
-}
-
-static void
-print_cynara_error(int err, const char *fmt, ...)
-{
-    int ret;
-    va_list args;
-    char buf[CYNARA_BUFSIZE] = "\0";
-    char tmp[CYNARA_BUFSIZE + CYNARA_BUFSIZE] = "\0";
-
-    if (fmt) {
-        va_start(args, fmt);
-        vsnprintf(tmp, CYNARA_BUFSIZE + CYNARA_BUFSIZE, fmt, args);
-        va_end(args);
-    }
-
-    ret = cynara_strerror(err, buf, CYNARA_BUFSIZE);
-    if (ret != CYNARA_API_SUCCESS) {
-        ds_err("Failed to get cynara_strerror. error : %d (error log about %s: %d)\n", ret, tmp, err);
-        return;
-    }
-
-    ds_err("%s is failed. (%s)\n", tmp, buf);
-}
-
-static bool
-ds_cynara_init(void)
-{
-    int ret = CYNARA_API_SUCCESS;
-    int retry_cnt = 0;
-
-    if (++ds_cynara.references != 1)
-        return true;
-
-    for (retry_cnt = 0; retry_cnt < 5; retry_cnt++) {
-        ds_dbg("Retry cynara initialize: %d\n", retry_cnt + 1);
-
-        ret = cynara_initialize(&ds_cynara.handle, NULL);
-
-        if (CYNARA_API_SUCCESS == ret) {
-            ds_dbg("Succeed to initialize cynara !\n");
-            return true;
-        }
-
-        print_cynara_error(ret, "cynara_initialize");
-    }
-
-    ds_err("Failed to initialize cynara! (error:%d, retry_cnt=%d)\n",
-        ret, retry_cnt);
-
-    --ds_cynara.references;
-
-    return false;
-
-}
-
-static void
-ds_cynara_finish(void)
-{
-    if (ds_cynara.references < 1) {
-        ds_err("%s called without ds_cynara_init\n", __FUNCTION__);
-        return;
-    }
-
-    if (--ds_cynara.references != 0)
-        return;
-
-    cynara_finish(ds_cynara.handle);
-    ds_cynara.handle = NULL;
-}
-
-static bool
-ds_cynara_check_privilege(pid_t pid, uid_t uid, const char *privilege)
-{
-    bool res = false;
-    char *client_smack = NULL;
-    char *client_session = NULL;
-    char uid_str[16] = { 0, };
-    int len = -1;
-    int ret = -1;
-
-    if (!ds_cynara.handle) {
-        ds_err("ds_cynara has not been initialized.\n");
-        return false;
-    }
-
-    ret = smack_new_label_from_process((int)pid, &client_smack);
-    if (ret <= 0)
-        goto finish;
-
-    snprintf(uid_str, 15, "%d", (int)uid);
-
-    client_session = cynara_session_from_pid(pid);
-    if (!client_session)
-        goto finish;
-
-    ret = cynara_check(ds_cynara.handle, client_smack, client_session,
-            uid_str, privilege);
-
-    if (ret == CYNARA_API_ACCESS_ALLOWED)
-        res = true;
-    else
-        print_cynara_error(ret, "privilege: %s, client_smack: %s, pid: %d",
-                privilege, client_smack, pid);
-
-finish:
-    ds_dbg("Privilege Check For '%s' %s pid:%u uid:%u client_smack:%s(len:%d) "
-            "client_session:%s ret:%d",
-            privilege, res ? "SUCCESS" : "FAIL", pid, uid,
-            client_smack ? client_smack : "N/A", len,
-            client_session ? client_session: "N/A", ret);
-
-    if (client_session)
-        free(client_session);
-
-    if (client_smack)
-        free(client_smack);
-
-    return res;
-}