#include <FSecCryptoSha1Hmac.h>
#include <FSecCryptoSha1Hash.h>
#include <FBaseColArrayList.h>
+#include <FBaseColHashMap.h>
+#include <privilege_info.h>
#include "FSec_PrivilegeInfo.h"
std::unique_ptr<IEnumerator> pEnum(null);
- r = __privilegeList.Construct();
+ r = __privilegeList.Construct(32, 0.75);
SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
pEnum.reset(pPrivilegeList->GetEnumeratorN());
while (pEnum->MoveNext() == E_SUCCESS)
{
- String* tempString = static_cast< String* >(pEnum->GetCurrent());
- __privilegeList.Add(new String(*tempString));
+ int ret = PRVMGR_ERR_NONE;
+ char* pPrivilegeLevel = null;
+ std::unique_ptr<char[]> pPrivilegeId(null);
+ String* pTempString = static_cast< String* >(pEnum->GetCurrent());
+
+ pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(*pTempString));
+ SysTryReturnResult(NID_SEC, pPrivilegeId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ ret = privilege_info_get_external_privilege_level(static_cast<char*>(pPrivilegeId.get()), &pPrivilegeLevel);
+ SysTryReturnResult(NID_SEC, ret == PRVMGR_ERR_NONE, E_SYSTEM, "An unexpected system error occurred.");
+
+ __privilegeList.Add((new String(*pTempString)), (new String(pPrivilegeLevel)));
}
return r;
SysTryReturnResult(NID_SEC, __apiVisibility >= 0, E_SYSTEM, "An unexpected system error occurred.");
std::unique_ptr<IEnumerator> pEnum(null);
- r = __privilegeList.Construct();
+ r = __privilegeList.Construct(32, 0.75);
SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
pEnum.reset(pPrivilegeList->GetEnumeratorN());
while (pEnum->MoveNext() == E_SUCCESS)
{
- String* tempString = static_cast< String* >(pEnum->GetCurrent());
- __privilegeList.Add(new String(*tempString));
+ int ret = PRVMGR_ERR_NONE;
+ char* pPrivilegeLevel = null;
+ std::unique_ptr<char[]> pPrivilegeId(null);
+ String* pTempString = static_cast< String* >(pEnum->GetCurrent());
+
+ pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(*pTempString));
+ SysTryReturnResult(NID_SEC, pPrivilegeId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ ret = privilege_info_get_external_privilege_level(static_cast<char*>(pPrivilegeId.get()), &pPrivilegeLevel);
+ SysTryReturnResult(NID_SEC, ret == PRVMGR_ERR_NONE, E_SYSTEM, "An unexpected system error occurred.");
+
+ __privilegeList.Add((new String(*pTempString)), (new String(pPrivilegeLevel)));
}
return r;
__apiVisibility = visibility;
std::unique_ptr<IEnumerator> pEnum(null);
- r = __privilegeList.Construct();
+ r = __privilegeList.Construct(32, 0.75);
SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
pEnum.reset(pPrivilegeList->GetEnumeratorN());
while (pEnum->MoveNext() == E_SUCCESS)
{
- String* tempString = static_cast< String* >(pEnum->GetCurrent());
- __privilegeList.Add(new String(*tempString));
+ int ret = PRVMGR_ERR_NONE;
+ char* pPrivilegeLevel = null;
+ std::unique_ptr<char[]> pPrivilegeId(null);
+ String* pTempString = static_cast< String* >(pEnum->GetCurrent());
+
+ pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(*pTempString));
+ SysTryReturnResult(NID_SEC, pPrivilegeId != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ ret = privilege_info_get_external_privilege_level(static_cast<char*>(pPrivilegeId.get()), &pPrivilegeLevel);
+ SysTryReturnResult(NID_SEC, ret == PRVMGR_ERR_NONE, E_SYSTEM, "An unexpected system error occurred.");
+
+ __privilegeList.Add((new String(*pTempString)), (new String(pPrivilegeLevel)));
}
return r;
pPrivilegeInfo->__appId.Append(this->__appId);
memcpy(pPrivilegeInfo->__bitwisePrivilege, this->__bitwisePrivilege, pPrivilegeInfo->__bitwiseLength);
- std::unique_ptr<IEnumerator> pEnum(null);
- r = pPrivilegeInfo->__privilegeList.Construct();
- SysTryCatch(NID_SEC, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
+ std::unique_ptr<IMapEnumerator> pEnum(null);
+ pEnum.reset(this->__privilegeList.GetMapEnumeratorN());
+ SysTryCatch(NID_SEC, pEnum != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
- pEnum.reset(this->__privilegeList.GetEnumeratorN());
+ r = pPrivilegeInfo->__privilegeList.Construct(32, 0.75);
SysTryCatch(NID_SEC, r == E_SUCCESS, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
while (pEnum->MoveNext() == E_SUCCESS)
{
- String* tempString = static_cast< String* >(pEnum->GetCurrent());
- pPrivilegeInfo->__privilegeList.Add(new String(*tempString));
+ String* pTempString = static_cast< String* >(pEnum->GetKey());
+ String* pTempLevel = static_cast< String* >(pEnum->GetValue());
+ pPrivilegeInfo->__privilegeList.Add((new String(*pTempString)), (new String(*pTempLevel)));
}
+ pPrivilegeInfo->__apiVisibility = this->__apiVisibility;
return pPrivilegeInfo;
CATCH:
__apiVisibility = privilegeInfo.__apiVisibility;
- __privilegeList.Construct();
+ std::unique_ptr<IMapEnumerator> pEnum(null);
+ pEnum.reset(privilegeInfo.__privilegeList.GetMapEnumeratorN());
+ SysTryReturnResult(NID_SEC, pEnum != null, E_SYSTEM, "An unexpected system error occurred.");
+
+ r = __privilegeList.Construct(32, 0.75);
+ SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
- IEnumerator* pEnum = privilegeInfo.__privilegeList.GetEnumeratorN();
while (pEnum->MoveNext() == E_SUCCESS)
{
- String* tempString = static_cast< String* >(pEnum->GetCurrent());
- __privilegeList.Add(new String(*tempString));
+ String* pTempString = static_cast< String* >(pEnum->GetKey());
+ String* pTempLevel = static_cast< String* >(pEnum->GetValue());
+ __privilegeList.Add((new String(*pTempString)), (new String(*pTempLevel)));
}
- delete pEnum;
return r;
}
if (validStringFlag)
{
ret = HasPrivilege(privilegeListTable[index].privilege);
-
}
else
{
- ret = __privilegeList.Contains(privilege);
+ ret = __privilegeList.ContainsKey(privilege);
if (ret)
{
+ if (__apiVisibility != _API_VISIBILITY_NONE) // To be removed
+ {
+ const String* pPrivilegeLevel = static_cast< const String* >(__privilegeList.GetValue(privilege));
+ SysTryReturn(NID_SEC, pPrivilegeLevel != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
+
+ int privilegeLevel = GetPrivilegeLevel(*pPrivilegeLevel);
+ if (privilegeLevel > __apiVisibility)
+ {
+ SysLog(NID_SEC, "Result : FALSE [Visibility]");
+ return false;
+ }
+ }
+
SysLog(NID_SEC, "Result : TRUE");
}
else
return null;
}
+int
+_PrivilegeInfo::GetPrivilegeLevel(const String& privilegeLevel)
+{
+ if(privilegeLevel.Equals(String(L"platform"), true))
+ {
+ return _API_VISIBILITY_PLATFORM;
+ }
+ else if(privilegeLevel.Equals(String(L"partner"), true))
+ {
+ return _API_VISIBILITY_PARTNER;
+ }
+
+ return _API_VISIBILITY_PUBLIC;
+}
+
}} //Tizen::Security