Set pkg type while unregistering security context 67/242067/1
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 24 Aug 2020 02:42:32 +0000 (11:42 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 24 Aug 2020 02:42:32 +0000 (11:42 +0900)
Change-Id: I1916775a86149481f713cb277a93cda5e6f22098
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/common/security_registration.cc
src/common/security_registration.h
src/common/step/security/step_recover_security.cc
src/common/step/security/step_revoke_security.cc
src/common/step/security/step_rollback_installation_security.cc

index 4d89423..4c51911 100644 (file)
@@ -89,7 +89,7 @@ class SecurityContextRequest {
     return req_ != NULL;
   }
   bool PrepareBasic(const std::string& pkg_id, uid_t uid,
-      const std::string& type = "" ) {
+      const std::string& type) {
     if (pkg_id.empty() || type.empty()) {
       LOG(ERROR) << "Invalid parameter";
       return false;
@@ -494,14 +494,15 @@ bool RegisterSecurityContextForManifest(const ci::InstallerContext* context,
   return result;
 }
 
-static bool UnregisterSecurityContext(const std::string& pkg_id, uid_t uid,
+static bool UnregisterSecurityContext(const std::string& pkg_id,
+    const std::string& pkg_type,  uid_t uid,
     const std::vector<std::string>& appids, std::string* error_message) {
   SecurityContextRequest req;
   if (!req.IsValid()) {
     *error_message = req.ErrorMessage();
     return false;
   }
-  if (!req.PrepareBasic(pkg_id, uid)) {
+  if (!req.PrepareBasic(pkg_id, uid, pkg_type)) {
     *error_message = req.ErrorMessage();
     return false;
   }
@@ -521,7 +522,8 @@ static bool UnregisterSecurityContext(const std::string& pkg_id, uid_t uid,
 }
 
 bool UnregisterSecurityContextForManifest(const std::string& pkg_id,
-    uid_t uid, manifest_x* manifest, std::string* error_message) {
+    const std::string& pkg_type, uid_t uid, manifest_x* manifest,
+    std::string* error_message) {
   std::vector<std::string> appids;
   for (application_x* app : GListRange<application_x*>(manifest->application)) {
     if (!app->appid) {
@@ -529,16 +531,18 @@ bool UnregisterSecurityContextForManifest(const std::string& pkg_id,
     }
     appids.emplace_back(app->appid);
   }
-  return UnregisterSecurityContext(pkg_id, uid, appids, error_message);
+  return UnregisterSecurityContext(pkg_id, pkg_type, uid,
+      appids, error_message);
 }
 
 bool UnregisterSecurityContextForPkgId(const std::string &pkg_id,
-    uid_t uid, std::string* error_message, bool ignore_data_absence) {
+    const std::string& pkg_type, uid_t uid, std::string* error_message, bool ignore_data_absence) {
   std::vector<std::string> appids;
   ci::PkgQueryInterface pkg_query(pkg_id, uid);
   if (!pkg_query.AppidsForPkgId(&appids))
     return ignore_data_absence;
-  return UnregisterSecurityContext(pkg_id, uid, appids, error_message);
+  return UnregisterSecurityContext(pkg_id, pkg_type, uid,
+      appids, error_message);
 }
 
 bool RegisterSecurityContextForPath(const std::string &pkg_id,
index 751dca0..4b09698 100644 (file)
@@ -38,14 +38,16 @@ bool RegisterSecurityContextForManifest(
  * package from security context
  *
  * \param pkg_id pkgid of given package
+ * \param pkg_type type of given package*
  * \param uid uid
  * \param manifest pointer to manifest structure
  * \param error_message extra/detailed error message
  *
  * \return true if success
  */
-bool UnregisterSecurityContextForManifest(const std::string& pkg_id, uid_t uid,
-    manifest_x* manifest, std::string* error_message);
+bool UnregisterSecurityContextForManifest(const std::string& pkg_id,
+    const std::string& pkg_type, uid_t uid, manifest_x* manifest,
+    std::string* error_message);
 
 /**
  * Adapter interface for external Security module.
@@ -54,6 +56,7 @@ bool UnregisterSecurityContextForManifest(const std::string& pkg_id, uid_t uid,
  * package from security context
  *
  * \param pkg_id pkgid of given package
+ * \param pkg_type type of given package
  * \param uid uid
  * \param error_message extra/detailed error message
  * \param ignore_data_absence optional, default set to false, indicate if
@@ -62,8 +65,9 @@ bool UnregisterSecurityContextForManifest(const std::string& pkg_id, uid_t uid,
  *
  * \return true if success
  */
-bool UnregisterSecurityContextForPkgId(const std::string& pkg_id, uid_t uid,
-    std::string* error_message, bool ignore_data_absence = false);
+bool UnregisterSecurityContextForPkgId(const std::string& pkg_id,
+    const std::string& pkg_type, uid_t uid, std::string* error_message,
+    bool ignore_data_absence = false);
 
 /**
  * Adapter interface for external Security module.
index 21a5b1a..ffc031e 100644 (file)
@@ -28,7 +28,7 @@ Step::Status StepRecoverSecurity::RecoveryNew() {
   std::string error_message;
   if (!context_->manifest_data.get()) {
     if (!UnregisterSecurityContextForPkgId(context_->pkgid.get(),
-        context_->uid.get(), &error_message, true)) {
+        context_->pkg_type.get(), context_->uid.get(), &error_message, true)) {
       LOG(ERROR) << "Unsuccessful install";
       if (!error_message.empty()) {
         LOG(ERROR) << "error_message: " << error_message;
@@ -37,7 +37,7 @@ Step::Status StepRecoverSecurity::RecoveryNew() {
       return Status::RECOVERY_ERROR;
     }
   } else if (!UnregisterSecurityContextForManifest(
-      context_->pkgid.get(), context_->uid.get(),
+      context_->pkgid.get(), context_->pkg_type.get(), context_->uid.get(),
       context_->manifest_data.get(), &error_message)) {
     LOG(ERROR) << "Unsuccessful install";
     if (!error_message.empty()) {
index 87f0492..ec5bf38 100644 (file)
@@ -28,7 +28,7 @@ Step::Status StepRevokeSecurity::precheck() {
 Step::Status StepRevokeSecurity::clean() {
   std::string error_message;
   if (!UnregisterSecurityContextForManifest(
-      context_->pkgid.get(),  context_->uid.get(),
+      context_->pkgid.get(), context_->pkg_type.get(), context_->uid.get(),
       context_->manifest_data.get(),
       &error_message)) {
     LOG(ERROR) << "Failure on unregistering security context for app "
index 0a50d51..00ceae5 100644 (file)
@@ -28,7 +28,7 @@ Step::Status StepRollbackInstallationSecurity::precheck() {
 Step::Status StepRollbackInstallationSecurity::undo() {
   std::string error_message;
   if (!UnregisterSecurityContextForManifest(
-      context_->pkgid.get(),  context_->uid.get(),
+      context_->pkgid.get(), context_->pkg_type.get(), context_->uid.get(),
       context_->manifest_data.get(), &error_message)) {
     if (!error_message.empty()) {
       LOG(ERROR) << "error_message: " << error_message;