Add privilege-checker for Add-On SDK
[platform/framework/native/installer.git] / src / XmlHandler / PrivilegeHandler.cpp
index 2f4d5a5..b074d56 100755 (executable)
@@ -29,7 +29,8 @@
 #include <FBaseInternalTypes.h>
 #include <FSec_AccessControlTypes.h>
 #include <FSec_DeviceKeyGenerator.h>
-#include <FIoFile.h>
+#include <FIoDatabase.h>
+#include <FIoDbEnumerator.h>
 
 #include "InstallerDefs.h"
 #include "PrivilegeHandler.h"
@@ -49,23 +50,33 @@ result
 PrivilegeHandler::PickExternalPrivilege(const IList& fullPrivilegeList, IList& normalPrivilegeList, IList& externalPrivilegeList)
 {
        result r = E_SUCCESS;
-       File file;
        String externalPrivilege;
        ArrayList privilegeList;
+       Database privilegeDb;
+       DbEnumerator* pDbEnum;
 
-       r = file.Construct(EXTERNAL_PRIVILEGE_FILE_NAME, "r");
+       r = privilegeDb.Construct(EXTERNAL_PRIVILEGE_DB_NAME, "r");
        TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       privilegeList.Construct();
 
-       while (file.Read(externalPrivilege) == E_SUCCESS)
+       pDbEnum = privilegeDb.QueryN(L"SELECT PRIVILEGE_ID FROM PrivilegeInfo");
+       TryReturnResultTag(OSP_INSTALLER, pDbEnum != null, E_DATABASE, E_DATABASE, "[E_DATABASE] Privilege database error.");
+
+       AppLog("------------------------------------------");
+       AppLog("External Privilege");
+       AppLog("------------------------------------------");
+
+       while (pDbEnum->MoveNext() == E_SUCCESS)
        {
-               externalPrivilege.Remove(externalPrivilege.GetLength()-1, 1);
+               r = pDbEnum->GetStringAt(0, externalPrivilege);
+               TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, E_DATABASE, E_DATABASE, "[E_DATABASE] Privilege database error.");
+
+               AppLog("%ls", externalPrivilege.GetPointer());
                privilegeList.Add(new String(externalPrivilege));
        }
+       delete pDbEnum;
 
        IEnumerator* pEnum = fullPrivilegeList.GetEnumeratorN();
-
        while(pEnum->MoveNext() == E_SUCCESS)
        {
                String* tempString = static_cast<String*>(pEnum->GetCurrent());
@@ -104,10 +115,17 @@ PrivilegeHandler::GenerateCipherPrivilege(const AppId& appId, const IList& privi
        }
 
        r = PickExternalPrivilege(privilegeList, normalPrivilegeList, stringPrivilegeList);
-       TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       pBitwisePrivilege = PackPrivilegeN(normalPrivilegeList);
-       TryReturnResultTag(OSP_INSTALLER, pBitwisePrivilege != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       if (r == E_SUCCESS)
+       {
+               pBitwisePrivilege = PackPrivilegeN(normalPrivilegeList);
+               TryReturnResultTag(OSP_INSTALLER, pBitwisePrivilege != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               AppLog("Working with normal PrivilegeDb.");
+               pBitwisePrivilege = PackPrivilegeN(privilegeList);
+               TryReturnResultTag(OSP_INSTALLER, pBitwisePrivilege != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        r = GetEncryptedBitwise(pBitwisePrivilege, encryptedPrivileges);
        TryCatchTag(OSP_INSTALLER, r == E_SUCCESS, r = E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
@@ -147,10 +165,17 @@ PrivilegeHandler::GenerateCipherPrivilege(const AppId& appId, const IList& privi
        }
 
        r = PickExternalPrivilege(privilegeList, normalPrivilegeList, stringPrivilegeList);
-       TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       r = PackPrivilegeN(normalPrivilegeList, visibilityLevel, &pBitwisePrivilege);
-       TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       if (r == E_SUCCESS)
+       {
+               r = PackPrivilegeN(normalPrivilegeList, visibilityLevel, &pBitwisePrivilege);
+               TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       }
+       else
+       {
+               AppLog("Working with normal PrivilegeDb.");
+               r = PackPrivilegeN(privilegeList, visibilityLevel, &pBitwisePrivilege);
+               TryReturnResultTag(OSP_INSTALLER, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       }
 
        r = GetEncryptedBitwise(pBitwisePrivilege, encryptedPrivileges);
        TryCatchTag(OSP_INSTALLER, r == E_SUCCESS, r = E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");