#define PMINFO_PKGINFO_PROP_RANGE_BASIC "PMINFO_PKGINFO_PROP_RANGE_BASIC"
/* For multiuser support */
+char *getIconPath(uid_t uid);
char *getUserPkgParserDBPath(void);
char *getUserPkgParserDBPathUID(uid_t uid);
char *getUserPkgCertDBPath(void);
}
* @endcode
*/
-int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle);
+int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle, uid_t uid);
/**
* @fn int pkgmgrinfo_pkginfo_get_cert_value(pkgmgrinfo_certinfo_h handle, pkgmgrinfo_cert_type cert_type, const char **cert_value)
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
}
- ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
+ ret = pkgmgrinfo_save_certinfo(pkgid, handle);
if (ret != PMINFO_R_OK) {
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
}
- ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
+ ret = pkgmgrinfo_save_certinfo(pkgid, handle);
if (ret != PMINFO_R_OK) {
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
}
- ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
+ ret = pkgmgrinfo_save_certinfo(pkgid, handle);
if (ret != PMINFO_R_OK) {
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
}
* @endcode
*/
-int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle);
+int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle, uid_t uid);
/**
* @fn int pkgmgrinfo_destroy_certinfo_set_handle(pkgmgrinfo_instcertinfo_h handle)
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
}
- ret = pkgmgrinfo_save_pkgdbinfo(pkgid, handle);
+ ret = pkgmgrinfo_save_certinfo(pkgid, handle);
if (ret != PMINFO_R_OK) {
pkgmgrinfo_destroy_certinfo_set_handle(handle);
return -1;
static void __insert_serviceapplication_locale_info(gpointer data, gpointer userdata);
static void __insert_uiapplication_locale_info(gpointer data, gpointer userdata);
static void __insert_pkglocale_info(gpointer data, gpointer userdata);
-static int __insert_manifest_info_in_db(manifest_x *mfx);
+static int __insert_manifest_info_in_db(manifest_x *mfx, uid_t uid);
static int __delete_manifest_info_from_db(manifest_x *mfx, uid_t uid);
static int __delete_subpkg_info_from_db(char *appid);
static int __delete_appinfo_from_db(char *db_table, const char *appid);
return 0;
}
-static int __insert_manifest_info_in_db(manifest_x *mfx)
+static int __insert_manifest_info_in_db(manifest_x *mfx, uid_t uid)
{
label_x *lbl = mfx->label;
license_x *lcn = mfx->license;
if (ath->href)
auth_href = ath->href;
}
+ /*Insert in the package_cert_info CERT_DB*/
+ pkgmgrinfo_instcertinfo_h cert_handle = NULL;
+ ret = pkgmgrinfo_set_cert_value(&cert_handle, PMINFO_SET_AUTHOR_ROOT_CERT, "author root certificate");
+ if (ret != PMINFO_R_OK) {
+ pkgmgrinfo_destroy_certinfo_set_handle(cert_handle);
+ _LOGE("Cert Info DB create handle failed\n");
+ return -1;
+ }
+ ret = pkgmgrinfo_save_certinfo(mfx->package, &cert_handle, uid);
+ if (ret != PMINFO_R_OK) {
+ pkgmgrinfo_destroy_certinfo_set_handle(cert_handle);
+ _LOGE("Cert Info DB Insert Failed\n");
+ return -1;
+ }
+
/*Insert in the package_info DB*/
if (mfx->type)
type = strdup(mfx->type);
goto err;
}
_LOGD("Transaction Begin\n");
- ret = __insert_manifest_info_in_db(mfx);
+ ret = __insert_manifest_info_in_db(mfx, GLOBAL_USER);
if (ret == -1) {
_LOGD("Insert into DB failed. Rollback now\n");
sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
goto err;
}
_LOGD("Transaction Begin\n");
- ret = __insert_manifest_info_in_db(mfx);
+ ret = __insert_manifest_info_in_db(mfx, uid);
if (ret == -1) {
_LOGD("Insert into DB failed. Rollback now\n");
sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
goto err;
}
- ret = __insert_manifest_info_in_db(mfx);
+ ret = __insert_manifest_info_in_db(mfx, uid);
if (ret == -1) {
_LOGD("Insert into DB failed. Rollback now\n");
sqlite3_exec(pkgmgr_parser_db, "ROLLBACK", NULL, NULL, NULL);
static int __open_manifest_db(uid_t uid);
static int __close_manifest_db(void);
-static int __open_cert_db(uid_t uid);
+static int __open_cert_db(uid_t uid, char* mode);
static int __close_cert_db(void);
static int __exec_pkginfo_query(char *query, void *data);
static int __exec_certinfo_query(char *query, void *data);
static void __get_filter_condition(gpointer data, char **condition);
static void __get_metadata_filter_condition(gpointer data, char **condition);
static gint __compare_func(gconstpointer data1, gconstpointer data2);
-static int __delete_certinfo(const char *pkgid);
+static int __delete_certinfo(const char *pkgid, uid_t uid);
static int _check_create_Cert_db( sqlite3 *certdb);
static int __exec_db_query(sqlite3 *db, char *query, sqlite_query_callback callback, void *data);
query_attach, error_message);
sqlite3_free(error_message);
}
- struct dbtable {
- char *name_table;
- char *primary_key;
- };
snprintf(query_view, MAX_QUERY_LEN - 1, "CREATE temp VIEW %s as select * from (select *,0 as for_all_users from main.%s union select *,1 as for_all_users from Global.%s )", "package_cert_index_info", "package_cert_index_info", "package_cert_index_info");
if (SQLITE_OK !=
if(cert_db.ref) {
if(--cert_db.ref == 0)
sqlite3_close(GET_DB(cert_db));
+ return 0;
}
_LOGE("Certificate DB is already closed !!\n");
return -1;
}
-static int __open_cert_db(uid_t uid)
+static int __open_cert_db(uid_t uid, char* mode)
{
int ret = -1;
+ if(cert_db.ref) {
+ cert_db.ref ++;
+ return 0;
+ }
+
const char* user_cert_parser = getUserPkgCertDBPathUID(uid);
if (access(user_cert_parser, F_OK) == 0) {
ret =
db_util_open_with_options(user_cert_parser, &GET_DB(cert_db),
- SQLITE_OPEN_READWRITE, NULL);
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
retvm_if(ret != SQLITE_OK, -1, "connect db [%s] failed!\n", user_cert_parser);
-
- ret = _pkgmgr_parser_attach_create_view_certdb(GET_DB(cert_db),uid);
- retvm_if(ret != SQLITE_OK, -1, "attach db [%s] failed!\n", user_cert_parser);
-
+ cert_db.ref ++;
+ if ((strcmp(mode, "w") != 0)) {
+ ret = _pkgmgr_parser_attach_create_view_certdb(GET_DB(cert_db),uid);
+ retvm_if(ret != SQLITE_OK, -1, "attach db [%s] failed!\n", user_cert_parser);
+ }
return 0;
}
_LOGE("Cert DB does not exists !!\n");
if(datacontrol_db.ref) {
if(--datacontrol_db.ref == 0)
sqlite3_close(GET_DB(datacontrol_db));
+ return 0;
}
_LOGE("Certificate DB is already closed !!\n");
return -1;
static int __open_datacontrol_db()
{
int ret = -1;
+ if(datacontrol_db.ref) {
+ datacontrol_db.ref ++;
+ return 0;
+ }
if (access(DATACONTROL_DB, F_OK) == 0) {
ret =
db_util_open_with_options(DATACONTROL_DB, &GET_DB(datacontrol_db),
SQLITE_OPEN_READONLY, NULL);
retvm_if(ret != SQLITE_OK, -1, "connect db [%s] failed!\n", DATACONTROL_DB);
+ datacontrol_db.ref ++;
return 0;
}
_LOGE("Datacontrol DB does not exists !!\n");
}
-static int __delete_certinfo(const char *pkgid)
+static int __delete_certinfo(const char *pkgid, uid_t uid)
{
int ret = -1;
int i = 0;
ret = PMINFO_R_ERROR;
goto err;
}
+
+ __open_cert_db(uid, "w");
/*populate certinfo from DB*/
snprintf(query, MAX_QUERY_LEN, "select * from package_cert_info where package='%s' ", pkgid);
ret = __exec_certinfo_query(query, (void *)certinfo);
(certinfo->cert_info)[i] = NULL;
}
}
+ __close_cert_db();
free(certinfo);
certinfo = NULL;
return ret;
info = (pkgmgr_cert_x *)calloc(1, sizeof(pkgmgr_cert_x));
retvm_if(info == NULL, PMINFO_R_ERROR, "Out of Memory!!!");
- ret = __open_cert_db(uid);
+ ret = __open_cert_db(uid, "r");
if (ret != 0) {
ret = PMINFO_R_ERROR;
goto err;
return PMINFO_R_OK;
}
-API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle)
+API int pkgmgrinfo_pkginfo_load_certinfo(const char *pkgid, pkgmgrinfo_certinfo_h handle, uid_t uid)
{
retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "package ID is NULL\n");
retvm_if(handle == NULL, PMINFO_R_EINVAL, "Certinfo handle is NULL\n");
char query[MAX_QUERY_LEN] = {'\0'};
int exist = 0;
int i = 0;
- const char* user_pkg_cert = NULL;
/*Open db.*/
- user_pkg_cert = getUserPkgCertDBPath();
- ret = db_util_open_with_options(user_pkg_cert, &GET_DB(cert_db),
- SQLITE_OPEN_READWRITE, NULL);
+ ret = __open_cert_db(uid,"r");
if (ret != SQLITE_OK) {
- _LOGE("connect db [%s] failed!\n", user_pkg_cert);
- return PMINFO_R_ERROR;
+ _LOGE("connect db [%s] failed!\n");
+ ret = PMINFO_R_ERROR;
+ goto err;
}
_check_create_Cert_db(GET_DB(cert_db));
/*validate pkgid*/
return PMINFO_R_OK;
}
-API int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle)
+API int pkgmgrinfo_save_certinfo(const char *pkgid, pkgmgrinfo_instcertinfo_h handle, uid_t uid)
{
retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "package ID is NULL\n");
retvm_if(handle == NULL, PMINFO_R_EINVAL, "Certinfo handle is NULL\n");
info->pkgid = strdup(pkgid);
/*Open db.*/
- ret = db_util_open_with_options(getUserPkgCertDBPath(), &GET_DB(cert_db),
- SQLITE_OPEN_READWRITE, NULL);
- if (ret != SQLITE_OK) {
- _LOGE("connect db [%s] failed!\n", getUserPkgCertDBPath());
+ ret =__open_cert_db(uid, "w");
+ if (ret != 0) {
ret = PMINFO_R_ERROR;
+ _LOGE("Failed to open cert db \n");
goto err;
}
_check_create_Cert_db(GET_DB(cert_db));
/*Begin Transaction*/
ret = sqlite3_exec(GET_DB(cert_db), "BEGIN EXCLUSIVE", NULL, NULL, NULL);
- if (ret != SQLITE_OK) {
- _LOGE("Failed to begin transaction\n");
+ if (ret == -1) {
+ _LOGE("Failed to begin transaction %s\n");
ret = PMINFO_R_ERROR;
goto err;
}
- _LOGE("Transaction Begin\n");
+
/*Check if request is to insert/update*/
snprintf(query, MAX_QUERY_LEN, "select exists(select * from package_cert_info where package='%s')", pkgid);
if (SQLITE_OK !=
/*Update request.
We cant just issue update query directly. We need to manage index table also.
Hence it is better to delete and insert again in case of update*/
- ret = __delete_certinfo(pkgid);
+ ret = __delete_certinfo(pkgid, uid);
if (ret < 0)
_LOGE("Certificate Deletion Failed\n");
}
(info->cert_id)[i] = indexinfo->cert_id;
(info->is_new)[i] = is_new;
(info->ref_count)[i] = indexinfo->cert_ref_count;
- _LOGE("Id:Count = %d %d\n", indexinfo->cert_id, indexinfo->cert_ref_count);
indexinfo->cert_id = 0;
indexinfo->cert_ref_count = 0;
is_new = 0;
ret = PMINFO_R_ERROR;
goto err;
}
- _LOGE("Transaction Commit and End\n");
+
ret = PMINFO_R_OK;
err:
__close_cert_db();
retvm_if(pkgid == NULL, PMINFO_R_EINVAL, "Argument supplied is NULL\n");
int ret = -1;
/*Open db.*/
- ret = __open_cert_db(uid);
+ ret = __open_cert_db(uid, "w");
if (ret != 0) {
_LOGE("connect db [%s] failed!\n", getUserPkgCertDBPathUID(uid));
ret = PMINFO_R_ERROR;
goto err;
}
_LOGE("Transaction Begin\n");
- ret = __delete_certinfo(pkgid);
+ ret = __delete_certinfo(pkgid, uid);
if (ret < 0) {
_LOGE("Certificate Deletion Failed\n");
} else {