Support UID Sandbox feature 09/319609/10
authorJihoi Kim <jihoi.kim@samsung.com>
Thu, 13 Feb 2025 10:58:33 +0000 (19:58 +0900)
committerJihoi Kim <jihoi.kim@samsung.com>
Tue, 25 Feb 2025 06:33:35 +0000 (15:33 +0900)
- When creating parcelable to invoke request db handler, convert uid
- Works both direct request and request via pkgmgr-server
- Using static const qualifier to handling GlobalUid

Change-Id: Ifed29964899d9fc05f8958f765b117ab2d6175ff
Signed-off-by: Jihoi Kim <jihoi.kim@samsung.com>
src/common/db_change_observer.cc
src/common/parcel/abstract_parcelable.cc
src/common/parcel/abstract_parcelable.hh
src/server/database/abstract_db_handler.cc
src/server/database/appinfo_db_handler.cc
src/server/database/db_handle_provider.cc
src/server/database/pkg_get_db_handler.cc
src/server/database/remove_all_cache_db_handler.cc
src/server/worker_thread.cc

index 72ddb9d9a8b2cdefc9a85340a5e99fd4fe5e3fc4..e7e2a008c378b2efdb894a32f86ea29675b7cc1c 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
-
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
index 738b5a648b0af69f5ba82dbffd2f68c46049c1b7..2c55865f49dfbb6e7d0421a64e317239a8d2aab5 100644 (file)
 
 #include "abstract_parcelable.hh"
 
+#include <tzplatform_config.h>
+
 #include <cstring>
 
+namespace {
+
+uid_t ConvertUID(uid_t uid) {
+  constexpr uid_t REGULAR_USER = 5000;
+  constexpr uid_t REGULAR_APP_UID_MIN = 10000;
+  const static uid_t defaultuser_uid = tzplatform_getuid(TZ_SYS_DEFAULT_USER);
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
+
+  if (uid < REGULAR_USER) return globaluser_uid;
+
+  if (uid >= REGULAR_APP_UID_MIN) return defaultuser_uid;
+
+  return uid;
+}
+
+}
+
 namespace pkgmgr_common {
 namespace parcel {
 
+AbstractParcelable::AbstractParcelable()
+    : uid_(0), type_(ParcelableType::Unknown), ret_(0) {}
+
+AbstractParcelable::AbstractParcelable(uid_t uid, ParcelableType type,
+    int ret) : uid_(ConvertUID(uid)), type_(type), ret_(ret) {}
+
 AbstractParcelable::~AbstractParcelable() {}
 
 bool AbstractParcelable::ReadInt(tizen_base::Parcel* parcel, int* val) {
@@ -101,7 +126,7 @@ uid_t AbstractParcelable::GetUid() {
 }
 
 void AbstractParcelable::SetUid(uid_t uid) {
-  uid_ = uid;
+  uid_ = ConvertUID(uid);
 }
 
 ParcelableType AbstractParcelable::GetType() {
index 89594e6688db727e090fd16db78071ebf0f64e81..1919d24171717241aefcf5e27ebafa8785add589 100644 (file)
@@ -31,9 +31,8 @@ enum ParcelableType {
 
 class EXPORT_API AbstractParcelable : public tizen_base::Parcelable {
  public:
-  AbstractParcelable() : uid_(0), type_(ParcelableType::Unknown), ret_(0) {}
-  AbstractParcelable(uid_t uid, ParcelableType type, int ret = 0)
-      : uid_(uid), type_(type), ret_(ret) {}
+  AbstractParcelable();
+  AbstractParcelable(uid_t uid, ParcelableType type, int ret = 0);
 
   virtual ~AbstractParcelable();
   uid_t GetUid();
index b174ef03e19e7c8d332d6dbf21da5b1077d868bd..0e712517b23656b59a312eaead6180c3cfa010fd 100644 (file)
@@ -119,16 +119,11 @@ tizen_base::Database OpenCreateDb(const std::string& path) {
 }
 
 uid_t ConvertUID(uid_t uid) {
-  static uid_t globaluser_uid = -1;
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
 
-  if (uid < REGULAR_USER) {
-    if (globaluser_uid == (uid_t)-1)
-      globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
+  if (uid < REGULAR_USER) return globaluser_uid;
 
-    return globaluser_uid;
-  } else {
-    return uid;
-  }
+  return uid;
 }
 
 }  // namespace
index d6b373e2343f3916bf475fcce2809156daa8ac36..c6dd4123d02850789a209db6c864d65ab4fc6ac5 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
 
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
+
 }  // namespace
 
 namespace pkgmgr_server {
index 53c8e39827a20ca0597eb9141f9e300dad54cbab..05ea690b799b137e833adfaf5af7d01f3c588cf5 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
-
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
 uid_t ConvertUID(uid_t uid) {
-  if (uid < REGULAR_USER)
-    return GetGlobalUID();
-  else
-    return uid;
+  if (uid < REGULAR_USER) return GetGlobalUID();
+
+  return uid;
 }
 
 bool GetModifiedTime(const char* dbpath, timespec* t) {
index bcff4d128ac432e9aaf40d668e30ff98bb7001b5..b7faa449c62a493ce05132caa2bdf9143b4a5e84 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
-
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
index 17559178bc4e779f8b48eae4a3f75dd9bb5db7f8..c1c10bf948c0a4d749aa01285c967717167309fe 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
-
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
index f40ec3d1509b3950f761bddfaf4af6b7798540d4..60f09071a7eb4f714a898b875756717b93b6e60f 100644 (file)
 
 namespace {
 
-uid_t globaluser_uid = -1;
-
 uid_t GetGlobalUID() {
-  if (globaluser_uid == (uid_t)-1)
-    globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-
+  const static uid_t globaluser_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
   return globaluser_uid;
 }
 
 uid_t ConvertUID(uid_t uid) {
-  if (uid < REGULAR_USER)
-    return GetGlobalUID();
-  else
-    return uid;
+  if (uid < REGULAR_USER) return GetGlobalUID();
+
+  return uid;
 }
 
 const char PRIVILEGE_PACKAGE_MANAGER_ADMIN[] =