Add api for datacontrol trusted info 00/124100/6
authorJiwoong Im <jiwoong.im@samsung.com>
Mon, 10 Apr 2017 06:50:58 +0000 (15:50 +0900)
committerJiwoong Im <jiwoong.im@samsung.com>
Wed, 19 Apr 2017 02:05:03 +0000 (19:05 -0700)
- pkgmgrinfo_appinfo_get_datacontrol_trusted_info
  pkgmgrinfo_appinfo_usr_get_datacontrol_trusted_info

- Related patches
  [data-control] https://review.tizen.org/gerrit/#/c/124099/
  [tpk-manifest-handler] https://review.tizen.org/gerrit/#/c/124101/
  [app-installer] https://review.tizen.org/gerrit/#/c/124102/

Change-Id: I4c3aea46fbead87e4db357b5958b56c3a1fc7106
Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
include/pkgmgr-info.h
include/pkgmgrinfo_basic.h
parser/manifest.xsd.in
parser/src/pkgmgr_parser_db.c
src/pkgmgrinfo_appinfo.c
src/pkgmgrinfo_basic.c

index 3ca623a..b761663 100644 (file)
@@ -3542,6 +3542,27 @@ int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **appi
 int pkgmgrinfo_appinfo_usr_get_datacontrol_appid(const char *providerid, uid_t uid, char **appid);
 
 /**
+ * @fn int pkgmgrinfo_appinfo_get_datacontrol_trusted_info(const char *providerid, char **appid, bool *is_trusted);
+ * @brief      This API gets the information about trusted datacontrol
+ *
+ * @par                This API is for package-manager client application
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] providerid               pointer to the providerid of datacontrol.
+ * @param[out] appid                   pointer to hold appid, need to free after using
+ * @param[out] is_trusted              pointer to hold whether it provides trusted datacontrol
+ * @return     0 if success, error code(<0) if fail
+ * @retval     PMINFO_R_OK     success
+ * @retval     PMINFO_R_EINVAL invalid argument
+ * @retval     PMINFO_R_ERROR  internal error
+ * @endcode
+ */
+int pkgmgrinfo_appinfo_get_datacontrol_trusted_info(const char *providerid,
+               const char *type, char **appid, bool *is_trusted);
+int pkgmgrinfo_appinfo_usr_get_datacontrol_trusted_info(const char *providerid,
+               const char *type, uid_t uid, char **appid, bool *is_trusted);
+
+/**
  * @fn int pkgmgrinfo_appinfo_get_alias_appid(pkgmgrinfo_appinfo_h  handle, char **alias_appid)
  * @brief      This API gets the alias_appid of the application
  *
index 617bb87..420b1c0 100644 (file)
@@ -88,6 +88,7 @@ typedef struct datacontrol_x {
        char *providerid;
        char *access;
        char *type;
+       char *trusted;
 } datacontrol_x;
 
 typedef struct splashscreen_x {
index 8921689..02d0f09 100644 (file)
     <xs:attribute name="providerid" type="xs:string"/>
     <xs:attribute name="access" type="xs:string"/>
     <xs:attribute name="type" type="xs:string"/>
+    <xs:attribute name="trusted" type="xs:boolean"/>
     <xs:anyAttribute processContents="lax"/>
   </xs:complexType>
   </xs:element>
index f3bfcd5..e0b8097 100644 (file)
@@ -272,7 +272,8 @@ sqlite3 *pkgmgr_cert_db;
                                                "providerid TEXT NOT NULL, " \
                                                "access TEXT NOT NULL, " \
                                                "type TEXT NOT NULL, " \
-                                               "PRIMARY KEY(app_id, providerid, access, type) " \
+                                               "trusted TEXT NOT NULL, " \
+                                               "PRIMARY KEY(providerid, type) " \
                                                "FOREIGN KEY(app_id) " \
                                                "REFERENCES package_app_info(app_id) " \
                                                "ON DELETE CASCADE)"
@@ -1434,12 +1435,13 @@ static int __insert_application_datacontrol_info(manifest_x *mfx)
                        if (dc == NULL)
                                continue;
                        sqlite3_snprintf(MAX_QUERY_LEN, query,
-                                       "INSERT INTO package_app_data_control(app_id, providerid, access, type) " \
-                                       "VALUES(%Q, %Q, %Q, %Q)",\
+                                       "INSERT INTO package_app_data_control(app_id, providerid, access, type, trusted) " \
+                                       "VALUES(%Q, %Q, %Q, %Q, %Q)",\
                                        app->appid,
                                        dc->providerid,
                                        dc->access,
-                                       dc->type);
+                                       dc->type,
+                                       __get_bool(dc->trusted, false));
 
                        ret = __exec_query(query);
                        if (ret == -1) {
index 6211b79..d1cc70d 100644 (file)
@@ -254,7 +254,7 @@ static int _appinfo_get_data_control(sqlite3 *db, const char *appid,
                GList **datacontrol)
 {
        static const char query_raw[] =
-               "SELECT providerid, access, type "
+               "SELECT providerid, access, type, trusted "
                "FROM package_app_data_control WHERE app_id=%Q";
        int ret;
        char *query;
@@ -286,6 +286,7 @@ static int _appinfo_get_data_control(sqlite3 *db, const char *appid,
                _save_column_str(stmt, idx++, &info->providerid);
                _save_column_str(stmt, idx++, &info->access);
                _save_column_str(stmt, idx++, &info->type);
+               _save_column_str(stmt, idx++, &info->trusted);
                *datacontrol = g_list_append(*datacontrol, info);
        }
 
@@ -1081,6 +1082,8 @@ static gpointer __copy_datacontrol(gconstpointer src, gpointer data)
                datacontrol->access = strdup(tmp->access);
        if (tmp->type)
                datacontrol->type = strdup(tmp->type);
+       if (tmp->trusted)
+               datacontrol->trusted = strdup(tmp->trusted);
 
        return datacontrol;
 }
@@ -2250,7 +2253,8 @@ API int pkgmgrinfo_appinfo_get_installed_time(pkgmgrinfo_appinfo_h handle, int *
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_usr_get_datacontrol_info(const char *providerid, const char *type, uid_t uid, char **appid, char **access)
+API int pkgmgrinfo_appinfo_usr_get_datacontrol_info(const char *providerid,
+               const char *type, uid_t uid, char **appid, char **access)
 {
        retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
        retvm_if(type == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
@@ -2289,9 +2293,11 @@ catch:
        return ret;
 }
 
-API int pkgmgrinfo_appinfo_get_datacontrol_info(const char *providerid, const char *type, char **appid, char **access)
+API int pkgmgrinfo_appinfo_get_datacontrol_info(const char *providerid,
+               const char *type, char **appid, char **access)
 {
-       return pkgmgrinfo_appinfo_usr_get_datacontrol_info(providerid, type, _getuid(), appid, access);
+       return pkgmgrinfo_appinfo_usr_get_datacontrol_info(providerid,
+                       type, _getuid(), appid, access);
 }
 
 API int pkgmgrinfo_appinfo_usr_get_datacontrol_appid(const char *providerid, uid_t uid, char **appid)
@@ -2335,6 +2341,52 @@ API int pkgmgrinfo_appinfo_get_datacontrol_appid(const char *providerid, char **
        return pkgmgrinfo_appinfo_usr_get_datacontrol_appid(providerid, _getuid(), appid);
 }
 
+API int pkgmgrinfo_appinfo_usr_get_datacontrol_trusted_info(const char *providerid,
+               const char *type, uid_t uid, char **appid, bool *is_trusted)
+{
+       retvm_if(providerid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
+       retvm_if(appid == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL\n");
+
+       int ret = PMINFO_R_OK;
+       char *query = NULL;
+       sqlite3_stmt *stmt = NULL;
+
+       /*open db*/
+       ret = __open_manifest_db(uid, true);
+       retvm_if(ret != SQLITE_OK, ret = PMINFO_R_ERROR, "connect db [%s] failed!", MANIFEST_DB);
+
+       /*Start constructing query*/
+       query = sqlite3_mprintf("SELECT app_id, trusted FROM package_app_data_control WHERE providerid=%Q AND type=%Q", providerid, type);
+       tryvm_if(query == NULL, ret = PMINFO_R_ERROR, "Out of memory");
+
+       /*prepare query*/
+       ret = sqlite3_prepare_v2(GET_DB(manifest_db), query, strlen(query), &stmt, NULL);
+       tryvm_if(ret != PMINFO_R_OK, ret = PMINFO_R_ERROR, "sqlite3_prepare_v2 failed[%s]\n", query);
+
+       /*step query*/
+       ret = sqlite3_step(stmt);
+       tryvm_if((ret != SQLITE_ROW) || (ret == SQLITE_DONE), ret = PMINFO_R_ERROR, "No records found");
+
+       _save_column_str(stmt, 0, appid);
+       *is_trusted = _get_bool_value((char *)sqlite3_column_text(stmt, 1));
+
+       ret = PMINFO_R_OK;
+
+catch:
+       sqlite3_free(query);
+       sqlite3_finalize(stmt);
+       __close_manifest_db();
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_datacontrol_trsuted_info(const char *providerid,
+               const char *type, char **appid, bool *is_trusted)
+{
+       return pkgmgrinfo_appinfo_usr_get_datacontrol_trusted_info(providerid,
+                       type, _getuid(), appid, is_trusted);
+}
+
+
 API int pkgmgrinfo_appinfo_get_support_mode(pkgmgrinfo_appinfo_h  handle, int *support_mode)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");
index 302143f..66091b3 100644 (file)
@@ -96,6 +96,8 @@ static void __ps_free_datacontrol(gpointer data)
                free((void *)datacontrol->access);
        if (datacontrol->type)
                free((void *)datacontrol->type);
+       if (datacontrol->trusted)
+               free((void *)datacontrol->trusted);
        free((void *)datacontrol);
 }