static char* privacy_name = NULL;
#define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
-#define UIDMAXLEN 10
#define SAFE_FREE(src) { if (src) {free(src); src = NULL; } }
static void privacy_package_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
evas_object_smart_callback_call(check, "changed", data);
}
-static void __get_package_privacy_status(pkg_data_s* pkg_data, char* privilege_name)
+static void __get_package_privacy_status(pkg_data_s* pkg_data)
{
- GList* l;
+ GList* l = NULL;
for (l = pkg_data->applist; l != NULL; l = l->next) {
char* appid = (char*)l->data;
+ char* privilege_name = (char*)g_list_first(pkg_data->privlist)->data; /* Assume that privileges in the same privacy group are subject to the same policy */
/* Make policy filter to get specific uid, appid and privilege's status */
policy_entry* p_filter;
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);
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, appid: %s, privilege: %s", pkg_data->pkgid, appid, privilege_name);
- LOGD("policy status = %s", result);
+ LOGD("app <%s> privilege <%s> status = %s", appid, privilege_name, result);
if (strcmp("Allow", result) == 0) {
pkg_data->status = EINA_TRUE;
break;
break;
}
}
-static Eina_Bool get_package_privacy_status(char* package)
-{
- Eina_Bool status = EINA_FALSE;
-
- GList* l;
- for (l = pkg_data_list; l != NULL; l = l->next) {
- pkg_data_s* pkg_data = (pkg_data_s*)l->data;
- if (strcmp(pkg_data->pkgid, package) == 0) {
- status = pkg_data->status;
- break;
- }
- }
-
- return status;
-}
static Evas_Object* create_icon(Evas_Object *parent, Evas_Coord w, Evas_Coord h, char* icon_path)
{
char* level;
if (pd->status) {
bool privacy_requestable = false;
- ret = privilege_package_info_is_privacy_requestable(getuid(), pkgid, &privacy_requestable);
+ ret = privilege_package_info_is_privacy_requestable(getuid(), pkgid, g_list_first(pkg_data->privlist)->data,&privacy_requestable);
log_if(ret != PRVMGR_ERR_NONE, 1, "privilege_package_info_is_privacy_requestable failed. ret = %d", ret);
if (privacy_requestable) {
level = "Ask user";
log_if(ret != NOTIFICATION_ERROR_NONE, 1, "notification_status_message_post failed. ret = %s", get_error_message(ret));
}
pd->status = false;
+ __terminate_app(pkgid);
} else {
level = "Allow";
pd->status = true;
return ret;
}
-static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
-{
- char *pkgid = NULL;
- int ret = pkgmgrinfo_pkginfo_get_pkgid(filter_handle, &pkgid);
- return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_pkginfo_get_pkgid failed");
-
- char* privilege_name = strdup((char*)user_data);
- return_if(privilege_name == NULL, , -1, "strdup failed");
- GList* find = g_list_find_custom(pkg_list, pkgid, (GCompareFunc)strcmp);
- if (find != NULL) {
- /* Add privilege info to package data list */
- GList* l;
- for (l = pkg_data_list; l != NULL; l = l->next) {
- pkg_data_s* temp = (pkg_data_s*)l->data;
- char* temp_pkgid = (char*)temp->pkgid;
- if (strcmp(temp_pkgid, pkgid) == 0) {
- temp->privlist = g_list_append(temp->privlist, privilege_name);
- if (!temp->status) /* If any privilege is allowed then status of privacy should be displayed as on hence previously checked staus is off then do check again. */
- __get_package_privacy_status(temp, privilege_name);
- break;
- }
- }
- return ret;
- }
-
- /* Add app list to package data item */
- pkgmgrinfo_pkginfo_h pkg_handle;
- ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkg_handle);
- return_if(ret != PMINFO_R_OK, SAFE_FREE(privilege_name), -1, "pkgmgrinfo_pkginfo_get_pkginfo failed");
-
+static int __make_package_data(const char* pkgid, const char* privacy_name) {
/* See if the package is user-settable */
- int is_settable = privilege_info_is_user_settable(pkgid, privacy_name);
+ int ret = privilege_info_is_user_settable(pkgid, privacy_name);
+ log_if(ret == -1, 1, "privilege_info_is_user_settable failed. ret = %d", ret);
- if (is_settable == 1) {
- char *pkgidd = strdup(pkgid);
- return_if(pkgidd == NULL, SAFE_FREE(privilege_name); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "strdup failed");
- pkg_list = g_list_append(pkg_list, pkgidd);
+ if (ret == 1) {
/* Make package data item */
pkg_data_s *pkg_data = (pkg_data_s *)malloc(sizeof(pkg_data_s));
- return_if(pkg_data == NULL, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "malloc of pkg_data failed.");
- pkg_data->label=NULL;
- pkg_data->icon=NULL;
- pkg_data->applist=NULL;
- pkg_data->privlist=NULL;
- pkg_data->pkgid=pkgidd;
+ return_if(pkg_data == NULL, , -1, "malloc of pkg_data failed.");
+
+ /* Add pkg id to package data item */
+ pkg_data->pkgid = strdup(pkgid);
+ return_if(pkg_data->pkgid == NULL, free_pkg_data(pkg_data), -1, "strdup of pkg_data->pkgid failed");
/* Add privilege info to package data item */
pkg_data->privlist = NULL;
- pkg_data->privlist = g_list_append(pkg_data->privlist, privilege_name);
+ ret = privilege_package_info_get_privilege_list_by_pkgid_and_privacy(getuid(), pkgid, privacy_name, &pkg_data->privlist);
+ return_if(ret != PRVMGR_ERR_NONE, free_pkg_data(pkg_data), -1, "privilege_package_info_get_privilege_list_by_pkgid_and_privacy failed. ret = %d", ret);
+
+ /* Add app list to package data item */
+ pkgmgrinfo_pkginfo_h pkg_handle;
+ ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkg_handle);
+ return_if(ret != PMINFO_R_OK, free_pkg_data(pkg_data), -1, "pkgmgrinfo_pkginfo_get_pkginfo failed. ret = %d", ret);
/* Add app list to package data item */
pkg_data->applist = NULL;
ret = pkgmgrinfo_appinfo_get_list(pkg_handle, PMINFO_ALL_APP, pkg_app_list_cb, pkg_data);
- return_if(ret != PMINFO_R_OK, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_appinfo_get_list failed");
+ return_if(ret != PMINFO_R_OK, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_appinfo_get_list failed. ret = %d", ret);
/* See if the package is global. TBD: If notion for handling of global app is required. */
pkg_data->is_global = false;
ret = pkgmgrinfo_pkginfo_is_global(pkg_handle, &pkg_data->is_global);
- return_if(ret != PMINFO_R_OK, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_is_global failed");
+ return_if(ret != PMINFO_R_OK, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_is_global failed. ret = %d", ret);
/* Get package label */
char* label = NULL;
ret = pkgmgrinfo_pkginfo_get_label(pkg_handle, &label);
- return_if(ret != PMINFO_R_OK, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_get_label failed");
+ return_if(ret != PMINFO_R_OK, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_get_label failed. ret = %d", ret);
pkg_data->label = strdup(label);
- return_if(pkg_data->label == NULL, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "strdup of pkg_data->label failed");
+ return_if(pkg_data->label == NULL, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "strdup of pkg_data->label failed");
/* Get package icon path */
char* icon = NULL;
ret = pkgmgrinfo_pkginfo_get_icon(pkg_handle, &icon);
- return_if(ret != PMINFO_R_OK, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_get_icon failed");
+ return_if(ret != PMINFO_R_OK, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_pkginfo_get_icon failed. ret = %d", ret);
if (EINA_TRUE == ecore_file_exists(icon))
pkg_data->icon = strdup(icon);
else
pkg_data->icon = strdup(DEFAULT_ICON_PATH);
- return_if(pkg_data->icon == NULL, SAFE_FREE(privilege_name); SAFE_FREE(pkgidd); free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "strdup of pkg_data->icon failed");
+ return_if(pkg_data->icon == NULL, free_pkg_data(pkg_data); pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "strdup of pkg_data->icon failed");
/* Get package privacy status */
pkg_data->status = false;
- __get_package_privacy_status(pkg_data, privilege_name);
+ __get_package_privacy_status(pkg_data);
/* Append package data item to package_data_list */
pkg_data_list = g_list_append(pkg_data_list, pkg_data);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle);
}
- pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle);
+
return ret;
}
-static int get_uniq_pkg_list_by_privacy(const char* privacy)
+
+void create_privacy_package_list_view(struct app_data_s* ad)
{
- int ret = 0;
- if (pkg_data_list != NULL) {
- g_list_free_full(pkg_data_list, free_extension_pkg_data);
- pkg_data_list = NULL;
- pkg_list = NULL;
+ /* Add Evas_Object */
+ Evas_Object *genlist;
+ privacy_name = ad->privacy;
+
+ log_if(privilege_info_get_privacy_display(ad->privacy, &privacy_display) != PRVMGR_ERR_NONE, 1, "Couldn't get privacy display : %s", ad->privacy);
+
+ /* Get privilege list by privacy */
+ if (privilege_list != NULL) {
+ g_list_free_full(privilege_list, free);
+ privilege_list = NULL;
}
- GList* l;
- int uid = getuid();
- for (l = privilege_list; l != NULL; l = l->next) {
- char* privilege_name = (char*)l->data;
- /* For each privilege */
- pkgmgrinfo_pkginfo_filter_h filter_handle;
- ret = pkgmgrinfo_pkginfo_filter_create(&filter_handle);
- return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_pkginfo_filter_create failed");
- ret = pkgmgrinfo_pkginfo_filter_add_string(filter_handle, PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE, privilege_name);
- LOGD("uid: %d, privacy: %s, privilege: %s", uid, privacy, privilege_name);
- return_if(ret != PMINFO_R_OK, pkgmgrinfo_pkginfo_filter_destroy(filter_handle), -1, "pkgmgrinfo_pkginfo_filter_add_string failed");
- /* Get uniq pkg list */
- ret = pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo(filter_handle, pkg_list_cb, privilege_name, uid);
- return_if(ret != PMINFO_R_OK, pkgmgrinfo_pkginfo_filter_destroy(filter_handle), -1, "pkgmgrinfo_pkginfo_usr_filter_foreach_pkginfo failed");
+ if (pkg_list != NULL) {
+ g_list_free_full(pkg_list, free);
+ pkg_list = NULL;
+ }
+ if (pkg_data_list != NULL) {
+ g_list_free_full(pkg_data_list, free_extension_pkg_data);
+ pkg_data_list = NULL;
+ }
+ /* Get unique package list filtered by given privacy related privileges */
+ int ret = privilege_package_info_get_package_list_by_privacy(getuid(), ad->privacy, &pkg_list);
+ log_if(ret != 0, 1, "privilege_package_info_get_package_list_by_privacy() failed");
+ pkg_list = g_list_sort(pkg_list, (GCompareFunc)strcmp);
+ GList* l = NULL;
+ for (l = pkg_list; l != NULL; l = l->next) {
+ __make_package_data((char*)l->data, ad->privacy);
}
-
- /* To check : each privacy related package's app, privilege info
+ /* To check : each privacy related package's app, privilege info */
for (l = pkg_data_list; l != NULL; l = l->next) {
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);
char* temp_privname = (char*)ll->data;
LOGD(" - %s", temp_privname);
}
- } */
-
- return ret;
-}
-void create_privacy_package_list_view(struct app_data_s* ad)
-{
- /* Add Evas_Object */
- Evas_Object *genlist;
- privacy_name = ad->privacy;
-
- log_if(privilege_info_get_privacy_display(ad->privacy, &privacy_display) != PRVMGR_ERR_NONE, 1, "Couldn't get privacy display : %s", ad->privacy);
-
- /* Get privilege list by privacy */
- if (privilege_list != NULL) {
- g_list_free_full(privilege_list, free);
- privilege_list = NULL;
+ LOGD(" * STATUS : %s", temp->status ? "on" : "off");
}
- int ret = privilege_info_get_privilege_list_by_privacy(ad->privacy, &privilege_list);
- log_if(ret != PRVMGR_ERR_NONE, 1, "Couldn't get privilege list of privacy: %s", ad->privacy);
-
- /* Get unique package list filtered by given privacy related privileges */
- ret = get_uniq_pkg_list_by_privacy(ad->privacy);
- log_if(ret != 0, 1, "get_unique_pkg_list_by_privacy failed");
- pkg_list = g_list_sort(pkg_list, (GCompareFunc)strcmp);
/* Append privacy related package as genlist item */
- GList* l;
Elm_Object_Item *it = NULL;
if (!pkg_data_list) {
genlist = elm_layout_add(ad->nf);
for (l = pkg_data_list; l != NULL; l = l->next) {
pkg_data_s* pkg_data = (pkg_data_s*)l->data;
/* Get privacy status of given package */
- LOGD("before add");
it = elm_genlist_item_append(genlist, itc, pkg_data, NULL, ELM_GENLIST_ITEM_NONE, privacy_package_selected_cb, pkg_data);
- LOGD("after add");
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
elm_genlist_item_class_free(itc);