keyrouter and input-device only depends on security.
dpms does not need to depends on security.
Change-Id: I84f319dce5d7fb8f8a4c7e1c0d92ce871aeb7986
#include <libds/interfaces/touch.h>
#include "util.h"
+#include "security.h"
#include "input-devicemgr.h"
#define TIZEN_INPUT_DEVICEMGR_VERSION 4
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),
]
#include "libds-tizen/keyrouter.h"
#include "util.h"
+#include "security.h"
#include "keyrouter.h"
#define TIZEN_KEYROUTER_VERSION 2
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),
]
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,
--- /dev/null
+#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;
+}
--- /dev/null
+#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
-#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
+++ /dev/null
-libds_tizen_files += files('security.c')
-libds_tizen_deps += [
- dependency('cynara-client', required: true),
- dependency('cynara-session', required: true),
- dependency('libsmack', required: true)
-]
+++ /dev/null
-#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;
-}