Fix the use of cache if not the requested uid default 03/279703/3
authorIlho Kim <ilho159.kim@samsung.com>
Tue, 16 Aug 2022 11:04:31 +0000 (20:04 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Wed, 17 Aug 2022 05:24:00 +0000 (14:24 +0900)
Because the cache of pkginfo, appinfo is created for the default user
the cache can't be used unless it is a default user

Change-Id: I724ebc89b18883d65b53c168024f110c83a848ab
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/server/database/abstract_db_handler.cc
src/server/database/abstract_db_handler.hh
src/server/database/appinfo_db_handler.cc
src/server/database/pkg_get_db_handler.cc
src/server/runner.cc
src/server/runner.hh

index 8aa4739..2215c30 100644 (file)
@@ -253,5 +253,11 @@ pkgmgr_common::DBOperationType AbstractDBHandler::GetOpType() {
   return op_type_;
 }
 
+uid_t AbstractDBHandler::GetDefaultUser() {
+  static uid_t default_user = tzplatform_getuid(TZ_SYS_DEFAULT_USER);
+
+  return default_user;
+}
+
 }  // namespace database
 }  // namespace pkgmgr_server
index ced7b5e..894e1de 100644 (file)
@@ -55,6 +55,7 @@ class EXPORT_API AbstractDBHandler {
   virtual std::vector<std::pair<sqlite3*, uid_t>> GetConnection();
   void ClearDBHandle();
   const std::string& GetLocale();
+  static uid_t GetDefaultUser();
 
   static std::shared_timed_mutex lock_;
 
index 31039ef..c6a891a 100644 (file)
@@ -115,7 +115,8 @@ int AppInfoDBHandler::Execute() {
   if (is_writer)
     return GetHandleFromDB(conn_list);
 
-  if (CacheFlag::GetStatus() == CacheFlag::Status::PREPARED) {
+  if (uid_ <= GetDefaultUser() &&
+      CacheFlag::GetStatus() == CacheFlag::Status::PREPARED) {
     auto cache_lock = CacheFlag::GetReaderLock();
     if (cache_lock.try_lock() &&
         CacheFlag::GetStatus() == CacheFlag::Status::PREPARED)
index 0e67de7..9438dec 100644 (file)
@@ -128,7 +128,8 @@ int PkgGetDBHandler::Execute() {
   if (is_writer)
     return GetHandleFromDB(conn_list);
 
-  if (CacheFlag::GetStatus() == CacheFlag::Status::PREPARED) {
+  if (uid_ <= GetDefaultUser() &&
+      CacheFlag::GetStatus() == CacheFlag::Status::PREPARED) {
     auto cache_lock = CacheFlag::GetReaderLock();
     if (cache_lock.try_lock() &&
         CacheFlag::GetStatus() == CacheFlag::Status::PREPARED)
index f1092d4..d8f8b76 100644 (file)
@@ -57,14 +57,13 @@ Runner::Runner(unsigned int thread_num) {
   SetCPUInheritance();
   auto condition = static_cast<GIOCondition>(G_IO_IN);
   sid_ = g_unix_fd_add(server_->GetFd(), condition, OnReceiveRequest, this);
+  default_uid_ = tzplatform_getuid(TZ_SYS_DEFAULT_USER);
   pkgmgr_common::SystemLocale::GetInst().RegisterEvent(this);
   thread_pool_->SetLocale(pkgmgr_common::SystemLocale::GetInst().Get());
 
-  if (CacheFlag::SetPreparing()) {
-    QueueRequest(
-        std::make_shared<CreateCacheRequest>(
-            tzplatform_getuid(TZ_SYS_DEFAULT_USER)));
-  }
+  if (CacheFlag::SetPreparing())
+    QueueRequest(std::make_shared<CreateCacheRequest>(default_uid_));
+
   LOGI("Start Runner");
 }
 
@@ -86,7 +85,7 @@ int Runner::OnReceiveRequest(int fd, GIOCondition cond, void* user_data) {
 
   if (CacheFlag::SetPreparing()) {
     runner->QueueRequest(
-        std::make_shared<CreateCacheRequest>(req->GetSenderUID()));
+        std::make_shared<CreateCacheRequest>(runner->default_uid_));
   }
   runner->QueueRequest(std::move(req));
 
index 76f67cc..8702a6a 100644 (file)
@@ -51,6 +51,7 @@ class EXPORT_API Runner
  private:
   int sid_;
   unsigned int thread_num_;
+  uid_t default_uid_;
   std::unique_ptr<pkgmgr_common::socket::ServerSocket> server_;
   std::unique_ptr<WorkerThread> thread_pool_;
 };