Add privilege string getter
authorhb.min <hb.min@samsung.com>
Thu, 20 Jun 2013 12:47:31 +0000 (21:47 +0900)
committerhb.min <hb.min@samsung.com>
Thu, 20 Jun 2013 12:47:31 +0000 (21:47 +0900)
Change-Id: I263cfe09159eb682b98b02af623c01075e661267
Signed-off-by: hb.min <hb.min@samsung.com>
packaging/osp-appfw.spec
src/appfw/CMakeLists.txt
src/security/CMakeLists.txt
src/security/FSec_PrivilegeInfoImpl.cpp
src/security/inc/FSec_PrivilegeInfoImpl.h

index 0fde857..88e0636 100755 (executable)
@@ -56,6 +56,7 @@ BuildRequires:  pkgconfig(zlib)
 BuildRequires:  pkgconfig(haptic)
 BuildRequires:  pkgconfig(x11)
 BuildRequires:  privacy-manager-client-devel
+BuildRequires:  capi-security-privilege-manager-devel
 BuildRequires:  boost-devel
 BuildRequires:  gettext-tools
 BuildRequires:  pkgconfig(security-server)
@@ -67,6 +68,7 @@ Requires: capi-appfw-package-manager
 Requires: capi-content-mime-type
 Requires: capi-network-serial
 Requires: capi-system-runtime-info
+Requires: capi-security-privilege-manager
 Requires: chromium
 Requires: message-port
 Requires: osp-env-config
index 95d5479..427312f 100644 (file)
@@ -50,6 +50,7 @@ TARGET_LINK_LIBRARIES(${this_target} "-lrt" )
 #TARGET_LINK_LIBRARIES(${this_target} "-ldukgenerator" )
 #TARGET_LINK_LIBRARIES(${this_target} "-lcryptsvc" )
 TARGET_LINK_LIBRARIES(${this_target} "-lprivacy-manager-client" )
+TARGET_LINK_LIBRARIES(${this_target} "-lcapi-security-privilege-manager" )
 TARGET_LINK_LIBRARIES(${this_target} ${pkgs_LDFLAGS})
 
 
