Loading cmds/installd/InstalldNativeService.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -473,7 +473,8 @@ static bool internal_storage_has_project_id() { StringPrintf("%smisc/installd/using_project_ids", android_data_dir.c_str()); sUsingProjectIdsFlag = access(using_project_ids.c_str(), F_OK) == 0; }); return sUsingProjectIdsFlag; // return sUsingProjectIdsFlag; return false; } static int prepare_app_dir(const std::string& path, mode_t target_mode, uid_t uid, gid_t gid, Loading cmds/installd/tests/installd_service_test.cpp +0 −90 Original line number Diff line number Diff line Loading @@ -509,97 +509,7 @@ TEST_F(ServiceTest, GetAppSizeManualForMedia) { system(removeCommand.c_str()); } } TEST_F(ServiceTest, GetAppSizeProjectID_UID) { struct stat s; std::string externalPicDir = StringPrintf("%s/Pictures", create_data_media_path(nullptr, 0).c_str()); if (stat(externalPicDir.c_str(), &s) == 0) { // fetch the appId from the uid of the external storage owning app int32_t externalStorageAppId = multiuser_get_app_id(s.st_uid); // Fetch Package Name for the external storage owning app uid std::string pkg = get_package_name(s.st_uid); std::vector<int64_t> externalStorageSize, externalStorageSizeAfterAddingCacheFile; std::vector<int64_t> ceDataInodes; std::vector<std::string> codePaths; std::vector<std::string> packageNames; // set up parameters packageNames.push_back(pkg); ceDataInodes.push_back(0); // initialise the mounts service->invalidateMounts(); auto using_project_ids = StringPrintf("%smisc/installd/using_project_ids", android_data_dir.c_str()); bool usingProjectIds = access(using_project_ids.c_str(), F_OK) == 0; if (!usingProjectIds) { service->setFirstBoot(); } if (access(using_project_ids.c_str(), F_OK) != 0) { // projectids is not used, so check that ioctl features should be absent auto temp_path = StringPrintf("%smisc/installd/ioctl_check", android_data_dir.c_str()); if (access(temp_path.c_str(), F_OK) != 0) { open(temp_path.c_str(), O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0644); bool result = set_quota_project_id(temp_path, 0, false) == 0; // delete the temp file // remove the external file remove(temp_path.c_str()); // since using_project_ids file is not present, so ioctl settings should be absent // that is denoted by the result of setting project id flag as false ASSERT_FALSE(result); } } // call the getAppSize to get the current size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &externalStorageSize); // add a file with 20MB size to the external storage std::string externalStorageCacheDir = StringPrintf("%s/%s/cache", create_data_user_ce_path(nullptr, 0).c_str(), pkg.c_str()); std::string cacheFileLocation = StringPrintf("%s/%s", externalStorageCacheDir.c_str(), "External.jpg"); std::string externalFileContentCommand = StringPrintf("dd if=/dev/zero of=%s bs=1M count=20", cacheFileLocation.c_str()); system(externalFileContentCommand.c_str()); // call the getAppSize again to get the new size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &externalStorageSizeAfterAddingCacheFile); // check that the size of cache and data increases when cache file is added int64_t sizeDiffData = externalStorageSizeAfterAddingCacheFile[1] - externalStorageSize[1]; int64_t sizeDiffCache = externalStorageSizeAfterAddingCacheFile[2] - externalStorageSize[2]; ASSERT_TRUE(sizeDiffData == sizeDiffCache); // remove the external file std::string removeCommand = StringPrintf("rm -f %s", cacheFileLocation.c_str()); system(removeCommand.c_str()); // remove the setFirstBoot setting std::string removeCommand2 = "rm -f /data/misc/installd/using_project_ids"; system(removeCommand2.c_str()); // Do now without project id std::vector<int64_t> sizeWithUID, sizeWithUIDAfterAddingCacheFile; // call the getAppSize to get the current size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &sizeWithUID); // add a file with 20MB size to the external storage system(externalFileContentCommand.c_str()); // call the getAppSize again to get the new size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &sizeWithUIDAfterAddingCacheFile); // check that the size of cache and data increases when cache file is added sizeDiffData = sizeWithUIDAfterAddingCacheFile[1] - sizeWithUID[1]; sizeDiffCache = sizeWithUIDAfterAddingCacheFile[2] - sizeWithUID[2]; ASSERT_TRUE(sizeDiffData == sizeDiffCache); // remove the external file system(removeCommand.c_str()); // reset the using_project_id if it was initially set if (usingProjectIds) { service->setFirstBoot(); } } } TEST_F(ServiceTest, GetAppSizeWrongSizes) { int32_t externalStorageAppId = -1; std::vector<int64_t> externalStorageSize; Loading Loading
cmds/installd/InstalldNativeService.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -473,7 +473,8 @@ static bool internal_storage_has_project_id() { StringPrintf("%smisc/installd/using_project_ids", android_data_dir.c_str()); sUsingProjectIdsFlag = access(using_project_ids.c_str(), F_OK) == 0; }); return sUsingProjectIdsFlag; // return sUsingProjectIdsFlag; return false; } static int prepare_app_dir(const std::string& path, mode_t target_mode, uid_t uid, gid_t gid, Loading
cmds/installd/tests/installd_service_test.cpp +0 −90 Original line number Diff line number Diff line Loading @@ -509,97 +509,7 @@ TEST_F(ServiceTest, GetAppSizeManualForMedia) { system(removeCommand.c_str()); } } TEST_F(ServiceTest, GetAppSizeProjectID_UID) { struct stat s; std::string externalPicDir = StringPrintf("%s/Pictures", create_data_media_path(nullptr, 0).c_str()); if (stat(externalPicDir.c_str(), &s) == 0) { // fetch the appId from the uid of the external storage owning app int32_t externalStorageAppId = multiuser_get_app_id(s.st_uid); // Fetch Package Name for the external storage owning app uid std::string pkg = get_package_name(s.st_uid); std::vector<int64_t> externalStorageSize, externalStorageSizeAfterAddingCacheFile; std::vector<int64_t> ceDataInodes; std::vector<std::string> codePaths; std::vector<std::string> packageNames; // set up parameters packageNames.push_back(pkg); ceDataInodes.push_back(0); // initialise the mounts service->invalidateMounts(); auto using_project_ids = StringPrintf("%smisc/installd/using_project_ids", android_data_dir.c_str()); bool usingProjectIds = access(using_project_ids.c_str(), F_OK) == 0; if (!usingProjectIds) { service->setFirstBoot(); } if (access(using_project_ids.c_str(), F_OK) != 0) { // projectids is not used, so check that ioctl features should be absent auto temp_path = StringPrintf("%smisc/installd/ioctl_check", android_data_dir.c_str()); if (access(temp_path.c_str(), F_OK) != 0) { open(temp_path.c_str(), O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0644); bool result = set_quota_project_id(temp_path, 0, false) == 0; // delete the temp file // remove the external file remove(temp_path.c_str()); // since using_project_ids file is not present, so ioctl settings should be absent // that is denoted by the result of setting project id flag as false ASSERT_FALSE(result); } } // call the getAppSize to get the current size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &externalStorageSize); // add a file with 20MB size to the external storage std::string externalStorageCacheDir = StringPrintf("%s/%s/cache", create_data_user_ce_path(nullptr, 0).c_str(), pkg.c_str()); std::string cacheFileLocation = StringPrintf("%s/%s", externalStorageCacheDir.c_str(), "External.jpg"); std::string externalFileContentCommand = StringPrintf("dd if=/dev/zero of=%s bs=1M count=20", cacheFileLocation.c_str()); system(externalFileContentCommand.c_str()); // call the getAppSize again to get the new size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &externalStorageSizeAfterAddingCacheFile); // check that the size of cache and data increases when cache file is added int64_t sizeDiffData = externalStorageSizeAfterAddingCacheFile[1] - externalStorageSize[1]; int64_t sizeDiffCache = externalStorageSizeAfterAddingCacheFile[2] - externalStorageSize[2]; ASSERT_TRUE(sizeDiffData == sizeDiffCache); // remove the external file std::string removeCommand = StringPrintf("rm -f %s", cacheFileLocation.c_str()); system(removeCommand.c_str()); // remove the setFirstBoot setting std::string removeCommand2 = "rm -f /data/misc/installd/using_project_ids"; system(removeCommand2.c_str()); // Do now without project id std::vector<int64_t> sizeWithUID, sizeWithUIDAfterAddingCacheFile; // call the getAppSize to get the current size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &sizeWithUID); // add a file with 20MB size to the external storage system(externalFileContentCommand.c_str()); // call the getAppSize again to get the new size of the external storage owning app service->getAppSize(std::nullopt, packageNames, 0, InstalldNativeService::FLAG_USE_QUOTA, externalStorageAppId, ceDataInodes, codePaths, &sizeWithUIDAfterAddingCacheFile); // check that the size of cache and data increases when cache file is added sizeDiffData = sizeWithUIDAfterAddingCacheFile[1] - sizeWithUID[1]; sizeDiffCache = sizeWithUIDAfterAddingCacheFile[2] - sizeWithUID[2]; ASSERT_TRUE(sizeDiffData == sizeDiffCache); // remove the external file system(removeCommand.c_str()); // reset the using_project_id if it was initially set if (usingProjectIds) { service->setFirstBoot(); } } } TEST_F(ServiceTest, GetAppSizeWrongSizes) { int32_t externalStorageAppId = -1; std::vector<int64_t> externalStorageSize; Loading