From 2cb16e8b5927f1b32d5c6eda7c84689dd9de4c86 Mon Sep 17 00:00:00 2001 From: Jiwoong Im Date: Mon, 10 Apr 2017 15:50:58 +0900 Subject: [PATCH] Add api for datacontrol trusted info - 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 --- include/pkgmgr-info.h | 21 +++++++++++++++ include/pkgmgrinfo_basic.h | 1 + parser/manifest.xsd.in | 1 + parser/src/pkgmgr_parser_db.c | 10 +++++--- src/pkgmgrinfo_appinfo.c | 60 ++++++++++++++++++++++++++++++++++++++++--- src/pkgmgrinfo_basic.c | 2 ++ 6 files changed, 87 insertions(+), 8 deletions(-) diff --git a/include/pkgmgr-info.h b/include/pkgmgr-info.h index 3ca623a..b761663 100644 --- a/include/pkgmgr-info.h +++ b/include/pkgmgr-info.h @@ -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 * diff --git a/include/pkgmgrinfo_basic.h b/include/pkgmgrinfo_basic.h index 617bb87..420b1c0 100644 --- a/include/pkgmgrinfo_basic.h +++ b/include/pkgmgrinfo_basic.h @@ -88,6 +88,7 @@ typedef struct datacontrol_x { char *providerid; char *access; char *type; + char *trusted; } datacontrol_x; typedef struct splashscreen_x { diff --git a/parser/manifest.xsd.in b/parser/manifest.xsd.in index 8921689..02d0f09 100644 --- a/parser/manifest.xsd.in +++ b/parser/manifest.xsd.in @@ -313,6 +313,7 @@ + diff --git a/parser/src/pkgmgr_parser_db.c b/parser/src/pkgmgr_parser_db.c index f3bfcd5..e0b8097 100644 --- a/parser/src/pkgmgr_parser_db.c +++ b/parser/src/pkgmgr_parser_db.c @@ -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) { diff --git a/src/pkgmgrinfo_appinfo.c b/src/pkgmgrinfo_appinfo.c index 6211b79..d1cc70d 100644 --- a/src/pkgmgrinfo_appinfo.c +++ b/src/pkgmgrinfo_appinfo.c @@ -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"); diff --git a/src/pkgmgrinfo_basic.c b/src/pkgmgrinfo_basic.c index 302143f..66091b3 100644 --- a/src/pkgmgrinfo_basic.c +++ b/src/pkgmgrinfo_basic.c @@ -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); } -- 2.7.4