index 0953ccb..1c1a1e4 100755 (executable)
@@ -4,6 +4,7 @@ INCLUDE_DIRECTORIES(
        ${SLP_INCLUDE_DIRS}
        /usr/include/chromium
        /usr/include/privacy_manager
+       /usr/include/privilegemgr
        inc
        ./
        ${CMAKE_SOURCE_DIR}/inc
index 9636814..9c2e0fa 100755 (executable)
@@ -32,6 +32,8 @@
 #include <FBase_StringConverter.h>
 #include <FSec_AccessControlTypes.h>
 #include <FBaseUtilStringTokenizer.h>
+#include <FBase_StringConverter.h>
+#include <privilege_info.h>
 
 #include "FSec_PrivilegeInfoImpl.h"
 
@@ -44,8 +46,6 @@ using namespace Tizen::Io;
 namespace Tizen { namespace Security
 {
 
-_PrivilegeInfoImpl* _PrivilegeInfoImpl::__pPrivilegeInfoImplInstance  = null;
-
 _PrivilegeInfoImpl::_PrivilegeInfoImpl(void)
 : __pDb(null)
 {
@@ -57,235 +57,48 @@ _PrivilegeInfoImpl::~_PrivilegeInfoImpl(void)
        return;
 }
 
-result
-_PrivilegeInfoImpl::Construct(void)
-{
-       ClearLastResult();
-       result r = E_SUCCESS;
-
-       r = CheckDatabase();
-       SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
-
-       Database* pDb = new Database;
-       SysTryReturnResult(NID_SEC, pDb != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
-
-       r = pDb->Construct(PRIVILEGE_DESCRIPTION_DATABASE_FILE_NAME, false);
-       SysTryReturnResult(NID_SEC, r == E_SUCCESS, E_SYSTEM, "An unexpected system error occurred.");
-
-       __pDb = pDb;
-
-       return E_SUCCESS;
-}
-
-result
-_PrivilegeInfoImpl::CheckDatabase(void)
-{
-       if (File::IsFileExist(PRIVILEGE_DESCRIPTION_DATABASE_FILE_NAME) != true)
-       {
-               SysLogException(NID_SEC, E_SYSTEM, "[E_SYSTEM] Privilege information DB is not exist.");
-               return E_SYSTEM;
-       }
-
-       return E_SUCCESS;
-}
-
-
-void
-_PrivilegeInfoImpl::InitInstance(void)
-{
-       result r = E_SUCCESS;
-       static _PrivilegeInfoImpl instance;
-
-       ClearLastResult();
-
-       r = instance.Construct();
-       SysTryReturnVoidResult(NID_SEC, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       __pPrivilegeInfoImplInstance = &instance;
-}
-
-_PrivilegeInfoImpl*
-_PrivilegeInfoImpl::GetInstance(void)
-{
-       result r = E_SUCCESS;
-       static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
-
-       ClearLastResult();
-
-    if (__pPrivilegeInfoImplInstance == null)
-    {
-        pthread_once(&onceBlock, InitInstance);
-
-        r = GetLastResult();
-        if (IsFailed(r))
-        {
-            onceBlock = PTHREAD_ONCE_INIT;
-            __pPrivilegeInfoImplInstance = null;
-            SysLogException(NID_SEC, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
-        }
-    }
-
-       return __pPrivilegeInfoImplInstance;
-}
-
 String
 _PrivilegeInfoImpl::GetName(const String& privilege) const
 {
-       String name;
-       result r = E_SUCCESS;
-       DbStatement* pStmt = null;
-       DbEnumerator* pEnum = null;
-       String query;
-
-       String privilegeURI = L"http://tizen.org/privilege/";
-       String uriString;
-       String privilegeString;
-
-       SysTryCatch(NID_SEC, (privilege.GetLength()) > (privilegeURI.GetLength()), ,E_INVALID_ARG, "[E_INVALID_ARG] Invalid privilege string : %ls", privilege.GetPointer());
+       int ret = 0;
+       char* pPrivilegeDisplayName = null;
+       std::unique_ptr<char[]> pPrivilegeId(null);
+       String displayName;
 
+       pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(privilege));
+       SysTryReturn(NID_SEC, pPrivilegeId != null, displayName, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
 
-       privilege.SubString(0, privilegeURI.GetLength(), uriString);
-       SysTryCatch(NID_SEC, uriString.Equals(privilegeURI, true), ,E_INVALID_ARG, "[E_INVALID_ARG] Invalid privilege string : %ls", privilege.GetPointer());
+       ret = privilege_info_get_privilege_display_name(pPrivilegeId.get(), &pPrivilegeDisplayName);
+       displayName.Append(pPrivilegeDisplayName);
 
-       privilege.SubString(privilegeURI.GetLength(), privilege.GetLength()-privilegeURI.GetLength(), privilegeString);
-       query.Format(1024, L"SELECT NAME FROM Privileges WHERE PRIVILEGE = '%ls'", privilegeString.GetPointer());
-
-       pStmt = CreateStatementN(*__pDb, query);
-       SysTryCatch(NID_SEC, pStmt != null, , E_DATABASE, "[E_DATABASE] An error occurs while creating a database statement.");
-
-       pEnum = ExecuteStatementN(*__pDb, pStmt);
-       if (pEnum != null)
+       if (pPrivilegeDisplayName != null)
        {
-               if (pEnum->MoveNext() == E_SUCCESS)
-               {
-                       r = pEnum->GetStringAt(0, name);
-               }
-
-               delete pEnum;
-               pEnum = null;
-       }
-       else
-       {
-               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;
+               free(pPrivilegeDisplayName);
        }
-
-CATCH:
-       delete pStmt;
-       pStmt = null;
-
-       return name;
+       return displayName;
 }
 
 String
 _PrivilegeInfoImpl::GetDescription(const String& privilege) const
 {
+       int ret = 0;
+       char* pPrivilegeDescription = null;
+       std::unique_ptr<char[]> pPrivilegeId(null);
        String description;
-       result r = E_SUCCESS;
-       DbStatement* pStmt = null;
-       DbEnumerator* pEnum = null;
-       String query;
-
-       String privilegeURI = L"http://tizen.org/privilege/";
-       String uriString;
-       String privilegeString;
 
-       SysTryCatch(NID_SEC, (privilege.GetLength()) > (privilegeURI.GetLength()), ,E_INVALID_ARG, "[E_INVALID_ARG] Invalid privilege string : %ls", privilege.GetPointer());
+       pPrivilegeId.reset(_StringConverter::CopyToCharArrayN(privilege));
+       SysTryReturn(NID_SEC, pPrivilegeId != null, description, E_SYSTEM, "[E_SYSTEM] An unexpected system error occurred.");
 
-       privilege.SubString(0, privilegeURI.GetLength(), uriString);
-       SysTryCatch(NID_SEC, uriString.Equals(privilegeURI, true), ,E_INVALID_ARG, "[E_INVALID_ARG] Invalid privilege string : %ls", privilege.GetPointer());
-
-       privilege.SubString(privilegeURI.GetLength(), privilege.GetLength()-privilegeURI.GetLength(), privilegeString);
-       query.Format(1024, L"SELECT DESCRIPTION FROM Privileges WHERE PRIVILEGE = '%ls'", privilegeString.GetPointer());
-
-       pStmt = CreateStatementN(*__pDb, query);
-       SysTryCatch(NID_SEC, pStmt != null, , E_DATABASE, "[E_DATABASE] An error occurs while creating a database statement.");
-
-       pEnum = ExecuteStatementN(*__pDb, pStmt);
-       if (pEnum != null)
-       {
-               if (pEnum->MoveNext() == E_SUCCESS)
-               {
-                       r = pEnum->GetStringAt(0, description);
-               }
+       ret = privilege_info_get_privilege_description(pPrivilegeId.get(), &pPrivilegeDescription);
+       description.Append(pPrivilegeDescription);
 
-               delete pEnum;
-               pEnum = null;
-       }
-       else
+       if (pPrivilegeDescription != null)
        {
-               description.Append("Undefined");
+               free(pPrivilegeDescription);
        }
-
-CATCH:
-       delete pStmt;
-       pStmt = null;
-
        return description;
 }
 
-DbStatement*
-_PrivilegeInfoImpl::CreateStatementN(Database& db, const String& query)
-{
-       result r = E_SUCCESS;
-       DbStatement* pStmt = null;
-
-       for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
-       {
-               pStmt = db.CreateStatementN(query);
-               r = GetLastResult();
-
-               if (r != E_OBJECT_LOCKED)
-               {
-                       break;
-               }
-               else
-               {
-                       SysLog(NID_SEC, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
-                       delete pStmt;
-                       pStmt = null;
-                       usleep(50000);
-               }
-       }
-
-       return pStmt;
-}
-
-DbEnumerator*
-_PrivilegeInfoImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
-{
-       result r = E_SUCCESS;
-       DbEnumerator* pEnum = null;
-
-       for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
-       {
-               pEnum = db.ExecuteStatementN(*pStmt);
-               r = GetLastResult();
-
-               if (r != E_OBJECT_LOCKED)
-               {
-                       break;
-               }
-               else
-               {
-                       SysLog(NID_SEC, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
-                       delete pEnum;
-                       pEnum = null;
-                       usleep(50000);
-               }
-       }
-
-       return pEnum;
-}
-
 bool
 _PrivilegeInfoImpl::CheckExternalPrivilege(const Tizen::Base::String& privilegeId)
 {
@@ -367,10 +180,6 @@ _PrivilegeInfoImpl::Construct(const Tizen::Base::String& privilegeId)
        }
 
        SysTryReturnResult(NID_SEC, validStringFlag == true, E_INVALID_ARG, "Invalid privilege ID [%ls]", privilegeId.GetPointer());
-
-       r = Construct();
-       SysTryReturnResult(NID_SEC, validStringFlag == true, E_SYSTEM, "The method cannot proceed due to a severe system error.");
-
        __privilegeId = privilegeId;
 
        return r;
@@ -394,4 +203,58 @@ _PrivilegeInfoImpl::GetDescription(void) const
        return GetDescription(__privilegeId);
 }
 
+DbStatement*
+_PrivilegeInfoImpl::CreateStatementN(Database& db, const String& query)
+{
+       result r = E_SUCCESS;
+       DbStatement* pStmt = null;
+
+       for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
+       {
+               pStmt = db.CreateStatementN(query);
+               r = GetLastResult();
+
+               if (r != E_OBJECT_LOCKED)
+               {
+                       break;
+               }
+               else
+               {
+                       SysLog(NID_SEC, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
+                       delete pStmt;
+                       pStmt = null;
+                       usleep(50000);
+               }
+       }
+
+       return pStmt;
+}
+
+DbEnumerator*
+_PrivilegeInfoImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
+{
+       result r = E_SUCCESS;
+       DbEnumerator* pEnum = null;
+
+       for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
+       {
+               pEnum = db.ExecuteStatementN(*pStmt);
+               r = GetLastResult();
+
+               if (r != E_OBJECT_LOCKED)
+               {
+                       break;
+               }
+               else
+               {
+                       SysLog(NID_SEC, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
+                       delete pEnum;
+                       pEnum = null;
+                       usleep(50000);
+               }
+       }
+
+       return pEnum;
+}
+
 } } // Tizen::Security
index 91c8e55..544e3cd 100755 (executable)
@@ -41,7 +41,6 @@ namespace Tizen { namespace Security
 class PrivilegeInfo;
 
 static const int MAX_DATABASE_RETRY_COUNT = 30;
-static const wchar_t PRIVILEGE_DESCRIPTION_DATABASE_FILE_NAME[] = L"/usr/share/osp/.privilege-description.db";
 static const wchar_t EXTERNAL_PRIVILEGE_DATABASE_FILE_NAME[] = L"/opt/dbspace/.privilegelist.db";
 
 class _OSP_EXPORT_ _PrivilegeInfoImpl
@@ -51,11 +50,8 @@ public:
        Tizen::Base::String GetDescription(const Tizen::Base::String& privilege) const;
        Tizen::Base::String GetName(const Tizen::Base::String& privilege) const;
 
-       static _PrivilegeInfoImpl* GetInstance(void);
-
        _PrivilegeInfoImpl(void);
        virtual ~_PrivilegeInfoImpl(void);
-       result Construct(void);
        result Construct(const Tizen::Base::String& privilegeId);
        Tizen::Base::String GetId(void) const;
        Tizen::Base::String GetDisplayName(void) const;
@@ -67,11 +63,7 @@ private:
 
        static _PrivilegeInfoImpl* __pPrivilegeInfoImplInstance;
 
-       result CheckDatabase(void);
-       static void InitInstance(void);
-
        bool CheckExternalPrivilege(const Tizen::Base::String& privilegeId);
-
        static Tizen::Io::DbStatement* CreateStatementN(Tizen::Io::Database& db, const Tizen::Base::String& query);
        static Tizen::Io::DbEnumerator* ExecuteStatementN(Tizen::Io::Database& db, const Tizen::Io::DbStatement* pStmt);