Loading cmds/installd/InstalldNativeService.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -474,7 +474,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 +94 −91 Original line number Diff line number Diff line Loading @@ -509,97 +509,100 @@ 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, 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 @@ -474,7 +474,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 +94 −91 Original line number Diff line number Diff line Loading @@ -509,97 +509,100 @@ 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, 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