static int __get_dir_name(char *dirname) { char pkg_name[PKGNAME_MAX]; int r; int pid; pid = getpid(); if (pid < 0) return -1; aul_app_get_pkgname_bypid(pid, pkg_name, PKGNAME_MAX); r = snprintf(dirname, PATH_MAX, PATH_APP_ROOT "/%s" PATH_RES PATH_LOCALE,pkg_name); if (r < 0) return -1; if (access(dirname, R_OK) == 0) return 0; r = snprintf(dirname, PATH_MAX, PATH_RO_APP_ROOT "/%s" PATH_RES PATH_LOCALE,pkg_name); if (r < 0) return -1; return 0; }
static GSList *tizen_get_hashes(pid_t pid) { char pkg_name[256] = { 0, }; pkgmgrinfo_appinfo_h appinfo; pkgmgr_certinfo_h certinfo; GSList *cert_list = NULL; char *pkgid; int i; DBG(""); if (aul_app_get_pkgname_bypid(pid, pkg_name, sizeof(pkg_name)) < 0) return NULL; if (pkgmgrinfo_appinfo_get_appinfo(pkg_name, &appinfo) < 0) return NULL; if (pkgmgrinfo_appinfo_get_pkgid(appinfo, &pkgid) < 0) goto destroy_appinfo; DBG("Package ID %s", pkgid); cert_list = g_hash_table_lookup(cert_hash, pkgid); if (cert_list != NULL) return cert_list; if (pkgmgr_pkginfo_create_certinfo(&certinfo) < 0) goto destroy_appinfo; if (pkgmgr_pkginfo_load_certinfo(pkgid, certinfo) < 0) goto destroy_certinfo; for (i = 0; i < MAX_CERT_TYPE; i++) { const char *cert_64 = NULL; const char *cert_bin = NULL; uint8_t *hash = NULL; gsize length; if (pkgmgr_pkginfo_get_cert_value(certinfo, (pkgmgr_cert_type)i, &cert_64) < 0) continue; if (cert_64 != NULL && strlen(cert_64) > 0) { cert_bin = g_base64_decode(cert_64, &length); if (cert_bin != NULL && length > 0) hash = digest_cert(cert_bin, length); if (hash != NULL) cert_list = g_slist_append(cert_list, hash); } } if (cert_list != NULL) g_hash_table_insert(cert_hash, g_strdup(pkgid), cert_list); destroy_certinfo: pkgmgr_pkginfo_destroy_certinfo(certinfo); destroy_appinfo: pkgmgrinfo_appinfo_destroy_appinfo(appinfo); return cert_list; }