AddPermissions() is added
authorDuyoung Jang <duyoung.jang@samsung.com>
Fri, 22 Mar 2013 06:36:02 +0000 (15:36 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Fri, 22 Mar 2013 06:36:02 +0000 (15:36 +0900)
Change-Id: I023d9e979626f961b95a52ecb98a7d7f776052d1
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
inc/InstallerDefs.h
src/Manager/ConfigurationManager.cpp
src/Manager/PermissionManager.cpp
src/Manager/SmackManager.cpp
src/Manager/SmackManager.h

index 14121c3..2b390f4 100755 (executable)
@@ -23,7 +23,7 @@
 
 #include "InstallerUtil.h"
 
-#define OSP_INSTALLER_VERSION "version=[20130322.1]"
+#define OSP_INSTALLER_VERSION "version=[20130322.2]"
 
 #define DIR_BIN                                L"/bin"
 #define DIR_INFO                       L"/info"
index 296a8b3..8dbee89 100755 (executable)
@@ -501,6 +501,7 @@ ConfigurationManager::PostInstall(InstallationContext* pContext, bool error) con
                AppLog("------------------------------------------");
 
                SmackManager smackManager;
+               smackManager.Construct(pContext);
                smackManager.AddPermissions(packageId);
        }
 
@@ -541,6 +542,7 @@ ConfigurationManager::PostUninstall(InstallationContext* pContext) const
        }
 
        SmackManager smackManager;
+       smackManager.Construct(pContext);
        smackManager.RevokePermissions(packageId);
 
        return true;
index 70cfb8c..98784c8 100755 (executable)
@@ -56,6 +56,7 @@ PermissionManager::SetDirectory(InstallationContext* pContext)
        String destPath;
        String appRootPath;
        SmackManager smackManager;
+       smackManager.Construct(pContext);
 
        appRootPath = pContext->__rootPath;
        PackageId packageId = pContext->__packageId;
@@ -103,17 +104,17 @@ PermissionManager::SetDirectory(InstallationContext* pContext)
                InstallerUtil::CreateSymlink(iconPath, destPath);
        }
        InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, false);
-       smackManager.AddLabelSharedDir(packageId, destPath, pContext);
+       smackManager.AddLabelSharedDir(packageId, destPath);
 
        // appRoot/shared/data
        destPath = appRootPath + DIR_SHARED_DATA;
        InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, true);
-       smackManager.AddLabelSharedDir(packageId, destPath, pContext);
+       smackManager.AddLabelSharedDir(packageId, destPath);
 
        // appRoot/shared/trusted
        destPath = appRootPath + DIR_SHARED_TRUSTED;
        InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, true);
-       smackManager.AddLabelSharedDir(packageId, destPath, pContext);
+       smackManager.AddLabelSharedDir(packageId, destPath);
 
        // appRoot/contents
        destPath = appRootPath + DIR_CONTENTS;
index 815588f..6af4e36 100755 (executable)
@@ -39,7 +39,8 @@ using namespace Tizen::Security::Crypto;
 using namespace Tizen::Io;
 
 SmackManager::SmackManager(void)
