BuildRequires: pkgconfig(json-c)
BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(capi-system-resource)
+BuildRequires: pkgconfig(cynara-creds-pid)
+BuildRequires: pkgconfig(security-manager)
Requires: /bin/cp
Requires(post): /sbin/ldconfig
#include <errno.h>
#include <assert.h>
#include <stdarg.h>
+#include <stdlib.h>
+
+#include <cynara-creds-pid.h>
+#include <security-manager/app-runtime.h>
#include "shared/log.h"
#include "libsyscommon/proc.h"
int syscommon_proc_get_attr_current(pid_t pid, char *buf, int len)
{
- return proc_get_string(buf, len, "/proc/%d/attr/current", pid);
+ char *client = NULL;
+ int ret;
+
+ if (!buf)
+ return -EINVAL;
+
+ ret = cynara_creds_pid_get_client(pid, CLIENT_METHOD_DEFAULT, &client);
+ if (ret != CYNARA_API_SUCCESS)
+ return -EINVAL;
+
+ ret = snprintf(buf, len, "%s", client);
+
+ free(client);
+ client = NULL;
+
+ if (ret < 0)
+ return -EIO;
+
+ if (ret >= len)
+ return -EOVERFLOW;
+
+ return 0;
}
int syscommon_proc_is_app(pid_t pid)
{
- char attr[NAME_MAX] = { 0 ,};
- int ret = 0;
+ bool is_app = false;
+ int ret;
- ret = syscommon_proc_get_attr_current(pid, attr, sizeof(attr));
- if (ret != 0) {
- _E("Failed to read privilege, %d", ret);
+ ret = security_manager_is_app_from_pid(pid, &is_app);
+ if (ret != SECURITY_MANAGER_SUCCESS)
return -1;
- }
-
- if (!strncmp("System", attr, sizeof("System")))
- return 0;
-
- if (!strncmp("User", attr, sizeof("User")))
- return 0;
-
- if (!strncmp("System::Privileged", attr, sizeof("System::Privileged")))
- return 0;
- return 1;
+ return is_app;
}