SET(INC_DIR include)
INCLUDE_DIRECTORIES(${INC_DIR})
-SET(requires "capi-base-common dlog vconf aul ail pkgmgr pkgmgr-info")
+IF(_APPFW_FEATURE_EXPANSION_PKG_INSTALL)
+ ADD_DEFINITIONS("-D_APPFW_FEATURE_EXPANSION_PKG_INSTALL")
+ENDIF(_APPFW_FEATURE_EXPANSION_PKG_INSTALL)
+
+SET(requires "capi-base-common dlog vconf aul pkgmgr pkgmgr-info security-privilege-checker")
SET(pc_requires "capi-base-common")
INCLUDE(FindPkgConfig)
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Wextra -Wshadow")
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
IF("${ARCH}" STREQUAL "arm")
*
*/
+/**
+ * @ingroup CAPI_PACKAGE_MANAGER_MODULE
+ * @defgroup CAPI_PACKAGE_REQUEST_MODULE Package Manager Request
+ * @brief Package Manager Request API. It is responsible for installing, uninstalling, and moving packages, and storing their information.
+ *
+ * @section CAPI_PACKAGE_REQUEST_MODULE_HEADER Required Header
+ * \#include <package_manager.h>
+ *
+ * @section CAPI_PACKAGE_REQUEST_MODULE_OVERVIEW Overview
+ * The Package Manager API provides functions to install and uninstall the package, and also provides event
+ * listening function. The package_manager_request_install() method is used to asynchronously install a package.
+ * Similarly, the package_manager_request_uninstall() and package_manager_request_move() methods are used to
+ * asynchronously uninstall a package. The callback function is called when the progress of the request changes.
+ * Use package_manager_request_event_cb() to listen to package installation related events.
+ */
+
#endif /* __TIZEN_PACKAGE_MANAGER_DOC_H__ */
int package_info_get_root_path(package_info_h package_info, char **path);
/**
+ * @platform
+ * @brief Gets the name of the TEP(Tizen Expansion Package).
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @remarks name must be released using free().
+ * @param[in] package_info The package information
+ * @param[out] name The name of the tep
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR IO error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ */
+int package_info_get_tep_name (package_info_h package_info, char **name);
+
+/**
* @brief Checks whether the package is system package.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*
} package_manager_event_state_e;
/**
- * @internal
- * @brief Enumeration for request mode.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef enum {
- PACKAGE_MANAGER_REQUEST_MODE_DEFAULT = 0, /**< @internal Default request mode */
- PACKAGE_MANAGER_REQUEST_MODE_QUIET, /**< @internal Quiet request mode */
-} package_manager_request_mode_e;
-
-/**
* @brief Enumeration for move type.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*/
typedef struct package_manager_filter_s *package_manager_filter_h;
/**
- * @internal
- * @brief The Package manager request handle.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- */
-typedef struct package_manager_request_s *package_manager_request_h;
-
-/**
- * @internal
- * @brief Called when the progress of the request to the package manager changes.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @param[in] id The ID of the request to the package manager
- * @param[in] type The type of the package to install, uninstall or update
- * @param[in] package The name of the package to install, uninstall or update
- * @param[in] event_type The type of the request to the package manager
- * @param[in] event_state The current state of the request to the package manager
- * @param[in] progress The progress for the request that is being processed by the package manager \n
- * The range of progress is from @c 0 to @c 100.
- * @param[in] error The error code when the package manager failed to process the request
- * @param[in] user_data The user data passed from package_manager_request_set_event_cb()
- *
- * @see package_manager_request_set_event_cb()
- * @see package_manager_request_unset_event_cb()
- */
-typedef void (*package_manager_request_event_cb) (
- int id,
- const char *type,
- const char *package,
- package_manager_event_type_e event_type,
- package_manager_event_state_e event_state,
- int progress,
- package_manager_error_e error,
- void *user_data);
-
-/**
- * @internal
- * @brief Creates a request handle to the package manager.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @remarks You must release @a request using package_manager_request_destroy().
- *
- * @param[out] request The request handle that is newly created on success
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
- *
- * @see package_manager_request_destroy()
- */
-int package_manager_request_create(package_manager_request_h *request);
-
-/**
- * @internal
- * @brief Destroys the request handle to the package manager.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @param[in] request The request handle to the package manager
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see package_manager_request_create()
- */
-int package_manager_request_destroy(package_manager_request_h request);
-
-/**
- * @internal
- * @brief Registers a callback function to be invoked when the progress of the request changes.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/packagemanager.info
- * @param[in] request The request handle
- * @param[in] callback The callback function to be registered
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
- * @post package_manager_request_event_cb() will be invoked.
- *
- * @see package_manager_request_event_cb()
- * @see package_manager_request_unset_event_cb()
- */
-int package_manager_request_set_event_cb(package_manager_request_h request,
- package_manager_request_event_cb callback, void *user_data);
-
-/**
- * @internal
- * @brief Unregisters the callback function.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @param[in] request The request handle
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see package_manager_request_event_cb()
- * @see package_manager_request_set_event_cb()
- */
-int package_manager_request_unset_event_cb(package_manager_request_h request);
-
-/**
- * @internal
- * @brief Sets the type of the package to install, uninstall or update.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @param[in] request The request handle
- * @param[in] type The type of the package
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- */
-int package_manager_request_set_type(package_manager_request_h request,
- const char *type);
-
-/**
- * @internal
- * @brief Sets the mode of the request.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @param[in] request The request handle
- * @param[in] mode The mode of the request
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- */
-int package_manager_request_set_mode(package_manager_request_h request,
- package_manager_request_mode_e mode);
-
-/**
- * @internal
- * @brief Installs the package located at the given path.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel platform
- * @privilege %http://tizen.org/privilege/packagemanager.admin
- * @param[in] request The request handle
- * @param[in] path The absolute path to the package to be installed
- * @param[out] id The ID of the request to the package manager
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
- * @see package_manager_request_uninstall()
- */
-int package_manager_request_install(package_manager_request_h request,
- const char *path, int *id);
-
-/**
- * @internal
- * @brief Uninstalls the package with the given name.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel platform
- * @privilege %http://tizen.org/privilege/packagemanager.admin
- * @param[in] request The request handle
- * @param[in] name The name of the package to be uninstalled
- * @param[out] id The ID of the request to the package manager
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
- */
-int package_manager_request_uninstall(package_manager_request_h request,
- const char *name, int *id);
-
-/**
- * @internal
- * @brief Moves the package from SD card to the internal memory and vice versa.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel platform
- * @privilege %http://tizen.org/privilege/packagemanager.admin
- * @param[in] request The request handle
- * @param[in] name The name of the package to be moved
- * @param[in] move_type The move type [enum package_manager_move_type_e], [external to internal/internal to external]
- *
- * @return @c 0 on success,
- * otherwise a negative error value
- *
- * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
- * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
- */
-int package_manager_request_move(package_manager_request_h request,
- const char *name, package_manager_move_type_e move_type);
-
-
-/**
* @brief Called when the package is installed, uninstalled or updated, and the progress of the request to the package manager changes.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*
*
* @retval #PACKAGE_MANAGER_ERROR_NONE Successful
* @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
* @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
* @post package_manager_event_cb() will be invoked.
*
*
* @retval #PACKAGE_MANAGER_ERROR_NONE Successful
* @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
* @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
* @post This function invokes package_manager_package_info_cb() repeatedly for each package information.
*
* @retval #PACKAGE_MANAGER_ERROR_NONE Successful
* @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
* @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
*/
int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id);
int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type);
/**
- * @internal
* @brief Clears the application's internal and external cache directory.
* @details All files stored in the cache directory of the application specified with the
* package ID are removed.
*
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel platform
- * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @since_tizen 2.4
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/packagemanager.clearcache
*
* @param[in] package_id The package ID
*
int package_manager_clear_cache_dir(const char *package_id);
/**
- * @internal
+ * @platform
* @brief Clears all applications' internal and external cache directory.
* @details All files stored in the cache directory of each application are removed.
*
int package_manager_clear_all_cache_dir(void);
/**
- * @internal
- * @brief The structure type for data structure for the package size information.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @brief The handle for the package size information.
+ * @since_tizen 2.4
*/
-typedef struct package_size_info
-{
- long long data_size; /**< The size of files in the application's internal data directory */
- long long cache_size; /**< The size of files in the application's internal cache directory */
- long long app_size; /**< The size of files in the application's internal bin, lib, and
- res directories */
- long long external_data_size; /**< The size of files in the application's external data directory */
- long long external_cache_size; /**< The size of files in the application's external cache directory */
- long long external_app_size; /**< The size of files in the application's res directory */
-} package_size_info_t;
+typedef struct package_size_info *package_size_info_h;
/**
- * @internal
* @brief Called when the package size information is obtained.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @since_tizen 2.4
*
* @param[in] package_id The package ID
* @param[in] size_info The pointer to the structure including the package size information
* @param[in] user_data The user data to be passed to the callback function
*/
-typedef void (*package_manager_size_info_receive_cb)(const char *package_id, const package_size_info_t *size_info, void *user_data);
+typedef void (*package_manager_size_info_receive_cb)(const char *package_id, const package_size_info_h size_info, void *user_data);
/**
- * @internal
+ * @platform
* @brief Called when the total package size information is obtained.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
*
* @param[in] size_info The pointer to the structure including the package size information
* @param[in] user_data The user data to be passed to the callback function
*/
-typedef void (*package_manager_total_size_info_receive_cb)(const package_size_info_t *size_info, void *user_data);
+typedef void (*package_manager_total_size_info_receive_cb)(const package_size_info_h size_info, void *user_data);
/**
- * @internal
* @brief Gets the package size information.
* @details The package size info is asynchronously obtained by the callback function.
* @privlevel public
* @privilege %http://tizen.org/privilege/packagemanager.info
*
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @since_tizen 2.4
*
* @param[in] package_id The package ID
* @param[in] callback The asynchronous callback function to get the package size information
int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data);
/**
- * @internal
+ * @platform
* @brief Gets the total package size information.
* @details The total package size info is asynchronously obtained by the callback function.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
package_manager_package_info_cb callback, void *user_data);
/**
+ * @platform
+ * @brief Generates request for getting License
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] resp_data The response data string of the purchase request
+ * @param[out] req_data License request data
+ * @param[out] license_url License acquisition url data
+ * @remarks You must release @a req_data and @a license_url by yourself.
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @post package_manager_drm_register_license
+ */
+int package_manager_drm_generate_license_request(const char *resp_data, char **req_data, char **license_url);
+
+/**
+ * @platform
+ * @brief Registers encrypted license
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] resp_data The response data string of the rights request
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @pre package_manager_drm_generate_license_request
+ */
+int package_manager_drm_register_license(const char *resp_data);
+
+/**
+ * @platform
+ * @brief Decrypts contents which is encrypted
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] drm_file_path DRM file path
+ * @param[in] decrypted_file_path Decrypted file path
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ */
+int package_manager_drm_decrypt_package(const char *drm_file_path, const char *decrypted_file_path);
+
+/**
+ * @brief Retrieves data size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] data_size Data size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_data_size(package_size_info_h handle, long long *data_size);
+
+/**
+ * @brief Retrieves cache size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] cache_size Cache size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size);
+
+/**
+ * @brief Retrieves application size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] app_size App size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_app_size(package_size_info_h handle, long long *app_size);
+
+/**
+ * @brief Retrieves external data size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] ext_data_size External data size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size);
+
+
+/**
+ * @brief Retrieves external cache size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] ext_cache_size External cache size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size);
+
+
+/**
+ * @brief Retrieves external application size from given handle
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] handle Package size info handle
+ * @param[out] ext_app_size External app size will be returned
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size);
+
+/**
+* @}
+*/
+
+/**
+ * @addtogroup CAPI_PACKAGE_REQUEST_MODULE
+ * @{
+ */
+
+/**
+ * @platform
+ * @brief Enumeration for request mode.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef enum {
+ PACKAGE_MANAGER_REQUEST_MODE_DEFAULT = 0, /**< @platform Default request mode */
+ PACKAGE_MANAGER_REQUEST_MODE_QUIET, /**< @platform Quiet request mode */
+} package_manager_request_mode_e;
+
+/**
+ * @platform
+ * @brief The Package manager request handle.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ */
+typedef struct package_manager_request_s *package_manager_request_h;
+
+/**
+ * @platform
+ * @brief Called when the progress of the request to the package manager changes.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] id The ID of the request to the package manager
+ * @param[in] type The type of the package to install, uninstall or update
+ * @param[in] package The name of the package to install, uninstall or update
+ * @param[in] event_type The type of the request to the package manager
+ * @param[in] event_state The current state of the request to the package manager
+ * @param[in] progress The progress for the request that is being processed by the package manager \n
+ * The range of progress is from @c 0 to @c 100.
+ * @param[in] error The error code when the package manager failed to process the request
+ * @param[in] user_data The user data passed from package_manager_request_set_event_cb()
+ *
+ * @see package_manager_request_set_event_cb()
+ * @see package_manager_request_unset_event_cb()
+ */
+typedef void (*package_manager_request_event_cb) (
+ int id,
+ const char *type,
+ const char *package,
+ package_manager_event_type_e event_type,
+ package_manager_event_state_e event_state,
+ int progress,
+ package_manager_error_e error,
+ void *user_data);
+
+/**
+ * @platform
+ * @brief Creates a request handle to the package manager.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @remarks You must release @a request using package_manager_request_destroy().
+ *
+ * @param[out] request The request handle that is newly created on success
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ *
+ * @see package_manager_request_destroy()
+ */
+int package_manager_request_create(package_manager_request_h *request);
+
+/**
+ * @platform
+ * @brief Destroys the request handle to the package manager.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] request The request handle to the package manager
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see package_manager_request_create()
+ */
+int package_manager_request_destroy(package_manager_request_h request);
+
+/**
+ * @platform
+ * @brief Registers a callback function to be invoked when the progress of the request changes.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/packagemanager.info
+ * @param[in] request The request handle
+ * @param[in] callback The callback function to be registered
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @post package_manager_request_event_cb() will be invoked.
+ *
+ * @see package_manager_request_event_cb()
+ * @see package_manager_request_unset_event_cb()
+ */
+int package_manager_request_set_event_cb(package_manager_request_h request,
+ package_manager_request_event_cb callback, void *user_data);
+
+/**
+ * @platform
+ * @brief Unregisters the callback function.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] request The request handle
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ * @see package_manager_request_event_cb()
+ * @see package_manager_request_set_event_cb()
+ */
+int package_manager_request_unset_event_cb(package_manager_request_h request);
+
+/**
+ * @platform
+ * @brief Sets the type of the package to install, uninstall or update.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] request The request handle
+ * @param[in] type The type of the package
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_manager_request_set_type(package_manager_request_h request,
+ const char *type);
+
+/**
+ * @platform
+ * @brief Sets the mode of the request.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] request The request handle
+ * @param[in] mode The mode of the request
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+int package_manager_request_set_mode(package_manager_request_h request,
+ package_manager_request_mode_e mode);
+
+/**
+ * @platform
+ * @brief Sets the path of TEP file to the request. The TEP file that is set will be installed when the package is installed.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] request The request handle
+ * @param[in] tep_path The tep path to set. If this is NULL on update, installed tep will be removed.
+ * @return 0 on success, otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR Internal I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR Severe system error
+ */
+int package_manager_request_set_tep(package_manager_request_h request,
+ const char *tep_path);
+
+/**
+ * @platform
+ * @brief Installs the package located at the given path.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] request The request handle
+ * @param[in] path The absolute path to the package to be installed
+ * @param[out] id The ID of the request to the package manager
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @see package_manager_request_uninstall()
+ */
+int package_manager_request_install(package_manager_request_h request,
+ const char *path, int *id);
+
+/**
+ * @platform
+ * @brief Uninstalls the package with the given name.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] request The request handle
+ * @param[in] name The name of the package to be uninstalled
+ * @param[out] id The ID of the request to the package manager
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ */
+int package_manager_request_uninstall(package_manager_request_h request,
+ const char *name, int *id);
+
+/**
+ * @platform
+ * @brief Moves the package from SD card to the internal memory and vice versa.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @param[in] request The request handle
+ * @param[in] name The name of the package to be moved
+ * @param[in] move_type The move type [enum package_manager_move_type_e], [external to internal/internal to external]
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #PACKAGE_MANAGER_ERROR_NONE Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ */
+int package_manager_request_move(package_manager_request_h request,
+ const char *name, package_manager_move_type_e move_type);
+
+
+
+/**
* @}
*/
extern "C" {
#endif
-typedef enum {
- PRIVILEGE_PACKAGE_MANAGER_INFO,
- PRIVILEGE_PACKAGE_MANAGER_ADMIN
-} privilege_type;
-
-int check_privilege(privilege_type type);
+int package_manager_error(package_manager_error_e error, const char *function, const char *description);
+int package_manager_info_check_privilege();
+int package_manager_admin_check_privilege();
#ifdef __cplusplus
}
#endif
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(pkgmgr)
BuildRequires: pkgconfig(pkgmgr-info)
-BuildRequires: pkgconfig(ail)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(aul)
BuildRequires: pkgconfig(capi-base-common)
+BuildRequires: pkgconfig(security-privilege-checker)
%description
The Package Manager API provides functions to install, uninstall the package,
The Package Manager API provides functions to install, uninstall the package,
and also privides event listening function. (DEV)
+%define appfw_feature_expansion_pkg_install 0
+
+%if 0%{?appfw_feature_expansion_pkg_install}
+_EXPANSION_PKG_INSTALL=ON
+%else
+_EXPANSION_PKG_INSTALL=OFF
+%endif
%prep
%setup -q
%build
MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
-%cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
+%cmake . -DFULLVER=%{version} -DMAJORVER=${MAJORVER} -D_APPFW_FEATURE_EXPANSION_PKG_INSTALL:BOOL=ON
make %{?jobs:-j%jobs}
#include <package_info.h>
#include <package_manager.h>
-
+#include <package_manager_internal.h>
+#include <privilege_checker.h>
#ifdef LOG_TAG
#undef LOG_TAG
static int package_info_foreach_app_cb (const pkgmgrinfo_appinfo_h handle, void *user_data)
{
char *appid = NULL;
- pkgmgr_app_component comp;
+ char *comp_type = NULL;
+ pkgmgr_app_component comp = PACKAGE_INFO_UIAPP;
foreach_app_context_s *foreach_app_context = user_data;
int ret = 0;
if (ret < 0) {
return PKGMGR_R_ERROR;
}
- ret = pkgmgrinfo_appinfo_get_component(handle, &comp);
+
+ ret = pkgmgrinfo_appinfo_get_component_type(handle, &comp_type);
if (ret < 0) {
return PKGMGR_R_ERROR;
}
+ if (comp_type && !strncmp("svcapp", comp_type, strlen(comp_type))) {
+ comp = PACKAGE_INFO_SERVICEAPP;
+ } else if (comp_type && !strncmp("uiapp", comp_type, strlen(comp_type))) {
+ comp = PACKAGE_INFO_UIAPP;
+ } else {
+ comp = PACKAGE_INFO_ALLAPP;
+ }
+
ret = foreach_app_context->callback(comp, appid, foreach_app_context->user_data);
if (!ret)
{
return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
}
if (comp_type == PACKAGE_INFO_ALLAPP)
- ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PM_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
+ ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PMINFO_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
if (comp_type == PACKAGE_INFO_UIAPP)
- ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PM_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
+ ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PMINFO_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
if (comp_type == PACKAGE_INFO_SERVICEAPP)
- ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PM_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
+ ret = pkgmgrinfo_appinfo_get_list(pkgmgrinfo_pkginfo, PMINFO_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
return ret;
}
return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
}
- ret = pkgmgrinfo_pkginfo_get_installed_storage(package_info->pkgmgrinfo_pkginfo, &pkg_info_value);
+ ret = pkgmgrinfo_pkginfo_get_installed_storage(package_info->pkgmgrinfo_pkginfo, (pkgmgrinfo_installed_storage *)&pkg_info_value);
if (ret < 0)
return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
return PACKAGE_MANAGER_ERROR_NONE;
}
+int package_info_get_tep_name (package_info_h package_info, char **name)
+{
+#ifdef _APPFW_FEATURE_EXPANSION_PKG_INSTALL
+ pkgmgrinfo_pkginfo_h pkginfo;
+ char *tepname_tmp = NULL;
+ int retval = 0;
+
+ if (package_info == NULL || package_info->package == NULL || name == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ retval = package_manager_admin_check_privilege();
+ if (retval != PACKAGE_MANAGER_ERROR_NONE) {
+ return retval;
+ }
+
+ if (pkgmgrinfo_pkginfo_get_pkginfo(package_info->package, &pkginfo) != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ if (pkginfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ if (pkgmgrinfo_pkginfo_get_tep_name(pkginfo, &tepname_tmp) != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ if (tepname_tmp != NULL)
+ *name = strdup(tepname_tmp);
+
+ if (*name == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+#else
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+#endif
+}
/*
int package_info_get_install_location(package_info_h package_info, package_manager_package_location_e *location)
return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
}
- ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgrinfo_pkginfo, callback, user_data);
+ ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgrinfo_pkginfo, (pkgmgrinfo_pkg_privilege_list_cb)callback, user_data);
return ret;
}
#include <stdlib.h>
#include <string.h>
#include <glib.h>
+#include <gio/gio.h>
#include <dlog.h>
#include <package-manager.h>
#include <pkgmgr-info.h>
#include <package_manager_internal.h>
+#include <privilege_checker.h>
#ifdef LOG_TAG
#undef LOG_TAG
#define _LOGE(fmt, arg...) LOGE(fmt,##arg)
#define _LOGD(fmt, arg...) LOGD(fmt, ##arg)
+#define CAPI_PACKAGE_MANAGER_DBUS_SERVICE "org.tizen.pkgmgr"
+#define CAPI_PACKAGE_MANAGER_DBUS_PATH "/org/tizen/pkgmgr"
+#define CAPI_PACKAGE_MANAGER_DBUS_INTERFACE "org.tizen.pkgmgr"
+#define CAPI_PACKAGE_MANAGER_METHOD_DRM_GENERATE_LICENSE_REQUEST "DrmGenerateLicenseRequest"
+#define CAPI_PACKAGE_MANAGER_METHOD_DRM_REGISTER_LICNESE "DrmRegisterLicense"
+#define CAPI_PACKAGE_MANAGER_METHOD_DRM_DECRYPT_PACKAGE "DrmDecryptPackage"
+#define CAPI_PACKAGE_MANAGER_RETRY_MAX 3
+
+#define UNUSED(x) (void)(x)
+
+#define TIZEN_PRIVILEGE_PACKAGE_INFO "http://tizen.org/privilege/package.info"
+#define TIZEN_PRIVILEGE_PACKAGE_MANAGER_INSTALL "http://tizen.org/privilege/packagemanager.install"
+#define TIZEN_PRIVILEGE_PACKAGE_MANAGER_ADMIN "http://tizen.org/privilege/packagemanager.admin"
+#define TIZEN_PRIVILEGE_PACKAGE_MANAGER_INFO "http://tizen.org/privilege/packagemanager.info"
+
static GHashTable *__cb_table = NULL;
+extern int package_info_get_package_info(const char *package, package_info_h *package_info);
+extern int package_info_foreach_package_info(package_manager_package_info_cb callback, void *user_data);
+extern int package_info_filter_foreach_package_info(pkgmgrinfo_pkginfo_filter_h handle, package_manager_package_info_cb callback, void *user_data);
+
+
typedef struct _event_info {
int req_id;
package_manager_event_type_e event_type;
event_info *head;
package_manager_request_event_cb event_cb;
void *user_data;
+#ifdef _APPFW_FEATURE_EXPANSION_PKG_INSTALL
+ const char *tep_path;
+ bool tep_move;
+#endif
};
+typedef struct package_size_info
+{
+ long long data_size;
+ long long cache_size;
+ long long app_size;
+ long long external_data_size;
+ long long external_cache_size;
+ long long external_app_size;
+} package_size_info_t;
+
struct package_manager_filter_s {
pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
};
{
int retval;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if (package_manager_client_validate_handle(request)) {
int package_manager_request_unset_event_cb(package_manager_request_h request)
{
- // TODO: Please implement this function.
if (package_manager_client_validate_handle(request)) {
return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
}
+ request->event_cb = NULL;
+ request->user_data = NULL;
+
return PACKAGE_MANAGER_ERROR_NONE;
}
return PACKAGE_MANAGER_ERROR_NONE;
}
+int package_manager_request_set_tep(package_manager_request_h request,
+ const char *tep_path)
+{
+#ifdef _APPFW_FEATURE_EXPANSION_PKG_INSTALL
+ int retval = 0;
+
+ if (package_manager_client_validate_handle(request) || tep_path == NULL) {
+ return
+ package_manager_error
+ (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
+ NULL);
+ }
+
+ retval = package_manager_admin_check_privilege();
+ if (retval != PACKAGE_MANAGER_ERROR_NONE) {
+ return retval;
+ }
+
+ if (request->tep_path)
+ free((void *)request->tep_path);
+
+ request->tep_path = strdup(tep_path);
+ request->tep_move = true;
+
+ if (request ->tep_path == NULL)
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+#else
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+#endif
+}
+
static int package_manager_get_event_type(const char *key,
package_manager_event_type_e *
event_type)
event_info *evt_info;
event_info *current;
event_info *prev;
-
+ UNUSED(event_state);
evt_info = (event_info *) calloc(1, sizeof(event_info));
if (evt_info == NULL) {
_LOGD("calloc failed");
package_manager_event_state_e * event_state)
{
event_info *tmp;
+ UNUSED(event_state);
tmp = *head;
package_manager_event_state_e event_state = -1;
_LOGD("request_event_handler is called");
+ UNUSED(pmsg);
package_manager_request_h request = data;
int request_id = 0;
request->pkg_path = path;
+
+#ifdef _APPFW_FEATURE_EXPANSION_PKG_INSTALL
+ if (request->tep_path)
+ request_id = pkgmgr_client_install_with_tep(request->pc, request->pkg_type, NULL,
+ request->pkg_path, request->tep_path, request->tep_move, NULL,
+ request->mode, request_event_handler,
+ request);
+ else
+#endif
request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
request->pkg_path, NULL,
request->mode, request_event_handler,
}
int package_manager_create(package_manager_h * manager)
{
- int ret;
+ int retval;
- ret = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
- if (ret != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(ret, __FUNCTION__,
- "failed to allow privilege");
+ retval = package_manager_info_check_privilege();
+ if (retval != PACKAGE_MANAGER_ERROR_NONE) {
+ return retval;
}
struct package_manager_s *package_manager = NULL;
package_manager_event_state_e event_state)
{
event_info *evt_info;
+ UNUSED(event_state);
evt_info = (event_info *) calloc(1, sizeof(event_info));
if (evt_info == NULL) {
package_manager_event_state_e * event_state)
{
event_info *tmp;
+ UNUSED(event_state);
+ UNUSED(req_id);
tmp = *head;
int ret = -1;
package_manager_event_type_e event_type = -1;
package_manager_event_state_e event_state = -1;
+ UNUSED(pmsg);
_LOGD("global_event_handler is called");
{
int retval;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
+
if (package_manager_validate_handle(manager)) {
return
package_manager_error
char *pkg_id = NULL;
char *pkg_id_dup = NULL;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if (app_id == NULL) {
{
int retval;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
retval = package_info_get_package_info(package_id, package_info);
{
int retval;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
retval = package_info_foreach_package_info(callback, user_data);
char *pkg_id = NULL;
bool is_preload = 0;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
pkgmgrinfo_permission_type permission = 0;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
{
- int key = (int *)pc;
+ int key = (int)pc;
package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, &key);
if (callback == NULL)
size_info.external_cache_size = result->ext_cache_size;
size_info.external_app_size = result->ext_app_size;
- callback(pkgid, &size_info, user_data);
+ package_size_info_h size_info_h = (package_size_info_h)&size_info;
+ callback(pkgid, size_info_h, user_data);
g_hash_table_remove(__cb_table, pc);
pkgmgr_client_free(pc);
static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
{
- int key = (int *)pc;
+ int key = (int)pc;
package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, &key);
if (callback == NULL)
}
int *key = malloc(sizeof(int));
- if (key == NULL)
- {
+ if (!key) {
_LOGE("out of memory");
pkgmgr_client_free(pc);
return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
}
- *key = pc;
+ *key = (int)pc;
g_hash_table_insert(__cb_table, key, callback);
_LOGD("Successful");
int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
{
- return package_manager_get_package_size_info(PKG_SIZE_INFO_TOTAL, callback, user_data);
+ return package_manager_get_package_size_info(PKG_SIZE_INFO_TOTAL, (package_manager_size_info_receive_cb)callback, user_data);
}
int package_manager_filter_create(package_manager_filter_h *handle)
package_manager_filter_h created_filter = NULL;
pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if (handle == NULL)
{
int retval = 0;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
if ((handle == NULL) || (count == NULL))
{
int retval;
- retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
+ retval = package_manager_info_check_privilege();
if (retval != PACKAGE_MANAGER_ERROR_NONE) {
- return package_manager_error(retval, __FUNCTION__,
- "failed to allow privilege");
+ return retval;
}
retval = package_info_filter_foreach_package_info(handle->pkgmgrinfo_pkginfo_filter, callback, user_data);
return PACKAGE_MANAGER_ERROR_NONE;
}
}
+
+int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
+{
+ if (handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+
+ *data_size = (long long)size_info->data_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
+{
+ if (handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+
+ *cache_size = size_info->cache_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
+{
+ if (handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+ *app_size = size_info->app_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
+{
+ if (handle == NULL)
+ return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+ *ext_data_size = size_info->external_data_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
+{
+ if (handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+ *ext_cache_size = size_info->external_cache_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
+{
+ if (handle == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ package_size_info_t *size_info = (package_size_info_t *)handle;
+ *ext_app_size = size_info->external_app_size;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+static char *__get_cookie_from_security_server(void)
+{
+ int ret = 0;
+ size_t cookie_size = 0;
+ char *e_cookie = NULL;
+
+ //calculage cookie size
+ cookie_size = security_server_get_cookie_size();
+ if (cookie_size <= 0) {
+ _LOGE("failed to get cookie size");
+ return NULL;
+ }
+
+ //get cookie from security server
+ char cookie[cookie_size];
+ cookie[0] = '\0';
+ ret = security_server_request_cookie(cookie, cookie_size);
+ if (ret < 0) {
+ _LOGE("failed to get cookie");
+ return NULL;
+ }
+
+ //encode cookie
+ e_cookie = g_base64_encode((const guchar *)cookie, cookie_size);
+ if (e_cookie == NULL) {
+ _LOGE("failed to encode cookie");
+ return NULL;
+ }
+
+ return e_cookie;
+}
+
+static int __package_manager_drm_generate_license_request(const char *resp_data, char **req_data, char **license_url)
+{
+ _LOGE("__package_manager_drm_generate_license_request is called.");
+
+ if (resp_data == NULL || req_data == NULL || license_url == NULL) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ }
+
+ int ret = -1;
+ GDBusConnection *bus = NULL;
+ GDBusMessage *message = NULL;
+ GDBusMessage *reply = NULL;
+ GVariant *body = NULL;
+ GError *error = NULL;
+ char *req_data_tmp = NULL;
+ char *license_url_tmp = NULL;
+ char *cookie = NULL;
+
+ _LOGE("send event to pkgmgr server");
+
+ bus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (bus == NULL) {
+ _LOGE("g_bus_get_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_bus_get_sync is OK.");
+
+ message = g_dbus_message_new_method_call(CAPI_PACKAGE_MANAGER_DBUS_SERVICE,
+ CAPI_PACKAGE_MANAGER_DBUS_PATH,
+ CAPI_PACKAGE_MANAGER_DBUS_INTERFACE,
+ CAPI_PACKAGE_MANAGER_METHOD_DRM_GENERATE_LICENSE_REQUEST);
+
+ if (message == NULL) {
+ _LOGE("g_dbus_message_new_method_call is failed.");
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_dbus_message_new_method_call is OK.");
+
+ cookie = __get_cookie_from_security_server();
+ if (cookie == NULL) {
+ _LOGE("__get_cookie_from_security_server is NULL");
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ g_dbus_message_set_body(message, g_variant_new("(ss)", resp_data, cookie));
+ reply = g_dbus_connection_send_message_with_reply_sync(bus, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, NULL, NULL, &error);
+ if (reply == NULL) {
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ goto catch;
+ }
+
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is OK.");
+
+ body = g_dbus_message_get_body(reply);
+ if (body != NULL) {
+ _LOGE("g_dbus_message_get_body is OK.");
+ g_variant_get(body, "(ssi)", &req_data_tmp, &license_url_tmp, &ret);
+ } else {
+ _LOGE("body is NULL.");
+ }
+
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+
+ if (ret != 0) {
+ _LOGE("drm_tizen_generate_license_request is failed.");
+ if (ret == -5)
+ ret = PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
+ else
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ goto catch;
+ }
+
+ *req_data = strdup(req_data_tmp);
+ *license_url = strdup(license_url_tmp);
+
+ g_object_unref(reply);
+
+ _LOGE("__package_manager_drm_generate_license_request is successful.");
+
+catch:
+ if (cookie)
+ g_free(cookie);
+
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return package_manager_error(ret, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_manager_drm_generate_license_request(const char *resp_data, char **req_data, char **license_url)
+{
+ int ret = -1;
+ int retry_cnt = 0;
+
+ _LOGE("package_manager_drm_generate_license_request is called.");
+
+ ret = __package_manager_drm_generate_license_request(resp_data, req_data, license_url);
+
+ while (ret != PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("sleep and retry. ret is [%d].", ret);
+ sleep(1);
+
+ if (retry_cnt == CAPI_PACKAGE_MANAGER_RETRY_MAX) {
+ _LOGE("retry_cnt is max. stop retry.");
+ return package_manager_error(ret, __FUNCTION__, NULL);
+ }
+
+ retry_cnt++;
+
+ ret = __package_manager_drm_generate_license_request(resp_data, req_data, license_url);
+ if (ret == PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("retry is successful. retry_cnt is [%d].", retry_cnt);
+ break;
+ }
+ }
+
+ _LOGE("package_manager_drm_generate_license_request is successful.");
+
+ return ret;
+}
+
+static int __package_manager_drm_register_license(const char *resp_data)
+{
+ _LOGE("__package_manager_drm_register_license is called.");
+
+ if (resp_data == NULL) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ }
+
+ int ret = -1;
+ GDBusConnection *bus = NULL;
+ GDBusMessage *message = NULL;
+ GDBusMessage *reply = NULL;
+ GVariant *body = NULL;
+ GError *error = NULL;
+ char *cookie = NULL;
+
+ _LOGE("send event to pkgmgr server");
+
+ bus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (bus == NULL) {
+ _LOGE("g_bus_get_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_bus_get_sync is OK.");
+
+ message = g_dbus_message_new_method_call(CAPI_PACKAGE_MANAGER_DBUS_SERVICE,
+ CAPI_PACKAGE_MANAGER_DBUS_PATH,
+ CAPI_PACKAGE_MANAGER_DBUS_INTERFACE,
+ CAPI_PACKAGE_MANAGER_METHOD_DRM_REGISTER_LICNESE);
+
+ if (message == NULL) {
+ _LOGE("g_dbus_message_new_method_call is failed.");
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_dbus_message_new_method_call is OK.");
+
+ cookie = __get_cookie_from_security_server();
+ if (cookie == NULL) {
+ _LOGE("__get_cookie_from_security_server is NULL");
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ g_dbus_message_set_body(message, g_variant_new("(ss)", resp_data, cookie));
+ reply = g_dbus_connection_send_message_with_reply_sync(bus, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, NULL, NULL, &error);
+ if (reply == NULL) {
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ goto catch;
+ }
+
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is OK.");
+
+ body = g_dbus_message_get_body(reply);
+ if (body != NULL) {
+ _LOGE("g_dbus_message_get_body is OK.");
+ g_variant_get(body, "(i)", &ret);
+ } else {
+ _LOGE("body is NULL.");
+ }
+
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+ g_object_unref(reply);
+
+ if (ret != 0) {
+ _LOGE("drm_tizen_register_license is failed.");
+ if (ret == -5)
+ ret = PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
+ else
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ } else
+ _LOGE("__package_manager_drm_register_license is successful.");
+
+catch:
+ if (cookie)
+ g_free(cookie);
+
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return package_manager_error(ret, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_manager_drm_register_license(const char *resp_data)
+{
+ int ret = -1;
+ int retry_cnt = 0;
+
+ _LOGE("package_manager_drm_register_license is called.");
+
+ ret = __package_manager_drm_register_license(resp_data);
+
+ while (ret != PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("sleep and retry. ret is [%d].", ret);
+ sleep(1);
+
+ if (retry_cnt == CAPI_PACKAGE_MANAGER_RETRY_MAX) {
+ _LOGE("retry_cnt is max. stop retry.");
+ return package_manager_error(ret, __FUNCTION__, NULL);
+ }
+
+ retry_cnt++;
+
+ ret = __package_manager_drm_register_license(resp_data);
+ if (ret == PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("retry is successful. retry_cnt is [%d].", retry_cnt);
+ break;
+ }
+ }
+
+ _LOGE("package_manager_drm_register_license is successful.");
+
+ return ret;
+}
+
+static int __package_manager_drm_decrypt_package(const char *drm_file_path, const char *decrypted_file_path)
+{
+ _LOGE("__package_manager_drm_decrypt_package is called.");
+
+ if (drm_file_path == NULL || decrypted_file_path == NULL) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ }
+
+ int ret = -1;
+ GDBusConnection *bus = NULL;
+ GDBusMessage *message = NULL;
+ GDBusMessage *reply = NULL;
+ GVariant *body = NULL;
+ GError *error = NULL;
+ char *cookie = NULL;
+
+ _LOGE("send event to pkgmgr server");
+
+ bus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (bus == NULL) {
+ _LOGE("g_bus_get_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_bus_get_sync is OK.");
+
+ message = g_dbus_message_new_method_call(CAPI_PACKAGE_MANAGER_DBUS_SERVICE,
+ CAPI_PACKAGE_MANAGER_DBUS_PATH,
+ CAPI_PACKAGE_MANAGER_DBUS_INTERFACE,
+ CAPI_PACKAGE_MANAGER_METHOD_DRM_DECRYPT_PACKAGE);
+
+ if (message == NULL) {
+ _LOGE("g_dbus_message_new_method_call is failed.");
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ _LOGE("g_dbus_message_new_method_call is OK.");
+
+ cookie = __get_cookie_from_security_server();
+ if (cookie == NULL) {
+ _LOGE("__get_cookie_from_security_server is NULL");
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ g_dbus_message_set_body(message, g_variant_new("(sss)", drm_file_path, decrypted_file_path, cookie));
+ reply = g_dbus_connection_send_message_with_reply_sync(bus, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE, G_MAXINT, NULL, NULL, &error);
+ if (reply == NULL) {
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is failed.");
+ if (error != NULL) {
+ _LOGE("error message.[%s]", error->message);
+ g_error_free(error);
+ error = NULL;
+ }
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ goto catch;
+ }
+
+ _LOGE("g_dbus_connection_send_message_with_reply_sync is OK.");
+
+ body = g_dbus_message_get_body(reply);
+ if (body != NULL) {
+ _LOGE("g_dbus_message_get_body is OK.");
+ g_variant_get(body, "(i)", &ret);
+ } else {
+ _LOGE("body is NULL.");
+ }
+
+ g_dbus_connection_flush_sync(bus, NULL, NULL);
+ g_object_unref(message);
+ g_object_unref(reply);
+
+ if (ret != 0) {
+ _LOGE("drm_tizen_decrypt_package is failed. ret is [%d].", ret);
+ if (ret == -5)
+ ret = PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
+ else
+ ret = PACKAGE_MANAGER_ERROR_IO_ERROR;
+ } else
+ _LOGE("__package_manager_drm_decrypt_package is successful.");
+
+catch:
+ if (cookie)
+ g_free(cookie);
+
+ if (ret != PACKAGE_MANAGER_ERROR_NONE)
+ return package_manager_error(ret, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_manager_drm_decrypt_package(const char *drm_file_path, const char *decrypted_file_path)
+{
+ int ret = -1;
+ int retry_cnt = 0;
+
+ _LOGE("package_manager_drm_decrypt_package is called.");
+
+ ret = __package_manager_drm_decrypt_package(drm_file_path, decrypted_file_path);
+
+ while (ret != PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("sleep and retry. ret is [%d].", ret);
+ sleep(1);
+
+ if (retry_cnt == CAPI_PACKAGE_MANAGER_RETRY_MAX) {
+ _LOGE("retry_cnt is max. stop retry.");
+ return package_manager_error(ret, __FUNCTION__, NULL);
+ }
+
+ retry_cnt++;
+
+ ret = __package_manager_drm_decrypt_package(drm_file_path, decrypted_file_path);
+ if (ret == PACKAGE_MANAGER_ERROR_NONE) {
+ _LOGE("retry is successful. retry_cnt is [%d].", retry_cnt);
+ break;
+ }
+ }
+
+ _LOGE("package_manager_drm_decrypt_package is successful.");
+
+ return ret;
+}
+
+int package_manager_info_check_privilege()
+{
+ int retval;
+
+ retval = privilege_checker_check_privilege(TIZEN_PRIVILEGE_PACKAGE_INFO);
+ if (retval != PRIVILEGE_CHECKER_ERR_NONE) {
+ _LOGD("%s is not declared. This might be native application", TIZEN_PRIVILEGE_PACKAGE_INFO);
+ } else {
+ return PACKAGE_MANAGER_ERROR_NONE;
+ }
+
+ retval = privilege_checker_check_privilege(TIZEN_PRIVILEGE_PACKAGE_MANAGER_INFO);
+ if (retval != PRIVILEGE_CHECKER_ERR_NONE) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__,
+ "failed to allow privilege");
+ }
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_manager_admin_check_privilege()
+{
+ int retval;
+
+ retval = privilege_checker_check_privilege(TIZEN_PRIVILEGE_PACKAGE_MANAGER_INSTALL);
+ if (retval != PRIVILEGE_CHECKER_ERR_NONE) {
+ _LOGD("%s is not declared. This might be native application", TIZEN_PRIVILEGE_PACKAGE_MANAGER_INSTALL);
+ } else {
+ return PACKAGE_MANAGER_ERROR_NONE;
+ }
+
+ retval = privilege_checker_check_privilege(TIZEN_PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+ if (retval != PRIVILEGE_CHECKER_ERR_NONE) {
+ return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__,
+ "failed to allow privilege");
+ }
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <package_manager.h>
-#include <package_manager_internal.h>
-#include <dlog.h>
-
-#include <sys/smack.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-
-#define LOG_TAG "CAPI_APPFW_PACKAGE_MANAGER"
-
-#define _LOGE(fmt, arg...) LOGE(fmt,##arg)
-#define _LOGD(fmt, arg...) LOGD(fmt, ##arg)
-
-int check_privilege(privilege_type type)
-{
- int fd = 0;
- int ret = 0;
- char subject_label[SMACK_LABEL_LEN + 1] = "";
-
- fd = open("/proc/self/attr/current", O_RDONLY);
- if (fd < 0) {
- _LOGE("open [%d] failed!", errno);
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- }
-
- ret = read(fd, subject_label, SMACK_LABEL_LEN);
- if (ret < 0) {
- _LOGE("read [%d] failed!", errno);
- close(fd);
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- }
-
- close(fd);
-
- _LOGD("subject_label : %s", subject_label);
-
- if (type == PRIVILEGE_PACKAGE_MANAGER_INFO) {
- ret = smack_have_access(subject_label, "pkgmgr::info", "r");
- if (ret == -1) {
- _LOGE("smack_have_access() fail");
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- } else if (ret == 0) {
- _LOGD("permission denied");
- return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
- }
-
- ret = smack_have_access(subject_label, "pkgmgr::db", "rlx");
- if (ret == -1) {
- _LOGE("smack_have_access() fail");
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- } else if (ret == 0) {
- _LOGD("permission denied");
- return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
- }
-
- ret = smack_have_access(subject_label, "ail::db", "rlx");
- if (ret == 1) {
- _LOGD("permission allowed");
- return PACKAGE_MANAGER_ERROR_NONE;
- } else if (ret == -1) {
- _LOGE("smack_have_access() fail");
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- } else if (ret == 0) {
- _LOGD("permission denied");
- return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
- }
- } else if (type == PRIVILEGE_PACKAGE_MANAGER_ADMIN) {
- ret = smack_have_access(subject_label, "pkgmgr::svc", "rwx");
- if (ret == 1) {
- _LOGD("permission allowed");
- return PACKAGE_MANAGER_ERROR_NONE;
- } else if (ret == -1) {
- _LOGE("smack_have_access() fail");
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
- } else if (ret == 0) {
- _LOGD("permission denied");
- return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
- }
- }
-
- return PACKAGE_MANAGER_ERROR_IO_ERROR;
-}
#include <package_manager.h>
-
+#define UNUSED(x) (void)x
static void _print_help(const char *cmd)
{
const char *cert_value, void *user_data)
{
fprintf(stderr, "cert_info[%d] \t= [%s]\n", cert_type, cert_value);
-
+ UNUSED(user_data);
+ UNUSED(handle);
return true;
}
int ret = 0;
char *package_id = NULL;
ret = package_manager_get_package_id_by_app_id(appid, &package_id);
- if (ret < 0)
+ if (ret < 0) {
fprintf(stderr, "package_manager_get_package_id_by_app_id fail \n");
+ return PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE;
+ }
fprintf(stderr, "app_id \t= [%s]\n", appid);
fprintf(stderr, "package_id \t= [%s]\n", package_id);
- if (package_id)
- free(package_id);
+ free(package_id);
return PACKAGE_MANAGER_ERROR_NONE;
}