From: Sangyoon Jang Date: Tue, 15 Oct 2019 07:02:04 +0000 (+0900) Subject: Fix installing privileges of hybrid package X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b496639ecf6b0e52ff3db3da119c8c4eecb2f020;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 01266aa..4748781 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -130,9 +130,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -154,6 +151,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -182,9 +182,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -213,6 +210,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -278,9 +278,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -306,6 +303,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep( @@ -356,9 +356,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -380,6 +377,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -408,9 +408,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -438,6 +435,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -465,9 +465,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -479,6 +476,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep( ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE); @@ -504,9 +504,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep( @@ -521,6 +518,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep( ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE); @@ -541,9 +541,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( wgt::configuration::StepParse::ConfigLocation::INSTALLED, true); - AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -571,9 +571,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( wgt::configuration::StepParse::ConfigLocation::INSTALLED, true); - AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -630,9 +630,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); @@ -658,6 +655,9 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( hybrid::configuration::StepMergeTpkConfig::MergeType::CONCAT); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH); AddStep(); AddStep(); AddStep(); diff --git a/src/hybrid/step/pkgmgr/step_generate_xml.cc b/src/hybrid/step/pkgmgr/step_generate_xml.cc index 89772c2..2972909 100644 --- a/src/hybrid/step/pkgmgr/step_generate_xml.cc +++ b/src/hybrid/step/pkgmgr/step_generate_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 StepGenerateXml::SetXmlNodeAttribute(xmlNodePtr node, reinterpret_cast(attr_val.c_str())); } +bool StepGenerateXml::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 StepGenerateXml::process() { bf::path wgt_xml_path = context_->xml_path.get(); bf::path tpk_xml_path = context_->pkg_path.get() / "tizen-manifest.xml"; @@ -129,6 +153,9 @@ ci::Step::Status StepGenerateXml::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_generate_xml.h b/src/hybrid/step/pkgmgr/step_generate_xml.h index 8fce64d..3d22b78 100644 --- a/src/hybrid/step/pkgmgr/step_generate_xml.h +++ b/src/hybrid/step/pkgmgr/step_generate_xml.h @@ -34,6 +34,7 @@ class StepGenerateXml : 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_;