This step creates directories for res-control feature.
Change-Id: I168c9485246fda09251c894859f2ee3e48a9f629
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
#include "common/step/filesystem/step_copy_tep.h"
#include "common/step/filesystem/step_create_globalapp_symlinks.h"
#include "common/step/filesystem/step_create_icons.h"
+#include "common/step/filesystem/step_create_res_control_directories.h"
#include "common/step/filesystem/step_create_storage_directories.h"
#include "common/step/filesystem/step_delta_patch.h"
#include "common/step/filesystem/step_disable_external_mount.h"
AddStep<ci::filesystem::StepCopy>();
AddStep<ci::filesystem::StepCopyTep>();
AddStep<ci::filesystem::StepCreateIcons>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::INSTALL);
AddStep<ci::security::StepPrivacyPrivilege>(
AddStep<ci::filesystem::StepUpdateTep>();
AddStep<ci::filesystem::StepCopyStorageDirectories>();
AddStep<ci::filesystem::StepCreateIcons>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::security::StepPrivacyPrivilege>(
AddStep<ci::rds::StepRDSModify>();
AddStep<ci::filesystem::StepUpdateTep>();
AddStep<ci::filesystem::StepCreateIcons>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::security::StepPrivacyPrivilege>(
AddStep<ci::filesystem::StepUpdateTep>();
AddStep<ci::filesystem::StepCopyStorageDirectories>();
AddStep<ci::filesystem::StepCreateIcons>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::security::StepPrivacyPrivilege>(
AddStep<ci::security::StepSignature>(true);
AddStep<ci::security::StepRollbackInstallationSecurity>();
AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::pkgmgr::StepRegisterApplication>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::security::StepCheckOldCertificate>();
AddStep<ci::pkgmgr::StepKillApps>();
AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::pkgmgr::StepUpdateApplication>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::filesystem::StepCopy>();
AddStep<ci::filesystem::StepCopyTep>();
AddStep<ci::filesystem::StepCreateIcons>();
+ AddStep<ci::filesystem::StepCreateResControlDirectories>();
AddStep<ci::security::StepRegisterTrustAnchor>(
ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
AddStep<ci::security::StepPrivacyPrivilege>(
--- /dev/null
+// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include "common/step/filesystem/step_create_res_control_directories.h"
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+#include "common/utils/file_util.h"
+
+namespace bf = boost::filesystem;
+namespace ci = common_installer;
+
+namespace {
+
+constexpr char kAllowedDir[] = "res/mount/allowed";
+constexpr char kGlobalDir[] = "res/mount/global";
+constexpr char kWorkDir[] = "res/mount/work";
+
+bool CreateResControlDirs(const bf::path& root) {
+ if (!ci::CreateDir(root / kAllowedDir))
+ return false;
+ if (!ci::CreateDir(root / kGlobalDir))
+ return false;
+ if (!ci::CreateDir(root / kWorkDir))
+ return false;
+ return true;
+}
+
+bool RemoveResControlDirs(const bf::path& root) {
+ if (!ci::RemoveAll(root / kAllowedDir))
+ return false;
+ if (!ci::RemoveAll(root / kGlobalDir))
+ return false;
+ if (!ci::RemoveAll(root / kWorkDir))
+ return false;
+ return true;
+}
+
+} // namespace
+
+namespace common_installer {
+namespace filesystem {
+
+Step::Status StepCreateResControlDirectories::precheck() {
+ if (context_->GetPkgPath().empty()) {
+ LOG(ERROR) << "Failed to get pkg root directory";
+ return Status::APP_DIR_ERROR;
+ }
+ return Status::OK;
+}
+
+Step::Status StepCreateResControlDirectories::process() {
+ bf::path root = context_->GetPkgPath();
+ // TODO(jeremy.jang): check the package has res-control tag (+ update case)
+ if (!CreateResControlDirs(root)) {
+ LOG(ERROR) << "Failed to create res-control directories";
+ return Status::APP_DIR_ERROR;
+ }
+ return Status::OK;
+}
+
+Step::Status StepCreateResControlDirectories::undo() {
+ bf::path root = context_->GetPkgPath();
+ if (!RemoveResControlDirs(root)) {
+ LOG(ERROR) << "Failed to remove res-control directories";
+ return Status::APP_DIR_ERROR;
+ }
+ return Status::OK;
+}
+
+} // namespace filesystem
+} // namespace common_installer
--- /dev/null
+// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef COMMON_STEP_FILESYSTEM_STEP_CREATE_RES_CONTROL_DIRECTORIES_H_
+#define COMMON_STEP_FILESYSTEM_STEP_CREATE_RES_CONTROL_DIRECTORIES_H_
+
+#include <manifest_parser/utils/logging.h>
+
+#include "common/step/step.h"
+
+namespace common_installer {
+namespace filesystem {
+
+/**
+ * \brief Installation.
+ * Responsible for creating res-control directories
+ *
+ * * process method implements creation of res-control directories for
+ * package.
+ *
+ * res/mount/allowed: mount point for allowed resources
+ * res/mount/global: mount point for global resources
+ * res/mount/work: for working directory
+ */
+class StepCreateResControlDirectories : public common_installer::Step {
+ public:
+ using Step::Step;
+
+ Status process() override;
+ Status clean() override { return Status::OK; }
+ Status undo() override;
+ Status precheck() override;
+
+ private:
+ STEP_NAME(CreateResControlDirectories)
+};
+
+} // namespace filesystem
+} // namespace common_installer
+
+#endif // COMMON_STEP_FILESYSTEM_STEP_CREATE_RES_CONTROL_DIRECTORIES_H_