{
int ret;
char filename[PATH_MAX];
+ char user_data_path[PATH_MAX];
+ char path_buf[PATH_MAX];
const char *rootpath;
+ char *real_path;
pkgmgrinfo_pkginfo_h pkg_handle = NULL;
char *pkg_type = NULL;
struct stat st_file_info;
char buf[1024] = {0, };
+ int err;
if (pkgid == NULL || file_path == NULL) {
LOGE("parameter is NULL");
tzplatform_set_user(uid);
rootpath = tzplatform_getenv(TZ_USER_APP);
+ snprintf(user_data_path, sizeof(user_data_path), "%s/%s/data/",
+ rootpath, pkgid);
+
+ snprintf(filename, sizeof(filename), "%s%s", user_data_path, file_path);
+ real_path = realpath(filename, path_buf);
+ err = errno;
+ LOGW("path: %s, real_path, %s", filename, real_path);
+ if (real_path == NULL) {
+ printf("error: %d", err);
+ LOGE("Failed to get realpath. error(%d)", err);
+ ret = -1;
+ goto out;
+ }
+
+ if (strncmp(user_data_path, real_path, strlen(user_data_path)) != 0) {
+ LOGE("Invalid path.(%s)", filename);
+ ret = -1;
+ goto out;
+ }
+
__send_signal(pkgid, pkg_type,
PKGMGR_INSTALLER_START_KEY_STR,
PKGMGR_INSTALLER_CLEAR_EVENT_STR);
+ snprintf(user_data_path, sizeof(user_data_path), "%s/%s/data/",
+ rootpath, pkgid);
- snprintf(filename, sizeof(filename), "%s/%s/data/%s",
- rootpath, pkgid, file_path);
if (lstat(filename, &st_file_info) < 0)
perror(filename);
}
+out:
tzplatform_reset_user();
pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle);
return ret;