1 // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
5 #include "common/step/security/step_recover_security.h"
7 #include <boost/filesystem.hpp>
10 #include "common/security_registration.h"
12 namespace common_installer {
15 bool StepRecoverSecurity::Check(bool is_update) {
16 if (context_->GetPkgPath().empty())
18 if (!boost::filesystem::exists(context_->GetPkgPath()) && is_update)
20 if (context_->pkgid.get().empty())
25 Step::Status StepRecoverSecurity::RecoveryNew() {
28 std::string error_message;
29 if (!context_->manifest_data.get()) {
30 if (!UnregisterSecurityContextForPkgId(context_->pkgid.get(),
31 context_->pkg_type.get(), context_->uid.get(), &error_message, true)) {
32 LOG(ERROR) << "Unsuccessful install";
33 if (!error_message.empty()) {
34 LOG(ERROR) << "error_message: " << error_message;
35 on_error(Status::RECOVERY_ERROR, error_message);
37 return Status::RECOVERY_ERROR;
39 } else if (!UnregisterSecurityContextForManifest(
40 context_->pkgid.get(), context_->pkg_type.get(), context_->uid.get(),
41 context_->manifest_data.get(), &error_message)) {
42 LOG(ERROR) << "Unsuccessful install";
43 if (!error_message.empty()) {
44 LOG(ERROR) << "error_message: " << error_message;
45 on_error(Status::RECOVERY_ERROR, error_message);
47 return Status::RECOVERY_ERROR;
52 Step::Status StepRecoverSecurity::RecoveryUpdate() {
54 LOG(ERROR) << "Invalid parameters";
55 return Status::INVALID_VALUE;
57 std::string error_message;
58 if (!RegisterSecurityContextForManifest(context_, &error_message)) {
59 LOG(ERROR) << "Unsuccessful update";
60 if (!error_message.empty()) {
61 LOG(ERROR) << "error_message: " << error_message;
62 on_error(Status::RECOVERY_ERROR, error_message);
64 return Status::RECOVERY_ERROR;
66 if (!RegisterSecurityContextForPath(
67 context_->pkgid.get(), context_->GetPkgPath(), context_->uid.get(),
68 context_->is_readonly_package.get(), &error_message)) {
69 if (!error_message.empty()) {
70 LOG(ERROR) << "error_message: " << error_message;
71 on_error(Status::RECOVERY_ERROR, error_message);
73 return Status::RECOVERY_ERROR;
78 Step::Status StepRecoverSecurity::RecoveryReadonlyUpdateInstall() {
80 LOG(ERROR) << "Invalid parameters";
81 return Status::INVALID_VALUE;
83 std::string error_message;
84 if (!RegisterSecurityContextForManifest(context_, &error_message)) {
85 LOG(ERROR) << "Unsuccessful update";
86 if (!error_message.empty()) {
87 LOG(ERROR) << "error_message: " << error_message;
88 on_error(Status::RECOVERY_ERROR, error_message);
90 return Status::RECOVERY_ERROR;
95 } // namespace security
96 } // namespace common_installer