예제 #1
0
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;
}
예제 #2
0
파일: tizen.c 프로젝트: aklein53/neard
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;
}