Update SmackManager for enablepermissions()
authorDuyoung Jang <duyoung.jang@samsung.com>
Mon, 8 Apr 2013 10:36:29 +0000 (19:36 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Mon, 8 Apr 2013 10:36:29 +0000 (19:36 +0900)
Change-Id: I012a92c7fc7d21d7fcd8d9218458889d83330eb0
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
inc/InstallerDefs.h
src/Installer/Installer.cpp
src/Manager/ConfigurationManager.cpp
src/Manager/SmackManager.cpp
src/Manager/SmackManager.h

index 2c32f7c..3c58f58 100755 (executable)
@@ -23,7 +23,7 @@
 
 #include "InstallerUtil.h"
 
-#define OSP_INSTALLER_VERSION "version=[20130407.2]"
+#define OSP_INSTALLER_VERSION "version=[20130408.1]"
 
 #define DIR_BIN                                L"/bin"
 #define DIR_INFO                       L"/info"
index 17d2d8e..c367e3d 100755 (executable)
@@ -31,6 +31,7 @@
 #include "DatabaseManager.h"
 #include "InstallerUtil.h"
 #include "SignatureManager.h"
+#include "SmackManager.h"
 
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
@@ -133,6 +134,9 @@ Installer::OnEnd(void)
        InstallationContext* pContext = GetContext();
        TryReturn(pContext, INSTALLER_ERROR_INTERNAL_STATE, "pContext is null");
 
+       SmackManager smackManager;
+       smackManager.Construct(pContext);
+
        InstallerOperation operation = pContext->GetInstallerOperation();
        ConfigurationManager configurationManager;
        SignatureManager sigManager;
@@ -142,6 +146,9 @@ Installer::OnEnd(void)
 
        if (operation == INSTALLER_OPERATION_INSTALL)
        {
+               res = smackManager.Install(pContext->__packageId);
+               TryReturn(res, INSTALLER_ERROR_INTERNAL_STATE, "smackManager.Install(%ls) failed.", pContext->__packageId.GetPointer());
+
                res = configurationManager.CreateFile(pContext);
                TryReturn(res, INSTALLER_ERROR_INTERNAL_STATE, "CreateFile() failed.");
 
@@ -165,6 +172,9 @@ Installer::OnEnd(void)
                configurationManager.RemoveFile(pContext);
                sigManager.UnregisterCertInfo();
                configurationManager.PostUninstall(pContext);
+
+               res = smackManager.Uninstall(pContext->__packageId);
+               AppLog("smackManager.Uninstall(%ls) failed. [%d]", pContext->__packageId.GetPointer(), res);
        }
 
        AppLog("Installer::OnEnd() - END");
index babcbb9..fb37dce 100755 (executable)
@@ -357,7 +357,7 @@ ConfigurationManager::PostInstall(InstallationContext* pContext, bool error) con
 
                SmackManager smackManager;
                smackManager.Construct(pContext);
-               smackManager.AddPermissions(packageId);
+               smackManager.EnablePermissions(packageId);
        }
 
        if (pHandle)
index c69e476..1fc4012 100755 (executable)
@@ -248,6 +248,85 @@ SmackManager::AddFriend(const Tizen::App::PackageId& packageId1, const Tizen::Ap
 }
 
 bool
+SmackManager::EnablePermissions(const PackageId& packageId)
+{
+       if (__isSmackEnable == false)
+       {
+               return true;
+       }
+
+       TryReturn(__pContext, false, "__pContext is null");
+
+       int res = 0;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       TryReturn(pPackageId, false, "pPackageId 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 = EnablePermissions(pPackageId.get(), 1, pList, true);
+
+       if (__pContext->__isPreloaded == true)
+       {
+               String smackFile(L"/etc/smack/accesses2.d/");
+               smackFile.Append(packageId);
+               smackFile.Append(L"-temp.rule");
+
+               String smackContext(packageId);
+               smackContext.Append(L" all.rule include");
+
+               InstallerUtil::CreateInfoFile(smackFile, &smackContext);
+       }
+       else
+       {
+               String script("/usr/bin/smackload-app.sh");
+               bool exist = File::IsFileExist(script);
+               script.Append(L" ");
+               script.Append(packageId);
+
+               std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(script));
+               TryReturn(pScript, false, "pScript is null.");
+
+               if (exist == true)
+               {
+                       res = system(pScript.get());
+                       AppLog("[smack] system(%s), result = [%d]", pScript.get(), res);
+               }
+               else
+               {
+                       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;
+}
+
+#if 0
+bool
 SmackManager::AddPermissions(const PackageId& packageId)
 {
        if (__isSmackEnable == false)
@@ -324,6 +403,7 @@ SmackManager::AddPermissions(const PackageId& packageId)
 
        return true;
 }
+#endif
 
 bool
 SmackManager::RevokePermissions(const PackageId& packageId)
@@ -397,7 +477,7 @@ SmackManager::Install(const char* pPackageId)
 
        dlclose(pHandle);
 
-       return 0;
+       return ret;
 }
 
 int
@@ -429,7 +509,7 @@ SmackManager::Uninstall(const char* pPackageId)
 
        dlclose(pHandle);
 
-       return 0;
+       return ret;
 }
 
 int
@@ -624,6 +704,7 @@ SmackManager::RevokePermissions(const char* pPackageId)
        return 0;
 }
 
+#if 0
 int
 SmackManager::AddPermissions(const char* pPackageId, const char** ppPermissions)
 {
@@ -660,3 +741,4 @@ SmackManager::AddPermissions(const char* pPackageId, const char** ppPermissions)
 
        return 0;
 }
+#endif
index fc98633..8c81664 100755 (executable)
@@ -42,7 +42,8 @@ public:
        bool AddSharedDirReaders(const Tizen::Base::String& label);
        bool AddFriend(const Tizen::App::PackageId& packageId1, const Tizen::App::PackageId& packageId2);
 
-       bool AddPermissions(const Tizen::App::PackageId& packageId);
+       bool EnablePermissions(const Tizen::App::PackageId& packageId);
+       //bool AddPermissions(const Tizen::App::PackageId& packageId);
        bool RevokePermissions(const Tizen::App::PackageId& packageId);
 
 private:
@@ -60,7 +61,7 @@ private:
        int RevokePermissions(const char* pPackageId);
 
        // deprecated
-       int AddPermissions(const char* pPackageId, const char** ppPermissions);
+       //int AddPermissions(const char* pPackageId, const char** ppPermissions);
 
 private:
        InstallationContext* __pContext;