Modifty getting method of undefined privilege description
[platform/framework/native/appfw.git] / src / security / FSec_PrivilegeInfoImpl.cpp
index e0f712e..f3688ae 100755 (executable)
 #include <FIo.h>
 #include <FBase_StringConverter.h>
 #include <FSec_AccessControlTypes.h>
+#include <FBaseUtilStringTokenizer.h>
 
 #include "FSec_PrivilegeInfoImpl.h"
 
 using namespace Tizen::Base::Runtime;
 using namespace Tizen::Base;
+using namespace Tizen::Base::Utility;
 using namespace Tizen::Base::Collection;
 using namespace Tizen::Io;
 
@@ -165,7 +167,16 @@ _PrivilegeInfoImpl::GetName(const String& privilege) const
        }
        else
        {
-               SysLogException(NID_SEC, E_DATA_NOT_FOUND, "[E_DATA_NOT_FOUND] Privilege information is not found. [%ls]", privilegeString.GetPointer());
+               SysLog(NID_SEC, "Privilege information is not found. [%ls]", privilegeString.GetPointer());
+
+               String displayName;
+           StringTokenizer strTok(__privilegeId, L"/");
+           while(strTok.HasMoreTokens() == true)
+           {
+               strTok.GetNextToken(displayName);
+           }
+
+               name = displayName;
        }
 
 CATCH:
@@ -212,7 +223,7 @@ _PrivilegeInfoImpl::GetDescription(const String& privilege) const
        }
        else
        {
-               SysLogException(NID_SEC, E_DATA_NOT_FOUND, "[E_DATA_NOT_FOUND] Privilege information is not found. [%ls]", privilegeString.GetPointer());
+               description.Append("Undefined");
        }
 
 CATCH:
@@ -276,6 +287,52 @@ _PrivilegeInfoImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
        return pEnum;
 }
 
+bool
+_PrivilegeInfoImpl::CheckExternalPrivilege(const Tizen::Base::String& privilegeId)
+{
+       result r = E_SUCCESS;
+       bool flag = false;
+
+       String query;
+       DbStatement* pStmt = null;
+       DbEnumerator* pEnum = null;
+
+       Database* pDb = new Database;
+       SysTryReturn(NID_SEC, pDb != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+
+       r = pDb->Construct(EXTERNAL_PRIVILEGE_DATABASE_FILE_NAME, false);
+       SysTryCatch(NID_SEC, r == E_SUCCESS, flag = false, E_DATABASE, "External PrivilegeDb is not exist.");
+
+       query.Format(1024, L"SELECT PRIVILEGE_ID FROM PrivilegeInfo WHERE PRIVILEGE_ID = '%ls'", privilegeId.GetPointer());
+
+       pStmt = CreateStatementN(*pDb, query);
+       SysTryCatch(NID_SEC, pStmt != null, flag = false, E_DATABASE, "[E_DATABASE] An error occurs while creating a database statement.");
+
+       pEnum = ExecuteStatementN(*pDb, pStmt);
+       if (pEnum != null)
+       {
+               if (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       flag = true;
+               }
+
+               delete pEnum;
+               pEnum = null;
+       }
+       else
+       {
+               flag = false;
+               SysLog(NID_SEC, "[%ls] is not exist in PrivilegeDb.", privilegeId.GetPointer());
+       }
+
+CATCH:
+
+       delete pDb;
+       delete pStmt;
+
+       return flag;
+}
+
 result
 _PrivilegeInfoImpl::Construct(const Tizen::Base::String& privilegeId)
 {
@@ -302,6 +359,14 @@ _PrivilegeInfoImpl::Construct(const Tizen::Base::String& privilegeId)
                }
        }
 
+       if (validStringFlag != true)
+       {
+               if (CheckExternalPrivilege(privilegeId))
+               {
+                       validStringFlag = true;
+               }
+       }
+
        SysTryReturnResult(NID_SEC, validStringFlag == true, E_INVALID_ARG, "Invalid privilege ID [%ls]", privilegeId.GetPointer());
 
        r = Construct();