Fix app_update not setting sharedRO to false in db 40/224140/3
authorKonrad Lipinski <k.lipinski2@samsung.com>
Thu, 6 Feb 2020 13:15:17 +0000 (14:15 +0100)
committerKonrad Lipinski <k.lipinski2@samsung.com>
Thu, 6 Feb 2020 15:36:39 +0000 (16:36 +0100)
Change-Id: I502a00b4946ba3ef3c82c81f665e10c1b50d2e2b

src/common/include/privilege_db.h
src/common/privilege_db.cpp
src/common/service_impl.cpp

index 220dfa7bbc22da1f0e3d26b7c36bd18cb35bc86c..1f21fe04b22b50dd138dc7e93596768a7af89888 100644 (file)
@@ -493,10 +493,13 @@ public:
     /**
      * Set shared_ro field to 1 in package given by name
      *
+     * @param[in] pkgName package identifier
+     * @param[in] isSharedRO whether the package is sharedRO (defaults to true)
+     *
      * @exception PrivilegeDb::Exception::InternalError on internal error
      * @exception PrivilegeDb::Exception::ConstraintError on constraint violation
      */
-    void SetSharedROPackage(const std::string& pkgName);
+    void SetSharedROPackage(const std::string& pkgName, bool isSharedRO = true);
 
     /**
      * Check whether package has is_hybrid field set to 1 in db
index aa12dd4fd07c53bd20dddd4bd2fc8ad7ab8c3a55..07d39bca27b751d37fdaa90c0e457da7c958d1c9 100644 (file)
@@ -73,7 +73,7 @@ constexpr const char *g_queries[StmtTypeCount] = {
     [underlying(StmtType::EGetPkgAuthorId)] = "SELECT author_id FROM pkg WHERE name = ? AND author_id IS NOT NULL",
     [underlying(StmtType::EAuthorIdExists)] = "SELECT count(*) FROM author where author_id=?",
     [underlying(StmtType::EGetAuthorIdByName)] = "SELECT author_id FROM author WHERE name=?",
-    [underlying(StmtType::ESetPackageSharedRO)] = "UPDATE pkg SET shared_ro=1 WHERE name=?",
+    [underlying(StmtType::ESetPackageSharedRO)] = "UPDATE pkg SET shared_ro=? WHERE name=?",
     [underlying(StmtType::EIsPackageHybrid)] = "SELECT is_hybrid FROM pkg WHERE name=?",
     [underlying(StmtType::EAddAppDefinedPrivilege)] = "INSERT INTO app_defined_privilege_view (app_name, uid, privilege, type, license) VALUES (?, ?, ?, ?, ?)",
     [underlying(StmtType::EAddClientPrivilege)] = "INSERT INTO client_license_view (app_name, uid, privilege, license) VALUES (?, ?, ?, ?)",
@@ -609,14 +609,15 @@ void PrivilegeDb::GetGroupsRelatedPrivileges(std::vector<std::pair<std::string,
     });
 }
 
-void PrivilegeDb::SetSharedROPackage(const std::string &pkgName)
+void PrivilegeDb::SetSharedROPackage(const std::string &pkgName, bool isSharedRO)
 {
    try_catch<void>([&] {
         auto command = getStatement(StmtType::ESetPackageSharedRO);
-        command->BindString(1, pkgName);
+        command->BindInteger(1, isSharedRO);
+        command->BindString(2, pkgName);
 
         if (command->Step())
-            LogDebug("shared_ro has been set to 1 for pkg: " << pkgName);
+            LogDebug("shared_ro has been set to " << isSharedRO << " for pkg: " << pkgName);
     });
 }
 
index 3b3c685a34d1ceca3e4f2c0dbad1d84624c3d738..98b86b82b9c9f4bbcd2a3b56a6ad651a0b0d3556 100644 (file)
@@ -699,8 +699,7 @@ int ServiceImpl::appUpdate(const Credentials &creds, app_inst_req &req)
 
         // [db] update shared ro
         bool isAppSharedRO = isSharedRO(req.pkgPaths);
-        if (isAppSharedRO)
-            m_privilegeDb.SetSharedROPackage(req.pkgName);
+        m_privilegeDb.SetSharedROPackage(req.pkgName, isAppSharedRO);
 
         // [db] commit
         trans.commit();