From b7edb76c2eb9918f08792425c829c9d74284ffd4 Mon Sep 17 00:00:00 2001 From: Duyoung Jang Date: Mon, 8 Apr 2013 19:36:29 +0900 Subject: [PATCH] Update SmackManager for enablepermissions() Change-Id: I012a92c7fc7d21d7fcd8d9218458889d83330eb0 Signed-off-by: Duyoung Jang --- inc/InstallerDefs.h | 2 +- src/Installer/Installer.cpp | 10 +++++ src/Manager/ConfigurationManager.cpp | 2 +- src/Manager/SmackManager.cpp | 86 +++++++++++++++++++++++++++++++++++- src/Manager/SmackManager.h | 5 ++- 5 files changed, 99 insertions(+), 6 deletions(-) diff --git a/inc/InstallerDefs.h b/inc/InstallerDefs.h index 2c32f7c..3c58f58 100755 --- a/inc/InstallerDefs.h +++ b/inc/InstallerDefs.h @@ -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" diff --git a/src/Installer/Installer.cpp b/src/Installer/Installer.cpp index 17d2d8e..c367e3d 100755 --- a/src/Installer/Installer.cpp +++ b/src/Installer/Installer.cpp @@ -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"); diff --git a/src/Manager/ConfigurationManager.cpp b/src/Manager/ConfigurationManager.cpp index babcbb9..fb37dce 100755 --- a/src/Manager/ConfigurationManager.cpp +++ b/src/Manager/ConfigurationManager.cpp @@ -357,7 +357,7 @@ ConfigurationManager::PostInstall(InstallationContext* pContext, bool error) con SmackManager smackManager; smackManager.Construct(pContext); - smackManager.AddPermissions(packageId); + smackManager.EnablePermissions(packageId); } if (pHandle) diff --git a/src/Manager/SmackManager.cpp b/src/Manager/SmackManager.cpp index c69e476..1fc4012 100755 --- a/src/Manager/SmackManager.cpp +++ b/src/Manager/SmackManager.cpp @@ -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 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 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 diff --git a/src/Manager/SmackManager.h b/src/Manager/SmackManager.h index fc98633..8c81664 100755 --- a/src/Manager/SmackManager.h +++ b/src/Manager/SmackManager.h @@ -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; -- 2.7.4