From 62e1828251e5c833309887c7a8ac33368a1b20c1 Mon Sep 17 00:00:00 2001 From: "hb.min" Date: Wed, 12 Jun 2013 17:46:33 +0900 Subject: [PATCH] Fix GetPrivilegeListN() to support the web application. Change-Id: I4937396c58dd41b9c8238f08a406036e53e48253 Signed-off-by: hb.min --- src/security/FSec_PrivilegeManager.cpp | 77 ++++++++++++---------------------- 1 file changed, 26 insertions(+), 51 deletions(-) diff --git a/src/security/FSec_PrivilegeManager.cpp b/src/security/FSec_PrivilegeManager.cpp index d30b350..d6ce9ec 100644 --- a/src/security/FSec_PrivilegeManager.cpp +++ b/src/security/FSec_PrivilegeManager.cpp @@ -22,10 +22,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include "FSec_AccessControlTypes.h" #include "FSec_PrivilegeManager.h" @@ -122,69 +124,42 @@ _PrivilegeManager::GetInstance(void) return __pPrivilegeManagerInstance; } +int GetPrivilegeListCallback (const char *privilege_name, void *user_data) +{ + ArrayList* pPrivilegeList = static_cast(user_data); + pPrivilegeList->Add(new String(privilege_name)); + + return 0; +} IList* _PrivilegeManager::GetPrivilegeListN(const AppId& appId) { - result r = E_SUCCESS; - _PrivilegeInfo privilegeInfo; - byte* pTargetBitwisePrivilege = null; - IList* pReturnPrivilegeList = null; - String encryptedPrivileges; - String checksum; - ArrayList* pPrivilegeList = null; - IEnumerator* pEnum = null; - ClearLastResult(); - r = RetrieveCipherPrivilegeN(appId, encryptedPrivileges, checksum, pPrivilegeList); - if (r == E_DATA_NOT_FOUND) - { - SysLogException(NID_SEC, E_DATA_NOT_FOUND, "[E_DATA_NOT_FOUND] The privilege information does not exist."); - return null; - } - SysTryReturn(NID_SEC, r == E_SUCCESS, null, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - - r = privilegeInfo.Construct(appId, encryptedPrivileges, checksum, pPrivilegeList); - SysTryCatch(NID_SEC, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - - r = privilegeInfo.GetBitwisePrivilegeN(pTargetBitwisePrivilege); - SysTryCatch(NID_SEC, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - - pReturnPrivilegeList = UnpackPrivilegeN(pTargetBitwisePrivilege); - SysTryCatch(NID_SEC, pReturnPrivilegeList != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - - pEnum = pPrivilegeList->GetEnumeratorN(); - SysTryCatch(NID_SEC, pEnum != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - - while (pEnum->MoveNext() == E_SUCCESS) - { - String* tempString = static_cast< String* >(pEnum->GetCurrent()); - pReturnPrivilegeList->Add(new String(*tempString)); - } + result r = E_SUCCESS; + int res = PMINFO_R_OK; + std::unique_ptr pReturnPrivilegeList(null); - // fall through + pReturnPrivilegeList.reset(new (std::nothrow) ArrayList()); + SysTryReturn(NID_SEC, pReturnPrivilegeList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient."); -CATCH: + r = pReturnPrivilegeList->Construct(); + SysTryReturn(NID_SEC, r == E_SUCCESS, null, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - if (pPrivilegeList != null) - { - pPrivilegeList->RemoveAll(true); - delete pPrivilegeList; - } + std::unique_ptr pPackageId(null); + pPackageId.reset(_StringConverter::CopyToCharArrayN(appId)); + SysTryReturn(NID_SEC, pPackageId != null, null, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - if (pTargetBitwisePrivilege) - { - free(pTargetBitwisePrivilege); - pTargetBitwisePrivilege = null; - } + pkgmgrinfo_pkginfo_h handle; + res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle); + SysTryReturn(NID_SEC, res == PMINFO_R_OK, null, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - if (pEnum) - { - delete pEnum; - } + res = pkgmgrinfo_pkginfo_foreach_privilege(handle, GetPrivilegeListCallback, pReturnPrivilegeList.get()); + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + SysTryReturn(NID_SEC, res == PMINFO_R_OK, null, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred."); - return pReturnPrivilegeList; + return pReturnPrivilegeList.release(); } result -- 2.7.4