#include <tzplatform_config.h>
#include "common_utils.h"
+#include "privacy_setting.h"
#include "privacy_view.h"
static GList* pkg_list;
bool first;
#define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
+#define UIDMAXLEN 10
+#define GLOBAL_UID tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
static void gl_del_cb(void *data, Evas_Object *obj)
{
static void __get_package_privacy_status(pkg_data_s* pkg_data, char* privilege_name)
{
GList* l;
+ char uid[UIDMAXLEN];
+ if (pkg_data->is_global)
+ snprintf(uid, UIDMAXLEN, "%d", GLOBAL_UID);
+ else
+ snprintf(uid, UIDMAXLEN, "%d", getuid());
+
+ for (l = pkg_data->applist; l != NULL; l = l->next) {
+ char* appid = (char*)l->data;
+
+ /* Make policy filter to get specific uid, appid and privilege's status */
+ policy_entry* p_filter;
+ int ret = 0;
+ ret = security_manager_policy_entry_new(&p_filter);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %s", ret);
+ log_if(p_filter == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
+ ret = security_manager_policy_entry_set_application(p_filter, appid);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
+
+ /* TBD: Remove set user part becuase there's no notion of global app's policy changes. User update their own app's policy only.
+ ret = security_manager_policy_entry_set_user(p_filter, uid);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_user failed. ret = %d", ret); */
+ security_manager_policy_entry_set_privilege(p_filter, privilege_name);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
+
+ /* Get policy filtered by p_filter */
+ policy_entry **pp_policy = NULL;
+ size_t pp_policy_size = 0;
+ ret = security_manager_get_policy(p_filter, &pp_policy, &pp_policy_size);
+ log_if(ret != SECURITY_MANAGER_SUCCESS || pp_policy_size <= 0, 1, "security_manager_get_policy failed. ret = %d, pp_policy_size = %d", ret, pp_policy_size);
+
+ /* Get level from policy */
+ unsigned int i = 0;
+ for (i = 0; i < pp_policy_size; ++i) {
+ char* result = (char*)security_manager_policy_entry_get_level(pp_policy[i]);
+ log_if(result == NULL, 1, "security_manager_policy_entry_get_level failed. No policy is declared for pkgid: %s, uid: %s, appid: %s, privilege: %s", pkg_data->pkgid, uid, appid, privilege_name);
+ if (strcmp("Allow", result) == 0) {
+ pkg_data->status = EINA_TRUE;
+ break;
+ } else if (strcmp("Deny", result) == 0) {/* TBD: Handle AskUser case? */
+ pkg_data->status = EINA_FALSE;
+ break;
+ } else {
+ LOGE("Unknown policy level: %s", result);
+ break;
+ }
+ }
- char* pkgid = pkg_data->pkgid;
+ /* Free policy entries */
+ security_manager_policy_entry_free(p_filter);
+ for (i = 0; i < pp_policy_size ; ++i)
+ security_manager_policy_entry_free(pp_policy[i]);
- /* Make policy filter to get specific uid, pkgid and privilege's status */
- policy_entry* p_filter;
- int ret = 0;
- ret = security_manager_policy_entry_new(&p_filter);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %s", ret);
- log_if(p_filter == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
-
- ret = security_manager_policy_entry_set_application(p_filter, pkgid);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
-
- security_manager_policy_entry_set_privilege(p_filter, privilege_name);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
-
- /* Get policy filtered by p_filter */
- policy_entry **pp_policy = NULL;
- size_t pp_policy_size = 0;
- ret = security_manager_get_policy(p_filter, &pp_policy, &pp_policy_size);
- log_if(ret != SECURITY_MANAGER_SUCCESS || pp_policy_size <= 0, 1, "security_manager_get_policy failed. ret = %d, pp_policy_size = %d", ret, pp_policy_size);
-
- /* Get level from policy */
- unsigned int i = 0;
- for (i = 0; i < pp_policy_size; ++i) {
- char* result = (char*)security_manager_policy_entry_get_level(pp_policy[i]);
- log_if(result == NULL, 1, "security_manager_policy_entry_get_level failed. No policy is declared for pkgid: %s, pkgid: %s, privilege: %s", pkg_data->pkgid, pkgid, privilege_name);
- if (strcmp("Allow", result) == 0) {
- pkg_data->status = EINA_TRUE;
- break;
- } else if (strcmp("Deny", result) == 0) {/* TBD: Handle AskUser case? */
- pkg_data->status = EINA_FALSE;
+ if (pkg_data->status == EINA_TRUE)
break;
- } else {
- LOGE("Unknown policy level: %s", result);
- break;
- }
}
-
- /* Free policy entries */
- security_manager_policy_entry_free(p_filter);
- for (i = 0; i < pp_policy_size ; ++i)
- security_manager_policy_entry_free(pp_policy[i]);
-
}
static Eina_Bool get_package_privacy_status(char* package)
{
pkg_data_s* pkg_data = (pkg_data_s*)l->data;
char* pkgid = (char*)pkg_data->pkgid;
if (pkg_data->change) {
+ char uid[UIDMAXLEN];
+ if (pkg_data->is_global)
+ snprintf(uid, UIDMAXLEN, "%d", GLOBAL_UID);
+ else
+ snprintf(uid, UIDMAXLEN, "%d", getuid());
char* level;
if (pkg_data->status) {
level = "Deny";
pkg_data->status = true;
}
- LOGD("%s will be changed to %s", pkgid, level);
+ LOGD("uid: %s, %s will be changed to %s", uid, pkgid, level);
- int entry_num = g_list_length(pkg_data->privlist);
- LOGD("entry_num = %d", entry_num);
+ int priv_num = g_list_length(pkg_data->privlist);
+ int app_num = g_list_length(pkg_data->applist);
+ int entry_num = priv_num*app_num;
+ LOGD("priv_num = %d, app_num = %d, entry_num = %d", priv_num, app_num, entry_num);
/* Make policy update request */
policy_update_req *policy_update_request;
ret = security_manager_policy_update_req_new(&policy_update_request);
log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_new failed. ret = %d", ret);
log_if(policy_update_request == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy request did not allocate memory");
- /* Make policy entries to update according to the number of privilege of package */
+ /* Make policy entries to update according to the number of privilege and appid of package */
policy_entry *entry[entry_num];
int entry_index = 0;
- for (lll = pkg_data->privlist; lll != NULL; lll = lll->next) {
- char* privilege_name = (char*)lll->data;
- LOGD("%d: Change to %s => pkgid: %s, privilege_name: %s", entry_index, level, pkgid, privilege_name);
- /* Make entries by each privilege_name */
- ret = security_manager_policy_entry_new(&entry[entry_index]);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %d", ret);
- log_if(entry[entry_index] == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
- ret = security_manager_policy_entry_set_application(entry[entry_index], pkgid);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
- ret = security_manager_policy_entry_set_privilege(entry[entry_index], privilege_name);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
- ret = security_manager_policy_entry_set_level(entry[entry_index], level);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_level failed. ret = %d", ret);
-
- /* Add entry to policy update request */
- ret = security_manager_policy_update_req_add_entry(policy_update_request, entry[entry_index]);
- log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_add_entry failed. ret = %d", ret);
- entry_index++;
+ for (ll = pkg_data->applist; ll != NULL; ll = ll->next) {
+ char* appid = (char*)ll->data;
+ for (lll = pkg_data->privlist; lll != NULL; lll = lll->next) {
+ char* privilege_name = (char*)lll->data;
+ LOGD("%d: Change to %s => uid: %s, appid: %s, privilege_name: %s", entry_index, level, uid, appid, privilege_name);
+ /* Make entries by each uid, appid, and privilege_name */
+ ret = security_manager_policy_entry_new(&entry[entry_index]);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %d", ret);
+ log_if(entry[entry_index] == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
+ ret = security_manager_policy_entry_set_application(entry[entry_index], appid);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
+ ret = security_manager_policy_entry_set_privilege(entry[entry_index], privilege_name);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
+ /* TBD: Remove set user part becuase there's no notion of global app's policy changes. User update their own app's policy only.
+ ret = security_manager_policy_entry_set_user(entry[entry_index], uid);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_user failed. ret = %d", ret); */
+ ret = security_manager_policy_entry_set_level(entry[entry_index], level);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_level failed. ret = %d", ret);
+
+ /* Add entry to policy update request */
+ ret = security_manager_policy_update_req_add_entry(policy_update_request, entry[entry_index]);
+ log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_add_entry failed. ret = %d", ret);
+ entry_index++;
+ }
}
/* Send policy update request */
ret = security_manager_policy_update_send(policy_update_request);
evas_object_hide(save_btn);
}
+static int pkg_app_list_cb(pkgmgrinfo_appinfo_h pkg_handle, void* user_data)
+{
+ char* appid = NULL;
+ pkg_data_s* pkg_data = (pkg_data_s*)user_data;
+ int ret = pkgmgrinfo_appinfo_get_appid(pkg_handle, &appid);
+ return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_appinfo_get_appid failed");
+ char* appidd = strdup(appid);
+ return_if(appid == NULL, , -1, "appid strdup failed");
+ pkg_data->applist = g_list_append(pkg_data->applist, appidd);
+ return ret;
+}
+
static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
{
char* privilege_name = strdup((char*)user_data);
pkg_data->privlist = NULL;
pkg_data->privlist = g_list_append(pkg_data->privlist, privilege_name);
+ /* Add app list to package data item */
+ pkg_data->applist = NULL;
pkgmgrinfo_pkginfo_h pkg_handle;
ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkg_handle);
return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_pkginfo_get_pkginfo failed");
+ ret = pkgmgrinfo_appinfo_get_list(pkg_handle, PMINFO_ALL_APP, pkg_app_list_cb, pkg_data);
+ return_if(ret != PMINFO_R_OK, pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_appinfo_get_list failed");
/* See if the package is global. TBD: If notion for handling of global app is required. */
pkg_data->is_global = false;
pkg_data_s* temp = (pkg_data_s*)l->data;
LOGD(" * PACKAGE ID : %s LABEL: %s is global? %d", temp->pkgid, temp->label, temp->is_global);
GList* ll;
+ LOGD(" * APP ID");
+ for (ll = temp->applist; ll != NULL; ll = ll->next) {
+ char* temp_appid = (char*)ll->data;
+ LOGD(" - %s", temp_appid);
+ }
LOGD(" * PRIVILEGE");
for (ll = temp->privlist; ll != NULL; ll = ll->next) {
char* temp_privname = (char*)ll->data;
return ret;
}
-void create_privacy_package_list_view(app_data_s* ad)
+void create_privacy_package_list_view(struct app_data_s* ad)
{
/* Add genlist */
Evas_Object *genlist = common_genlist_add(ad->nf);