-:__isSmackEnable(false)
+:__pContext(null)
+,__isSmackEnable(false)
 {
        if (IsSmackEnable() == true)
        {
@@ -52,6 +53,14 @@ SmackManager::~SmackManager(void)
 }
 
 bool
+SmackManager::Construct(InstallationContext* pContext)
+{
+       __pContext = pContext;
+
+       return true;
+}
+
+bool
 SmackManager::AddLabelDir(const String& label, const String& dirPath, bool rootDirectory)
 {
        if (__isSmackEnable == false)
@@ -98,14 +107,16 @@ SmackManager::AddLabelDir(const String& label, const String& dirPath, bool rootD
 }
 
 bool
-SmackManager::AddLabelSharedDir(const PackageId& packageId, const String& dirPath, InstallationContext* pContext)
+SmackManager::AddLabelSharedDir(const PackageId& packageId, const String& dirPath)
 {
        if (__isSmackEnable == false)
        {
                return true;
        }
 
-       if (pContext->__isVerificationMode == false)
+       TryReturn(__pContext, false, "__pContext is null");
+
+       if (__pContext->__isVerificationMode == false)
        {
                AppLog("VerificationMode is off.");
                return true;
@@ -135,7 +146,7 @@ SmackManager::AddLabelSharedDir(const PackageId& packageId, const String& dirPat
                Sha1Hash hash;
                String base64Value;
 
-               X509CertificatePath* pAuthorCertPath = pContext->GetAuthorCertPath();
+               X509CertificatePath* pAuthorCertPath = __pContext->GetAuthorCertPath();
                TryReturn(pAuthorCertPath, false, "pAuthorCertPath is null.");
 
                std::unique_ptr<ICertificate> pEntity(pAuthorCertPath->GetCertificateN(0));
@@ -177,8 +188,9 @@ SmackManager::AddPermissions(const PackageId& packageId)
                return true;
        }
 
+       TryReturn(__pContext, false, "__pContext is null");
+
        int res = 0;
-       const char* pList[] = {"OSP", null};
        String script("/usr/bin/smackload-app.sh");
        bool exist = File::IsFileExist(script);
 
@@ -191,6 +203,25 @@ SmackManager::AddPermissions(const PackageId& packageId)
        std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(script));
        TryReturn(pScript, false, "pScript is null.");
 
+       int count = __pContext->__pPrivilegeList->GetCount();
+
+       const char** pList = new (std::nothrow) const char*[count+1];
+       TryReturn(pList, false, "pList is null.");
+
+       for (int i = 0; i < count; i++)
+       {
+               String* pPrivilege = dynamic_cast < String* >(__pContext->__pPrivilegeList->GetAt(i));
+               if (pPrivilege)
+               {
+                       char* pPrivilegeString = _StringConverter::CopyToCharArrayN(*pPrivilege);
+                       TryReturn(pPrivilegeString, false, "pPrivilegeString is null.");
+
+                       pList[i] = pPrivilegeString;
+               }
+        }
+
+       pList[count] = null;
+
        res = AddPermissions(pPackageId.get(), pList);
 
        if (exist == true)
@@ -203,6 +234,13 @@ SmackManager::AddPermissions(const PackageId& packageId)
                AppLog("[%ls] not found", script.GetPointer());
        }
 
+       for (int i = 0; pList[i] != null; i++)
+       {
+               AppLog("delete Privilege - [%s]", pList[i]);
+               delete[] pList[i];
+        }
+       delete[] pList;
+
        return true;
 }
 
@@ -337,6 +375,11 @@ SmackManager::AddPermissions(const char* pPackageId, const char** ppPermissions)
                return -1;
        }
 
+       for (int i = 0; ppPermissions[i] != null; i++)
+       {
+               AppLog("Privilege - [%s]", ppPermissions[i]);
+        }
+
        ret = app_add_permissions(pPackageId, ppPermissions);
        AppLog("[smack] app_add_permissions(%s), result = [%d]", pPackageId, ret);
 
index 6ee90e3..48d6a4e 100755 (executable)
@@ -32,9 +32,10 @@ class SmackManager
 public:
        SmackManager(void);
        virtual ~SmackManager(void);
+       bool Construct(InstallationContext* pContext);
 
        bool AddLabelDir(const Tizen::Base::String& label, const Tizen::Base::String& dirPath, bool rootDirectory = false);
-       bool AddLabelSharedDir(const Tizen::App::PackageId& packageId, const Tizen::Base::String& dirPath, InstallationContext* pContext);
+       bool AddLabelSharedDir(const Tizen::App::PackageId& packageId, const Tizen::Base::String& dirPath);
        bool AddPermissions(const Tizen::App::PackageId& packageId);
        bool RevokePermissions(const Tizen::App::PackageId& packageId);
 
@@ -47,6 +48,7 @@ private:
        int RevokePermissions(const char* pPackageId);
 
 private:
+       InstallationContext* __pContext;
        bool __isSmackEnable;