Implement perm_app_get_permissions() API in libprivilege-control.
[platform/core/security/libprivilege-control.git] / src / rules-db.c
index 3849b6d..26e84e5 100644 (file)
@@ -79,7 +79,6 @@ static int rdb_begin(sqlite3 **pp_db, rdb_transaction_type_t transaction_type)
                return PC_ERR_DB_CONNECTION;
        }
 
-       ret = save_smack_rules(*pp_db);
        return ret;
 }
 
@@ -291,6 +290,35 @@ finish:
 }
 
 
+int rdb_get_app_paths(const char *const s_app_label_name,
+                     const char *const s_app_path_type_name,
+                     char ***ppp_paths)
+{
+       RDB_LOG_ENTRY_PARAM("%s %s", s_app_label_name, s_app_path_type_name);
+
+       int ret;
+       int i_num_paths;
+       sqlite3 *p_db = NULL;
+
+       ret = rdb_begin(&p_db, RDB_TRANSACTION_SHARED_READ);
+       if (ret != PC_OPERATION_SUCCESS) goto finish;
+
+       ret = get_app_paths_count_internal(p_db,
+                                          s_app_label_name,
+                                          s_app_path_type_name,
+                                          &i_num_paths);
+       if (ret != PC_OPERATION_SUCCESS) goto finish;
+
+       ret = get_app_paths_internal(p_db, s_app_label_name,
+                                    s_app_path_type_name,
+                                    i_num_paths,
+                                    ppp_paths);
+
+finish:
+       return rdb_finish(p_db, ret);
+}
+
+
 int rdb_add_permission_rules(const char *const s_permission_name,
                             const char *const s_permission_type_name,
                             const char *const *const pp_smack_rules)
@@ -483,8 +511,15 @@ int rdb_add_additional_rules(const char *const *const pp_smack_rules)
        ret = rdb_begin(&p_db, RDB_TRANSACTION_EXCLUSIVE);
        if(ret != PC_OPERATION_SUCCESS) goto finish;
 
-       ret = add_additional_rules_internal(p_db,
-                                           pp_smack_rules);
+       // Old rules may disappear, so mark as modified
+       ret = add_modified_additional_rules_internal(p_db);
+       if(ret != PC_OPERATION_SUCCESS) goto finish;
+
+       ret = add_additional_rules_internal(p_db, pp_smack_rules);
+       if(ret != PC_OPERATION_SUCCESS) goto finish;
+
+       // New rules appear, so also mark as modified
+       ret = add_modified_additional_rules_internal(p_db);
 
 finish:
        return rdb_finish(p_db, ret);
@@ -512,3 +547,32 @@ int rdb_app_has_permission(const char *const s_app_label_name,
 finish:
        return rdb_finish(p_db, ret);
 }
+
+int rdb_app_get_permissions(const char *const s_app_label_name,
+                           const char *const s_permission_type_name,
+                           char ***ppp_perm_list)
+{
+       RDB_LOG_ENTRY_PARAM("%s %s", s_app_label_name, s_permission_type_name);
+
+       int ret = PC_ERR_DB_OPERATION;
+       int i_num_permissions;
+       sqlite3 *p_db = NULL;
+
+       ret = rdb_begin(&p_db, RDB_TRANSACTION_SHARED_READ);
+       if(ret != PC_OPERATION_SUCCESS) goto finish;
+
+       ret = get_app_permissions_number_internal(p_db,
+                                                 s_app_label_name,
+                                                 s_permission_type_name,
+                                                 &i_num_permissions);
+       if (ret != PC_OPERATION_SUCCESS) goto finish;
+
+       ret = get_app_permissions_internal(p_db,
+                                          s_app_label_name,
+                                          s_permission_type_name,
+                                          i_num_permissions,
+                                          ppp_perm_list);
+
+finish:
+       return rdb_finish(p_db, ret);
+}