#include "hybrid/hybrid_installer.h"
+#include <common/privileges.h>
#include <common/step/backup/step_backup_icons.h>
#include <common/step/backup/step_backup_manifest.h>
#include <common/step/backup/step_copy_backup.h>
HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
: AppInstaller("wgt", pkgmgr) {
+ context_->cross_app_rules.set(true);
context_->backend_data.set(new HybridBackendData());
switch (pkgmgr_->GetRequestType()) {
AddStep<ci::pkgmgr::StepCheckRestriction>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<hybrid::configuration::StepMergeTpkConfig>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::pkgmgr::StepCheckRestriction>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<ci::security::StepRollbackInstallationSecurity>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<ci::security::StepRollbackInstallationSecurity>();
manifest_x* m = runner.GetManifest();
ASSERT_NE(m, nullptr);
std::vector<std::string> priv_vec;
- for (const char* priv : GListRange<char*>(m->privileges)) {
- priv_vec.push_back(priv);
+ for (privilege_x* priv : GListRange<privilege_x*>(m->privileges)) {
+ priv_vec.push_back(priv->value);
}
ASSERT_FALSE(priv_vec.empty());
const char* expected_name = "http://tizen.org/privilege/application.launch";
manifest_x* m = runner.GetManifest();
ASSERT_NE(m, nullptr);
std::vector<std::string> priv_vec;
- for (const char* priv : GListRange<char*>(m->privileges)) {
- priv_vec.push_back(priv);
+ for (privilege_x* priv : GListRange<privilege_x*>(m->privileges)) {
+ priv_vec.push_back(priv->value);
}
ASSERT_EQ(priv_vec.size(), 2);
const char* first_priv = "http://tizen.org/privilege/application.close";
#include <common/app_installer.h>
#include <common/paths.h>
#include <common/installer_context.h>
+#include <common/privileges.h>
#include <common/step/step.h>
#include <common/utils/glist_range.h>
#include <manifest_parser/utils/version_number.h>
privileges = ExtractPrivileges(perm_info);
for (auto& priv : privileges) {
- manifest->privileges =
- g_list_append(manifest->privileges, strdup(priv.c_str()));
+ privilege_x* privilege =
+ reinterpret_cast<privilege_x*>(calloc(1, sizeof(privilege_x)));
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ privilege->value = strdup(priv.c_str());
+ manifest->privileges = g_list_append(manifest->privileges, privilege);
}
return true;
}
}
void StepGenerateXml::GeneratePrivilege(xmlTextWriterPtr writer) {
- if (context_->manifest_data.get()->privileges) {
+ if (context_->manifest_data.get()->privileges) {
xmlTextWriterStartElement(writer, BAD_CAST "privileges");
- for (const char* priv :
- GListRange<char*>(context_->manifest_data.get()->privileges)) {
- xmlTextWriterWriteFormatElement(writer, BAD_CAST "privilege",
- "%s", BAD_CAST priv);
+ for (privilege_x* priv :
+ GListRange<privilege_x*>(context_->manifest_data.get()->privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
}
xmlTextWriterEndElement(writer);
common_installer::Step::Status StepAddDefaultPrivileges::process() {
manifest_x* m = context_->manifest_data.get();
- m->privileges = g_list_append(m->privileges,
- strdup(common::privileges::kPrivForWebApp));
+ privilege_x* privilege =
+ reinterpret_cast<privilege_x*>(calloc(1, sizeof(privilege_x)));
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ privilege->value = strdup(common_installer::privileges::kPrivForWebApp);
+ m->privileges = g_list_append(m->privileges, privilege);
return Status::OK;
}
// found in the LICENSE file.
#include "wgt/step/security/step_check_extension_privileges.h"
+
+#include <boost/scope_exit.hpp>
+
+#include <common/privileges.h>
+#include <common/certificate_validation.h>
+#include <common/utils/glist_range.h>
+#include <manifest_parser/values.h>
+
#include <pkgmgrinfo_basic.h>
+#include <glib.h>
#include <glob.h>
#include <sys/utsname.h>
#include <memory>
#include "wgt/extension_config_parser.h"
-#include "manifest_parser/values.h"
-#include "common/certificate_validation.h"
-#include "common/utils/glist_range.h"
namespace {
const char kPluginsDirectory[] = "/res/wgt/plugin/";
manifest_x* m = context_->manifest_data.get();
std::set<std::string> current_privileges;
- for (const char* priv : GListRange<char*>(m->privileges)) {
- current_privileges.insert(priv);
+ for (privilege_x* priv : GListRange<privilege_x*>(m->privileges)) {
+ if (strcmp(priv->type, common_installer::kWebPrivilegeType) == 0)
+ current_privileges.insert(priv->value);
}
std::set<std::string> xmlFiles;
xmlFiles.insert(glob_result.gl_pathv[i]);
}
}
- std::set<std::string> privileges;
+ GList* privileges = nullptr;
+ BOOST_SCOPE_EXIT_ALL(&) {
+ g_list_free_full(privileges, &common_installer::FreePrivilegeX);
+ };
for (auto it = xmlFiles.begin(); it != xmlFiles.end(); ++it) {
LOG(DEBUG) << "start to parse extension xml : " << *it;
ExtensionConfigParser extensionParser(*it);
std::vector<std::string> list = extensionParser.GetExtensionPrivilegeList();
- for (std::string priv : list) {
+ for (const std::string& priv : list) {
if (current_privileges.find(priv) == current_privileges.end()) {
- privileges.emplace(priv);
+ privilege_x* privilege =
+ reinterpret_cast<privilege_x*>(calloc(1, sizeof(privilege_x)));
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ privilege->value = strdup(priv.c_str());
+ privileges = g_list_append(privileges, privilege);
}
}
}
- if (!privileges.empty()) {
+ if (privileges) {
if (!CheckPrivilegeLevel(privileges)) {
LOG(DEBUG) << "Fail to validation of privilege";
return Status::ERROR;
}
- for (auto it = privileges.begin(); it != privileges.end(); ++it) {
- LOG(DEBUG) << "set list privilege : " << *it;
- m->privileges = g_list_append(m->privileges, strdup((*it).c_str()));
- }
+ m->privileges = g_list_concat(m->privileges, privileges);
+ privileges = nullptr;
}
return Status::OK;
}
}
bool StepCheckExtensionPrivileges::CheckPrivilegeLevel(
- std::set<std::string> priv_set) {
- GList* privileges = nullptr;
- for (auto it = priv_set.begin(); it != priv_set.end(); ++it) {
- privileges = g_list_append(privileges, strdup((*it).c_str()));
- }
- guint size = g_list_length(privileges);
- if (size == 0) return true;
+ GList* privileges) {
+ if (g_list_length(privileges) == 0)
+ return true;
std::string error_message;
if (!common_installer::ValidatePrivilegeLevel(
context_->privilege_level.get(),
- context_->pkg_type.get(),
context_->manifest_data.get()->api_version,
privileges,
&error_message)) {
- g_list_free_full(privileges, free);
if (!error_message.empty()) {
LOG(ERROR) << "error_message: " << error_message;
}
return false;
}
- g_list_free_full(privileges, free);
return true;
}
#include <common/app_installer.h>
#include <common/installer_context.h>
#include <common/step/step.h>
+#include <glib.h>
#include <manifest_parser/utils/logging.h>
#include <manifest_parser/values.h>
Status precheck() override;
private:
std::string GetExtensionPath();
- bool CheckPrivilegeLevel(std::set<std::string> priv_set);
+ bool CheckPrivilegeLevel(GList* privileges);
STEP_NAME(CheckExtensionPrivileges)
};
context_->manifest_plugins_data.get().ime_info.get().setUuid(std::string());
} else if (version23) {
// be sure there's a privilege in manifest
- context_->manifest_data.get()->privileges
- = g_list_append(context_->manifest_data.get()->privileges,
- strdup(common::privileges::kImePrivilegeName));
+ privilege_x* privilege =
+ reinterpret_cast<privilege_x*>(calloc(1, sizeof(privilege_x)));
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ privilege->value = strdup(common_installer::privileges::kImePrivilegeName);
+ context_->manifest_data.get()->privileges =
+ g_list_append(context_->manifest_data.get()->privileges, privilege);
}
return Status::OK;
common_installer::Step::Status
StepCheckWgtImePrivilege::CheckImePrivilege() const {
- for (const auto privilege :
- GListRange<char *>(context_->manifest_data.get()->privileges)) {
- if (!strcmp(privilege, common::privileges::kImePrivilegeName))
+ for (privilege_x* privilege :
+ GListRange<privilege_x*>(context_->manifest_data.get()->privileges)) {
+ if (!strcmp(privilege->value,
+ common_installer::privileges::kImePrivilegeName))
return Status::OK;
}
#include <common/pkgmgr_interface.h>
+#include <common/privileges.h>
#include <common/step/backup/step_backup_icons.h>
#include <common/step/backup/step_backup_manifest.h>
#include <common/step/backup/step_copy_backup.h>
AddStep<ci::pkgmgr::StepCheckRestriction>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::filesystem::StepDisableExternalMount>();
AddStep<wgt::configuration::StepCheckStartFiles>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::pkgmgr::StepCheckRestriction>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<ci::security::StepCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<wgt::security::StepDirectManifestCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<wgt::security::StepCheckWgtImePrivilege>();
AddStep<wgt::security::StepCheckSettingsLevel>();
AddStep<ci::configuration::StepParsePreload>();
AddStep<ci::configuration::StepCheckTizenVersion>();
AddStep<wgt::security::StepDirectManifestCheckSignature>();
- AddStep<ci::security::StepPrivilegeCompatibility>();
+ AddStep<ci::security::StepPrivilegeCompatibility>(
+ ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
AddStep<wgt::security::StepCheckWgtNotificationCategory>();
AddStep<wgt::security::StepCheckWgtImePrivilege>();
AddStep<wgt::security::StepCheckSettingsLevel>();