From: Jihoi Kim Date: Thu, 13 Feb 2025 10:58:33 +0000 (+0900) Subject: Support UID Sandbox feature X-Git-Tag: accepted/tizen/unified/20250228.005537~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F319609%2F10;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git Support UID Sandbox feature - 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 --- diff --git a/src/common/db_change_observer.cc b/src/common/db_change_observer.cc index 72ddb9d9..e7e2a008 100644 --- a/src/common/db_change_observer.cc +++ b/src/common/db_change_observer.cc @@ -30,12 +30,8 @@ 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; } diff --git a/src/common/parcel/abstract_parcelable.cc b/src/common/parcel/abstract_parcelable.cc index 738b5a64..2c55865f 100644 --- a/src/common/parcel/abstract_parcelable.cc +++ b/src/common/parcel/abstract_parcelable.cc @@ -16,11 +16,36 @@ #include "abstract_parcelable.hh" +#include + #include +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() { diff --git a/src/common/parcel/abstract_parcelable.hh b/src/common/parcel/abstract_parcelable.hh index 89594e66..1919d241 100644 --- a/src/common/parcel/abstract_parcelable.hh +++ b/src/common/parcel/abstract_parcelable.hh @@ -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(); diff --git a/src/server/database/abstract_db_handler.cc b/src/server/database/abstract_db_handler.cc index b174ef03..0e712517 100644 --- a/src/server/database/abstract_db_handler.cc +++ b/src/server/database/abstract_db_handler.cc @@ -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 diff --git a/src/server/database/appinfo_db_handler.cc b/src/server/database/appinfo_db_handler.cc index d6b373e2..c6dd4123 100644 --- a/src/server/database/appinfo_db_handler.cc +++ b/src/server/database/appinfo_db_handler.cc @@ -28,15 +28,13 @@ 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 { diff --git a/src/server/database/db_handle_provider.cc b/src/server/database/db_handle_provider.cc index 53c8e398..05ea690b 100644 --- a/src/server/database/db_handle_provider.cc +++ b/src/server/database/db_handle_provider.cc @@ -42,20 +42,15 @@ 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) { diff --git a/src/server/database/pkg_get_db_handler.cc b/src/server/database/pkg_get_db_handler.cc index bcff4d12..b7faa449 100644 --- a/src/server/database/pkg_get_db_handler.cc +++ b/src/server/database/pkg_get_db_handler.cc @@ -28,12 +28,8 @@ 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; } diff --git a/src/server/database/remove_all_cache_db_handler.cc b/src/server/database/remove_all_cache_db_handler.cc index 17559178..c1c10bf9 100644 --- a/src/server/database/remove_all_cache_db_handler.cc +++ b/src/server/database/remove_all_cache_db_handler.cc @@ -22,12 +22,8 @@ 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; } diff --git a/src/server/worker_thread.cc b/src/server/worker_thread.cc index f40ec3d1..60f09071 100644 --- a/src/server/worker_thread.cc +++ b/src/server/worker_thread.cc @@ -43,20 +43,15 @@ 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[] =