From 1d078ba25cf20d088e03326eb5b8aeed0aa1dcdd Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Wed, 8 Sep 2021 16:22:33 +0900 Subject: [PATCH] Add api for getting privileged shared resource path Change-Id: Iacaf48f60e6a4eac948e388773c8be8ace9751a8 Signed-off-by: Ilho Kim --- include/package_manager.h | 18 ++++++++++++++++++ src/package_manager.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/include/package_manager.h b/include/package_manager.h index 21cefce..e6dd0c5 100644 --- a/include/package_manager.h +++ b/include/package_manager.h @@ -1532,6 +1532,24 @@ typedef bool (*package_manager_res_event_path_cb) (const char *path, package_man */ int package_manager_res_event_info_foreach_path(package_manager_res_event_info_h handle, package_manager_res_event_path_cb callback, void *user_data); +/** + * @platform + * @brief Gets the privileged shared resource path for the given package ID. + * @since_tizen 6.5 + * @privlevel platform + * @privilege %http://tizen.org/privilege/packagemanager.admin + * @remarks You must release @a path using free(). + * @param[in] package_id The ID of the package + * @param[out] path The path of privileged shared resource path of the package + * @return @c 0 on success, + * otherwise a negative error value + * @retval #PACKAGE_MANAGER_ERROR_NONE Successful + * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied + * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory + */ +int package_manager_get_priv_shared_res_path(const char *package_id, char **path); + /** * @} diff --git a/src/package_manager.c b/src/package_manager.c index 973920a..b00c7d0 100644 --- a/src/package_manager.c +++ b/src/package_manager.c @@ -29,6 +29,10 @@ #include "package_manager_internal.h" #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER) +#define USER_HOME tzplatform_getenv(TZ_USER_HOME) + +#define PRIV_SHARED_RES "priv_shared_res" + typedef struct _request_event_info { int req_id; package_manager_event_type_e event_type; @@ -2798,3 +2802,31 @@ API int package_manager_res_event_info_foreach_path( return PACKAGE_MANAGER_ERROR_NONE; } + +API int package_manager_get_priv_shared_res_path(const char *package_id, char **path) +{ + int ret; + char *path_dup; + char buf[PATH_MAX]; + + ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN); + if (ret != PACKAGE_MANAGER_ERROR_NONE) + return ret; + + if (package_id == NULL || path == NULL) + return package_manager_error( + PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, + __FUNCTION__, NULL); + + snprintf(buf, sizeof(buf), "%s/%s/%s", USER_HOME, + PRIV_SHARED_RES, package_id); + + path_dup = strdup(buf); + if (path_dup == NULL) + return package_manager_error( + PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, + __FUNCTION__, NULL); + *path = path_dup; + + return PACKAGE_MANAGER_ERROR_NONE; +} -- 2.7.4