Fix: Remove all SharedRO rules after pkg uninstallation. 36/184636/9
authorDariusz Michaluk <d.michaluk@samsung.com>
Tue, 17 Jul 2018 16:34:16 +0000 (18:34 +0200)
committerDariusz Michaluk <d.michaluk@samsung.com>
Fri, 17 Aug 2018 14:27:34 +0000 (16:27 +0200)
Change-Id: Icf7d14507170bc98f61a7aaa3f5f37437b769bb9

src/common/service_impl.cpp

index 74cccd503f268df9e2413353b2d6079c3e11e70b..6ffb317c08195a45b21424d3e9a7e693880e4dea 100644 (file)
@@ -1038,9 +1038,18 @@ int ServiceImpl::appUninstallSmackRules(app_inst_req &req, UninstallHelper &uh)
                     SmackRules::updatePackageRules(req.pkgName, uh.pkgLabels);
                 }
 
-                SmackRules::generateSharedRORules(uh.pkgsProcessLabels, uh.pkgsInfo);
-                if (uh.removePkg)
+                if (uh.removePkg) {
+                    // remove deinstalled package from packages list and generate SharedRO rules for others
+                    uh.pkgsProcessLabels.erase(
+                        std::remove_if(uh.pkgsProcessLabels.begin(), uh.pkgsProcessLabels.end(),
+                        [&](const std::pair<std::string, std::vector<std::string>> &pkg) {
+                            return pkg.first == req.pkgName;
+                        }),
+                        uh.pkgsProcessLabels.end());
+
+                    SmackRules::generateSharedRORules(uh.pkgsProcessLabels, uh.pkgsInfo);
                     SmackRules::revokeSharedRORules(uh.pkgsProcessLabels, req.pkgName);
+                }
             }
 
             if (uh.authorId != -1 && uh.removeAuthor) {