From: Sangyoon Jang Date: Tue, 15 Oct 2019 07:02:04 +0000 (+0900) Subject: Fix installing privileges of hybrid package X-Git-Tag: submit/tizen/20191112.050420~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F40%2F215740%2F2;p=platform%2Fcore%2Fappfw%2Fwgt-backend.git Fix installing privileges of hybrid package Change-Id: Ic8db846e8ffd2b09327f81778036e62c751584be Signed-off-by: Sangyoon Jang --- diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 2e0efe3..31028d0 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -132,9 +132,6 @@ void HybridInstaller::InstallSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -155,6 +152,9 @@ void HybridInstaller::InstallSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -185,9 +185,6 @@ void HybridInstaller::UpdateSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -215,6 +212,9 @@ void HybridInstaller::UpdateSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -284,9 +284,6 @@ void HybridInstaller::DeltaSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -311,6 +308,9 @@ void HybridInstaller::DeltaSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep( @@ -363,9 +363,6 @@ void HybridInstaller::MountInstallSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -386,6 +383,9 @@ void HybridInstaller::MountInstallSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -416,9 +416,6 @@ void HybridInstaller::MountUpdateSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -445,6 +442,9 @@ void HybridInstaller::MountUpdateSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -472,9 +472,6 @@ void HybridInstaller::ManifestDirectInstallSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -486,6 +483,9 @@ void HybridInstaller::ManifestDirectInstallSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep( ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE); @@ -512,9 +512,6 @@ void HybridInstaller::ManifestDirectUpdateSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep( @@ -529,6 +526,9 @@ void HybridInstaller::ManifestDirectUpdateSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep( ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE); @@ -550,11 +550,11 @@ void HybridInstaller::ManifestPartialInstallSteps() { AddStep(); AddStep( wgt::configuration::StepParse::ConfigLocation::INSTALLED, true); - AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); AddStep(); AddStep(false); + AddStep(); AddStep( ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); @@ -580,7 +580,6 @@ void HybridInstaller::ManifestPartialUpdateSteps() { AddStep(); AddStep( wgt::configuration::StepParse::ConfigLocation::INSTALLED, true); - AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); AddStep(); @@ -588,6 +587,7 @@ void HybridInstaller::ManifestPartialUpdateSteps() { AddStep( ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, ci::configuration::StepParseManifest::StoreLocation::BACKUP); + AddStep(); AddStep( ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); @@ -640,9 +640,6 @@ void HybridInstaller::ReadonlyUpdateInstallSteps() { AddStep(); AddStep(); AddStep(true); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -668,6 +665,9 @@ void HybridInstaller::ReadonlyUpdateInstallSteps() { AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -759,13 +759,13 @@ void HybridInstaller::RecoverDBSteps() { AddStep( wgt::configuration::StepParse::ConfigLocation::INSTALLED, true); AddStep(); + AddStep(); + AddStep( + hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); AddStep(); AddStep(); AddStep( ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); - AddStep(); - AddStep( - hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); AddStep(); } diff --git a/src/hybrid/step/pkgmgr/step_merge_xml.cc b/src/hybrid/step/pkgmgr/step_merge_xml.cc index 0c87c0d..e36e542 100644 --- a/src/hybrid/step/pkgmgr/step_merge_xml.cc +++ b/src/hybrid/step/pkgmgr/step_merge_xml.cc @@ -32,12 +32,12 @@ const std::vector kBlackListNodes = { {"author"}, {"description"}, {"profile"}, - {"privileges"}, - {"provides-appdefined-privileges"}, {"trust-anchor"}, }; const std::vector kNeedMergeNodes = { {"manifest"}, + {"privileges"}, + {"provides-appdefined-privileges"}, }; const std::vector> kApplicationNodeNames = { {"ui-application", "uiapp"}, @@ -46,6 +46,9 @@ const std::vector> kApplicationNodeNames = { {"watch-application", "watchapp"}, }; +const xmlChar kPrivilegeTypeAttributeKey[] = "type"; +const char kXmlXPrivilegeExpr[] = "//*[local-name()='privilege']"; + } // namespace namespace hybrid { @@ -122,6 +125,27 @@ void StepMergeXml::SetXmlNodeAttribute(xmlNodePtr node, reinterpret_cast(attr_val.c_str())); } +bool StepMergeXml::SetTpkPrivilegeType() { + xmlXPathContextPtr xpath_ctx = xmlXPathNewContext(tpk_doc_); + if (!xpath_ctx) { + LOG(ERROR) << "Failed to create XPath context"; + return false; + } + + xmlXPathObjectPtr xpath_obj = xmlXPathEvalExpression( + (const xmlChar*)kXmlXPrivilegeExpr, xpath_ctx); + if (xpath_obj && !xmlXPathNodeSetIsEmpty(xpath_obj->nodesetval)) { + for (int i = 0; i < xpath_obj->nodesetval->nodeNr; i++) { + xmlNodePtr node = xpath_obj->nodesetval->nodeTab[i]; + xmlSetProp(node, kPrivilegeTypeAttributeKey, (const xmlChar*)"tpk"); + } + } + + xmlXPathFreeContext(xpath_ctx); + + return true; +} + ci::Step::Status StepMergeXml::process() { bf::path wgt_xml_path = context_->xml_path.get(); bf::path tpk_xml_path = context_->GetPkgPath() / "tizen-manifest.xml"; @@ -129,6 +153,9 @@ ci::Step::Status StepMergeXml::process() { if (!LoadXmlDocument(wgt_xml_path, tpk_xml_path)) return Step::Status::MANIFEST_ERROR; + if (!SetTpkPrivilegeType()) + return Step::Status::MANIFEST_ERROR; + for (auto& entry : kNeedMergeNodes) { xmlNodePtr tpk_node = GetXmlNode(tpk_doc_, entry); if (tpk_node == nullptr) diff --git a/src/hybrid/step/pkgmgr/step_merge_xml.h b/src/hybrid/step/pkgmgr/step_merge_xml.h index 7f75295..a373bcf 100644 --- a/src/hybrid/step/pkgmgr/step_merge_xml.h +++ b/src/hybrid/step/pkgmgr/step_merge_xml.h @@ -34,6 +34,7 @@ class StepMergeXml : public common_installer::Step { void MergeXmlNode(xmlNodePtr node1, xmlNodePtr node2); void SetXmlNodeAttribute(xmlNodePtr node, const std::string& attr, const std::string& attr_val); + bool SetTpkPrivilegeType(); xmlDocPtr wgt_doc_; xmlDocPtr tpk_doc_;