Skip security path register when ReadonlyUpdateUninstall
[platform/core/appfw/app-installers.git] / src / common / step / security / step_update_security.cc
1 // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by a apache 2.0 license that can be
3 // found in the LICENSE file.
4
5 #include "common/step/security/step_update_security.h"
6
7 #include <string>
8
9 #include "common/security_registration.h"
10
11 namespace common_installer {
12 namespace security {
13
14 Step::Status StepUpdateSecurity::process() {
15   std::string error_message;
16   if (!RegisterSecurityContextForManifest(
17       context_->pkgid.get(), context_->pkg_path.get(), context_->uid.get(),
18       &context_->certificate_info.get(), context_->manifest_data.get(),
19       context_->cross_app_rules.get(), &error_message)) {
20     if (!error_message.empty()) {
21       LOG(ERROR) << "error_message: " << error_message;
22       on_error(Status::SECURITY_ERROR, error_message);
23     }
24     return Status::SECURITY_ERROR;
25   }
26   if (context_->request_type.get() != RequestType::ReadonlyUpdateUninstall) {
27     if (!RegisterSecurityContextForPath(
28         context_->pkgid.get(), context_->pkg_path.get(), context_->uid.get(),
29         context_->is_readonly_package.get(), &error_message)) {
30       if (!error_message.empty()) {
31         LOG(ERROR) << "error_message: " << error_message;
32         on_error(Status::SECURITY_ERROR, error_message);
33       }
34       return Status::SECURITY_ERROR;
35     }
36   }
37   LOG(DEBUG) << "Security context updated";
38   return Status::OK;
39 }
40
41 Step::Status StepUpdateSecurity::undo() {
42   std::string error_message;
43   if (!RegisterSecurityContextForManifest(
44       context_->pkgid.get(), context_->pkg_path.get(), context_->uid.get(),
45       &context_->certificate_info.get(), context_->old_manifest_data.get(),
46       context_->cross_app_rules.get(), &error_message)) {
47     if (!error_message.empty()) {
48       LOG(ERROR) << "error_message: " << error_message;
49     }
50     return Status::SECURITY_ERROR;
51   }
52   if (!RegisterSecurityContextForPath(
53       context_->pkgid.get(), context_->pkg_path.get(), context_->uid.get(),
54       context_->is_readonly_package.get(), &error_message)) {
55     if (!error_message.empty()) {
56       LOG(ERROR) << "error_message: " << error_message;
57       on_error(Status::SECURITY_ERROR, error_message);
58     }
59     return Status::SECURITY_ERROR;
60   }
61   LOG(DEBUG) << "Security context reverted";
62   return Status::OK;
63 }
64
65 }  // namespace security
66 }  // namespace common_installer