Loading cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ interface IIdmap2 { const int POLICY_SYSTEM_PARTITION = 0x00000002; const int POLICY_VENDOR_PARTITION = 0x00000004; const int POLICY_PRODUCT_PARTITION = 0x00000008; const int POLICY_SIGNATURE = 0x00000010; @utf8InCpp String getIdmapPath(@utf8InCpp String overlayApkPath, int userId); boolean removeIdmap(@utf8InCpp String overlayApkPath, int userId); Loading cmds/idmap2/libidmap2/Idmap.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -284,7 +284,7 @@ std::unique_ptr<const Idmap> Idmap::FromBinaryStream(std::istream& stream, bool CheckOverlayable(const LoadedPackage& target_package, const utils::OverlayManifestInfo& overlay_info, const PolicyBitmask& fulfilled_polices, const ResourceId& resid) { const PolicyBitmask& fulfilled_policies, const ResourceId& resid) { const OverlayableInfo* overlayable_info = target_package.GetOverlayableInfo(resid); if (overlayable_info == nullptr) { // If the resource does not have an overlayable definition, allow the resource to be overlaid. Loading @@ -299,7 +299,7 @@ bool CheckOverlayable(const LoadedPackage& target_package, } // Enforce policy restrictions if the resource is declared as overlayable. return (overlayable_info->policy_flags & fulfilled_polices) != 0; return (overlayable_info->policy_flags & fulfilled_policies) != 0; } std::unique_ptr<const Idmap> Idmap::FromApkAssets( Loading cmds/idmap2/libidmap2/Policies.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ const std::map<android::StringPiece, PolicyFlags> kStringToFlag = { {"product", PolicyFlags::POLICY_PRODUCT_PARTITION}, {"system", PolicyFlags::POLICY_SYSTEM_PARTITION}, {"vendor", PolicyFlags::POLICY_VENDOR_PARTITION}, {"signature", PolicyFlags::POLICY_SIGNATURE}, }; } // namespace Loading cmds/idmap2/tests/BinaryStreamVisitorTests.cpp +10 −7 Original line number Diff line number Diff line Loading @@ -129,28 +129,31 @@ TEST(BinaryStreamVisitorTests, CreateIdmapFromApkAssetsInteropWithLoadedIdmap) { success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_system_vendor ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/str1 success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_signature ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str1 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0000); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str2 success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str2 ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str3 success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str3 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0001); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str4 success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str4 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0002); success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/x success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/x ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/y success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/y ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/z success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/z ASSERT_FALSE(success); } Loading cmds/idmap2/tests/FileUtilsTests.cpp +15 −7 Original line number Diff line number Diff line Loading @@ -39,12 +39,13 @@ TEST(FileUtilsTests, FindFilesFindEverythingNonRecursive) { [](unsigned char type ATTRIBUTE_UNUSED, const std::string& path ATTRIBUTE_UNUSED) -> bool { return true; }); ASSERT_THAT(v, NotNull()); ASSERT_EQ(v->size(), 6U); ASSERT_EQ(v->size(), 7U); ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), std::set<std::string>({ root + "/.", root + "/..", root + "/overlay", root + "/target", root + "/signature-overlay", root + "/system-overlay", root + "/system-overlay-invalid", })); Loading @@ -56,15 +57,22 @@ TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) { return type == DT_REG && path.size() > 4 && path.compare(path.size() - 4, 4, ".apk") == 0; }); ASSERT_THAT(v, NotNull()); ASSERT_EQ(v->size(), 9U); ASSERT_EQ(v->size(), 10U); ASSERT_EQ( std::set<std::string>(v->begin(), v->end()), std::set<std::string>( {root + "/target/target.apk", root + "/target/target-no-overlayable.apk", root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk", root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk", root + "/system-overlay/system-overlay.apk", root + "/system-overlay-invalid/system-overlay-invalid.apk"})); { root + "/target/target.apk", root + "/target/target-no-overlayable.apk", root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk", root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk", root + "/signature-overlay/signature-overlay.apk", root + "/system-overlay/system-overlay.apk", root + "/system-overlay-invalid/system-overlay-invalid.apk" })); } TEST(FileUtilsTests, ReadFile) { Loading Loading
cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ interface IIdmap2 { const int POLICY_SYSTEM_PARTITION = 0x00000002; const int POLICY_VENDOR_PARTITION = 0x00000004; const int POLICY_PRODUCT_PARTITION = 0x00000008; const int POLICY_SIGNATURE = 0x00000010; @utf8InCpp String getIdmapPath(@utf8InCpp String overlayApkPath, int userId); boolean removeIdmap(@utf8InCpp String overlayApkPath, int userId); Loading
cmds/idmap2/libidmap2/Idmap.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -284,7 +284,7 @@ std::unique_ptr<const Idmap> Idmap::FromBinaryStream(std::istream& stream, bool CheckOverlayable(const LoadedPackage& target_package, const utils::OverlayManifestInfo& overlay_info, const PolicyBitmask& fulfilled_polices, const ResourceId& resid) { const PolicyBitmask& fulfilled_policies, const ResourceId& resid) { const OverlayableInfo* overlayable_info = target_package.GetOverlayableInfo(resid); if (overlayable_info == nullptr) { // If the resource does not have an overlayable definition, allow the resource to be overlaid. Loading @@ -299,7 +299,7 @@ bool CheckOverlayable(const LoadedPackage& target_package, } // Enforce policy restrictions if the resource is declared as overlayable. return (overlayable_info->policy_flags & fulfilled_polices) != 0; return (overlayable_info->policy_flags & fulfilled_policies) != 0; } std::unique_ptr<const Idmap> Idmap::FromApkAssets( Loading
cmds/idmap2/libidmap2/Policies.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ const std::map<android::StringPiece, PolicyFlags> kStringToFlag = { {"product", PolicyFlags::POLICY_PRODUCT_PARTITION}, {"system", PolicyFlags::POLICY_SYSTEM_PARTITION}, {"vendor", PolicyFlags::POLICY_VENDOR_PARTITION}, {"signature", PolicyFlags::POLICY_SIGNATURE}, }; } // namespace Loading
cmds/idmap2/tests/BinaryStreamVisitorTests.cpp +10 −7 Original line number Diff line number Diff line Loading @@ -129,28 +129,31 @@ TEST(BinaryStreamVisitorTests, CreateIdmapFromApkAssetsInteropWithLoadedIdmap) { success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_system_vendor ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/str1 success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_signature ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str1 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0000); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str2 success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str2 ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str3 success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str3 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0001); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str4 success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str4 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0002); success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/x success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/x ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/y success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/y ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/z success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/z ASSERT_FALSE(success); } Loading
cmds/idmap2/tests/FileUtilsTests.cpp +15 −7 Original line number Diff line number Diff line Loading @@ -39,12 +39,13 @@ TEST(FileUtilsTests, FindFilesFindEverythingNonRecursive) { [](unsigned char type ATTRIBUTE_UNUSED, const std::string& path ATTRIBUTE_UNUSED) -> bool { return true; }); ASSERT_THAT(v, NotNull()); ASSERT_EQ(v->size(), 6U); ASSERT_EQ(v->size(), 7U); ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), std::set<std::string>({ root + "/.", root + "/..", root + "/overlay", root + "/target", root + "/signature-overlay", root + "/system-overlay", root + "/system-overlay-invalid", })); Loading @@ -56,15 +57,22 @@ TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) { return type == DT_REG && path.size() > 4 && path.compare(path.size() - 4, 4, ".apk") == 0; }); ASSERT_THAT(v, NotNull()); ASSERT_EQ(v->size(), 9U); ASSERT_EQ(v->size(), 10U); ASSERT_EQ( std::set<std::string>(v->begin(), v->end()), std::set<std::string>( {root + "/target/target.apk", root + "/target/target-no-overlayable.apk", root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk", root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk", root + "/system-overlay/system-overlay.apk", root + "/system-overlay-invalid/system-overlay-invalid.apk"})); { root + "/target/target.apk", root + "/target/target-no-overlayable.apk", root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk", root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk", root + "/signature-overlay/signature-overlay.apk", root + "/system-overlay/system-overlay.apk", root + "/system-overlay-invalid/system-overlay-invalid.apk" })); } TEST(FileUtilsTests, ReadFile) { Loading