Add api for getting privileged shared resource path 91/263691/3
authorIlho Kim <ilho159.kim@samsung.com>
Wed, 8 Sep 2021 07:22:33 +0000 (16:22 +0900)
committerilho kim <ilho159.kim@samsung.com>
Thu, 9 Sep 2021 09:57:45 +0000 (09:57 +0000)
Change-Id: Iacaf48f60e6a4eac948e388773c8be8ace9751a8
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
include/package_manager.h
src/package_manager.c

index 21cefce..e6dd0c5 100644 (file)
@@ -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);
+
 
 /**
 * @}
index 973920a..b00c7d0 100644 (file)
 #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;
+}