From 079208d41888f8a21223da24d982f05448dce3af Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Fri, 19 May 2017 11:36:16 +0900 Subject: [PATCH] Add new pkgmar_installer_info API to get privilege_level info of the package which is being processing by installer currently. Change-Id: Ic522a61c8b79c25e01f7e5c161dd8d2f91f3d572 Signed-off-by: jongmyeongko --- installer/CMakeLists.txt | 1 + installer/pkgmgr_installer.c | 15 +++++ installer/pkgmgr_installer.h | 89 +++++------------------------ installer/pkgmgr_installer_info.h | 28 ++++++++- installer/pkgmgr_installer_type.h | 116 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 173 insertions(+), 76 deletions(-) create mode 100644 installer/pkgmgr_installer_type.h diff --git a/installer/CMakeLists.txt b/installer/CMakeLists.txt index c3b72ef..4aa5e87 100644 --- a/installer/CMakeLists.txt +++ b/installer/CMakeLists.txt @@ -37,6 +37,7 @@ INSTALL(TARGETS pkgmgr_installer DESTINATION ${LIB_INSTALL_DIR} COMPONENT Runtim INSTALL(FILES pkgmgr_installer.h DESTINATION include/pkgmgr) INSTALL(FILES pkgmgr_installer_info.h DESTINATION include/pkgmgr) INSTALL(FILES pkgmgr_installer_error.h DESTINATION include/pkgmgr) +INSTALL(FILES pkgmgr_installer_type.h DESTINATION include/pkgmgr) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr-installer.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) ## pkgmgr_installer_signal_agent diff --git a/installer/pkgmgr_installer.c b/installer/pkgmgr_installer.c index 36279ab..e9a0aa7 100644 --- a/installer/pkgmgr_installer.c +++ b/installer/pkgmgr_installer.c @@ -113,6 +113,7 @@ struct pkgmgr_installer { }; static uid_t g_target_uid; +static pkgmgr_privilege_level g_privilege_level = PM_PRIVILEGE_UNKNOWN; static const char *__get_signal_name(pkgmgr_installer *pi, const char *key, const char *pkg_type) @@ -878,9 +879,23 @@ API int pkgmgr_installer_delete_certinfo(const char *pkgid) return ret; } +API int pkgmgr_installer_set_privilege_level(pkgmgr_privilege_level level) +{ + g_privilege_level = level; + + return 0; +} + API int pkgmgr_installer_info_get_target_uid(uid_t *uid) { *uid = g_target_uid; return 0; } + +API int pkgmgr_installer_info_get_privilege_level(pkgmgr_privilege_level *level) +{ + *level = g_privilege_level; + + return 0; +} diff --git a/installer/pkgmgr_installer.h b/installer/pkgmgr_installer.h index c108979..73ffbd3 100644 --- a/installer/pkgmgr_installer.h +++ b/installer/pkgmgr_installer.h @@ -21,11 +21,13 @@ */ -#include - #ifndef __PKGMGR_INSTALLER_H__ #define __PKGMGR_INSTALLER_H__ +#include + +#include "pkgmgr_installer_type.h" + /** * @file pkgmgr_installer.h * @author Youmin Ha @@ -37,7 +39,6 @@ extern "C" { #endif - /** * pkgmgr_installer is an opaque type for an object */ @@ -45,78 +46,6 @@ typedef struct pkgmgr_installer pkgmgr_installer; typedef void *pkgmgr_instcertinfo_h; /** - * @brief listening event type in pkgmgr. - */ -#define PKGMGR_INSTALLER_START_KEY_STR "start" -#define PKGMGR_INSTALLER_END_KEY_STR "end" -#define PKGMGR_INSTALLER_ERROR_KEY_STR "error" -#define PKGMGR_INSTALLER_APPID_KEY_STR "appid" -#define PKGMGR_INSTALLER_INSTALL_PERCENT_KEY_STR "install_percent" -#define PKGMGR_INSTALLER_GET_SIZE_KEY_STR "get_size" -#define PKGMGR_INSTALLER_CLEAR_CACHE_KEY_STR "clear_cache" - -#define PKGMGR_INSTALLER_INSTALL_EVENT_STR "install" -#define PKGMGR_INSTALLER_UNINSTALL_EVENT_STR "uninstall" -#define PKGMGR_INSTALLER_CLEAR_EVENT_STR "clear" -#define PKGMGR_INSTALLER_MOVE_EVENT_STR "move" -#define PKGMGR_INSTALLER_UPGRADE_EVENT_STR "update" -#define PKGMGR_INSTALLER_OK_EVENT_STR "ok" -#define PKGMGR_INSTALLER_FAIL_EVENT_STR "fail" -#define PKGMGR_INSTALLER_UNKNOWN_EVENT_STR "" - -#define PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR "disable_app" -#define PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR "enable_app" - -#define PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR "disable_app_splash_screen" -#define PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR "enable_app_splash_screen" - -/** - * Request type. - */ -enum { - PKGMGR_REQ_PERM = -1, - PKGMGR_REQ_INVALID = 0, - PKGMGR_REQ_INSTALL = 1, - PKGMGR_REQ_UNINSTALL = 2, - PKGMGR_REQ_CLEAR = 3, - PKGMGR_REQ_MOVE = 4, - PKGMGR_REQ_RECOVER = 5, - PKGMGR_REQ_REINSTALL = 6, - PKGMGR_REQ_GETSIZE = 7, - PKGMGR_REQ_UPGRADE = 8, - PKGMGR_REQ_SMACK = 9, - PKGMGR_REQ_MANIFEST_DIRECT_INSTALL = 10, - PKGMGR_REQ_ENABLE_APP = 11, - PKGMGR_REQ_DISABLE_APP = 12, - PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN = 13, - PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN = 14, - PKGMGR_REQ_MOUNT_INSTALL = 15, - PKGMGR_REQ_DISABLE_PKG = 16, - PKGMGR_REQ_ENABLE_PKG = 17, - PKGMGR_REQ_MIGRATE_EXTIMG = 18 -}; - -enum { - PKGMGR_INSTALLER_EINVAL = -2, /**< Invalid argument */ - PKGMGR_INSTALLER_ERROR = -1, /**< General error */ - PKGMGR_INSTALLER_EOK = 0 /**< General success */ -}; - - -typedef enum { - PM_SET_AUTHOR_ROOT_CERT = 0, - PM_SET_AUTHOR_INTERMEDIATE_CERT = 1, - PM_SET_AUTHOR_SIGNER_CERT = 2, - PM_SET_DISTRIBUTOR_ROOT_CERT = 3, - PM_SET_DISTRIBUTOR_INTERMEDIATE_CERT = 4, - PM_SET_DISTRIBUTOR_SIGNER_CERT = 5, - PM_SET_DISTRIBUTOR2_ROOT_CERT = 6, - PM_SET_DISTRIBUTOR2_INTERMEDIATE_CERT = 7, - PM_SET_DISTRIBUTOR2_SIGNER_CERT = 8, -} pkgmgr_instcert_type; - - -/** * @brief Create a pkgmgr_installer object. * @pre None * @post pkgmgr_installer object must be freed. @@ -1047,6 +976,16 @@ int pkgmgr_installer_destroy_certinfo_set_handle(pkgmgr_instcertinfo_h handle); */ int pkgmgr_installer_delete_certinfo(const char *pkgid); +/** + * @brief This API sets privilege level for pkgmgr_installer_info + * + * This API is for installer backend.\n + * + * @param[in] level pkgmgr_privilege_level + * @return 0 if success, error code(<0) if fail\n +*/ +int pkgmgr_installer_set_privilege_level(pkgmgr_privilege_level level); + #ifdef __cplusplus } #endif diff --git a/installer/pkgmgr_installer_info.h b/installer/pkgmgr_installer_info.h index 0f29f6e..91bbeb8 100644 --- a/installer/pkgmgr_installer_info.h +++ b/installer/pkgmgr_installer_info.h @@ -21,6 +21,8 @@ #ifndef __PKGMGR_INSTALLER_INFO_H__ #define __PKGMGR_INSTALLER_INFO_H__ +#include "pkgmgr_installer_type.h" + /** * @file pkgmgr_installer_info.h * @brief This file declares API for getting information of pkgmgr_installer @@ -31,7 +33,7 @@ extern "C" { #endif /** - * @brief Get target_uid for pkg to be installed path + * @brief Get target_uid of package which is being processed by installer * @pre None * @post None * @param[out] uid user id @@ -50,6 +52,30 @@ extern "C" { */ int pkgmgr_installer_info_get_target_uid(uid_t *uid); +/** + * @brief Get privilege_level of package which is being processed by installer + * @pre None + * @post None + * @param[out] pkgmgr_privilege_level level + * @return 0 if success, else retrun < 0 + * @remark In case of uninstallation, the level can be PM_PRIVILEGE_UNKNOWN. + * Because, the installer don't have the privilege level in that case. + * @code + #include + int main() + { + pkgmgr_privilege_level level; + if (pkgmgr_installer_info_get_privilege_level(&level) < 0) { + printf("failed to get privilege level\n"); + } + if (level == PM_PRIVILEGE_PLATFORM)) { + printf("platform level privilege"); + } + } + * @endcode + */ +int pkgmgr_installer_info_get_privilege_level(pkgmgr_privilege_level *level); + #ifdef __cplusplus } #endif diff --git a/installer/pkgmgr_installer_type.h b/installer/pkgmgr_installer_type.h new file mode 100644 index 0000000..7717146 --- /dev/null +++ b/installer/pkgmgr_installer_type.h @@ -0,0 +1,116 @@ +/* + * slp-pkgmgr + * + * Copyright (c) 2017 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. + * + */ + + +#ifndef __PKGMGR_INSTALLER_TYPE_H__ +#define __PKGMGR_INSTALLER_TYPE_H__ + +/** + * @file pkgmgr_installer_type.h + * @brief This file declares some types for pkgmgr_installer + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief listening event type in pkgmgr. + */ +#define PKGMGR_INSTALLER_START_KEY_STR "start" +#define PKGMGR_INSTALLER_END_KEY_STR "end" +#define PKGMGR_INSTALLER_ERROR_KEY_STR "error" +#define PKGMGR_INSTALLER_APPID_KEY_STR "appid" +#define PKGMGR_INSTALLER_INSTALL_PERCENT_KEY_STR "install_percent" +#define PKGMGR_INSTALLER_GET_SIZE_KEY_STR "get_size" +#define PKGMGR_INSTALLER_CLEAR_CACHE_KEY_STR "clear_cache" + +#define PKGMGR_INSTALLER_INSTALL_EVENT_STR "install" +#define PKGMGR_INSTALLER_UNINSTALL_EVENT_STR "uninstall" +#define PKGMGR_INSTALLER_CLEAR_EVENT_STR "clear" +#define PKGMGR_INSTALLER_MOVE_EVENT_STR "move" +#define PKGMGR_INSTALLER_UPGRADE_EVENT_STR "update" +#define PKGMGR_INSTALLER_OK_EVENT_STR "ok" +#define PKGMGR_INSTALLER_FAIL_EVENT_STR "fail" +#define PKGMGR_INSTALLER_UNKNOWN_EVENT_STR "" + +#define PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR "disable_app" +#define PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR "enable_app" + +#define PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR "disable_app_splash_screen" +#define PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR "enable_app_splash_screen" + +/** + * Request type. + */ +enum { + PKGMGR_REQ_PERM = -1, + PKGMGR_REQ_INVALID = 0, + PKGMGR_REQ_INSTALL = 1, + PKGMGR_REQ_UNINSTALL = 2, + PKGMGR_REQ_CLEAR = 3, + PKGMGR_REQ_MOVE = 4, + PKGMGR_REQ_RECOVER = 5, + PKGMGR_REQ_REINSTALL = 6, + PKGMGR_REQ_GETSIZE = 7, + PKGMGR_REQ_UPGRADE = 8, + PKGMGR_REQ_SMACK = 9, + PKGMGR_REQ_MANIFEST_DIRECT_INSTALL = 10, + PKGMGR_REQ_ENABLE_APP = 11, + PKGMGR_REQ_DISABLE_APP = 12, + PKGMGR_REQ_ENABLE_APP_SPLASH_SCREEN = 13, + PKGMGR_REQ_DISABLE_APP_SPLASH_SCREEN = 14, + PKGMGR_REQ_MOUNT_INSTALL = 15, + PKGMGR_REQ_DISABLE_PKG = 16, + PKGMGR_REQ_ENABLE_PKG = 17, + PKGMGR_REQ_MIGRATE_EXTIMG = 18 +}; + +enum { + PKGMGR_INSTALLER_EINVAL = -2, /**< Invalid argument */ + PKGMGR_INSTALLER_ERROR = -1, /**< General error */ + PKGMGR_INSTALLER_EOK = 0 /**< General success */ +}; + +typedef enum { + PM_SET_AUTHOR_ROOT_CERT = 0, + PM_SET_AUTHOR_INTERMEDIATE_CERT = 1, + PM_SET_AUTHOR_SIGNER_CERT = 2, + PM_SET_DISTRIBUTOR_ROOT_CERT = 3, + PM_SET_DISTRIBUTOR_INTERMEDIATE_CERT = 4, + PM_SET_DISTRIBUTOR_SIGNER_CERT = 5, + PM_SET_DISTRIBUTOR2_ROOT_CERT = 6, + PM_SET_DISTRIBUTOR2_INTERMEDIATE_CERT = 7, + PM_SET_DISTRIBUTOR2_SIGNER_CERT = 8, +} pkgmgr_instcert_type; + +typedef enum { + PM_PRIVILEGE_UNKNOWN = -1, + PM_PRIVILEGE_UNTRUSTED = 0, + PM_PRIVILEGE_PUBLIC = 1, + PM_PRIVILEGE_PARTNER = 2, + PM_PRIVILEGE_PLATFORM = 3 +} pkgmgr_privilege_level; + +#ifdef __cplusplus +} +#endif + +#endif /* __PKGMGR_INSTALLER_TYPE_H__ */ + -- 2.7.4