Update SmackManager class
authorDuyoung Jang <duyoung.jang@samsung.com>
Fri, 5 Apr 2013 06:17:13 +0000 (15:17 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Fri, 5 Apr 2013 06:17:13 +0000 (15:17 +0900)
Change-Id: I1fac17434a552624f1bd268b322c02892aa1aa73
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
inc/InstallerDefs.h
src/Manager/SmackManager.cpp
src/Manager/SmackManager.h

index 2da662b..fbd0659 100755 (executable)
@@ -23,7 +23,7 @@
 
 #include "InstallerUtil.h"
 
-#define OSP_INSTALLER_VERSION "version=[20130404.1]"
+#define OSP_INSTALLER_VERSION "version=[20130405.1]"
 
 #define DIR_BIN                                L"/bin"
 #define DIR_INFO                       L"/info"
index 3b93036..c0ff577 100755 (executable)
@@ -62,6 +62,42 @@ SmackManager::Construct(InstallationContext* pContext)
 }
 
 bool
+SmackManager::Install(const PackageId& packageId)
+{
+       if (__isSmackEnable == false)
+       {
+               return true;
+       }
+
+       int res = 0;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       TryReturn(pPackageId, false, "pPackageId is null.");
+
+       res = Install(pPackageId.get());
+
+       return true;
+}
+
+bool
+SmackManager::Uninstall(const PackageId& packageId)
+{
+       if (__isSmackEnable == false)
+       {
+               return true;
+       }
+
+       int res = 0;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       TryReturn(pPackageId, false, "pPackageId is null.");
+
+       res = Uninstall(pPackageId.get());
+
+       return true;
+}
+
+bool
 SmackManager::AddLabelDir(const String& label, const String& dirPath, bool rootDirectory)
 {
        if (__isSmackEnable == false)
@@ -185,6 +221,32 @@ SmackManager::AddLabelSharedDir(const PackageId& packageId, const String& dirPat
 }
 
 bool
+SmackManager::AddSharedDirReaders(const Tizen::Base::String& label)
+{
+       if (__isSmackEnable == false)
+       {
+               return true;
+       }
+
+       //int AddSharedDirReaders(const char* pSharedLabel, const char** ppAppList);
+
+       return true;
+}
+
+bool
+SmackManager::AddFriend(const Tizen::App::PackageId& packageId1, const Tizen::App::PackageId& packageId2)
+{
+       if (__isSmackEnable == false)
+       {
+               return true;
+       }
+
+       //int AddFriend(const char* pPackageId1, const char* pPackageId2);
+
+       return true;
+}
+
+bool
 SmackManager::AddPermissions(const PackageId& packageId)
 {
        if (__isSmackEnable == false)
@@ -306,6 +368,70 @@ SmackManager::IsSmackEnable()
 }
 
 int
+SmackManager::Install(const char* pPackageId)
+{
+       int ret = 0;
+       void* pHandle = null;
+       char* pErrorMsg = null;
+       int (*app_install)(const char*) = null;
+
+       pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
+       if (!pHandle)
+       {
+               AppLog("Install(): dlopen() failed. [%s]", dlerror());
+               return -1;
+       }
+
+       app_install = reinterpret_cast <int (*)(const char*)>(dlsym(pHandle, "app_install"));
+       pErrorMsg = dlerror();
+       if (pErrorMsg != null)
+       {
+               AppLog("Install(): dlsym() failed. [%s]", pErrorMsg);
+               dlclose(pHandle);
+               return -1;
+       }
+
+       ret = app_install(pPackageId);
+       AppLog("[smack] app_install(%s), result = [%d]", pPackageId, ret);
+
+       dlclose(pHandle);
+
+       return 0;
+}
+
+int
+SmackManager::Uninstall(const char* pPackageId)
+{
+       int ret = 0;
+       void* pHandle = null;
+       char* pErrorMsg = null;
+       int (*app_uninstall)(const char*) = null;
+
+       pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
+       if (!pHandle)
+       {
+               AppLog("Uninstall(): dlopen() failed. [%s]", dlerror());
+               return -1;
+       }
+
+       app_uninstall = reinterpret_cast <int (*)(const char*)>(dlsym(pHandle, "app_uninstall"));
+       pErrorMsg = dlerror();
+       if (pErrorMsg != null)
+       {
+               AppLog("Uninstall(): dlsym() failed. [%s]", pErrorMsg);
+               dlclose(pHandle);
+               return -1;
+       }
+
+       ret = app_uninstall(pPackageId);
+       AppLog("[smack] app_uninstall(%s), result = [%d]", pPackageId, ret);
+
+       dlclose(pHandle);
+
+       return 0;
+}
+
+int
 SmackManager::AddLabelDir(const char* pLabel, const char* pDirPath)
 {
        int ret = 0;
@@ -370,36 +496,95 @@ SmackManager::AddLabelSharedDir(const char* pLabel, const char* pSharedLabel, co
 }
 
 int
-SmackManager::AddPermissions(const char* pPackageId, const char** ppPermissions)
+SmackManager::AddSharedDirReaders(const char* pSharedLabel, const char** ppAppList)
 {
        int ret = 0;
        void* pHandle = null;
        char* pErrorMsg = null;
-       int (*app_add_permissions)(const char*, const char**) = null;
+       int (*add_shared_dir_readers)(const char*, const char**) = null;
 
        pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
        if (!pHandle)
        {
-               AppLog("AddPermissions(): dlopen() failed. [%s][%s]", pPackageId, dlerror());
+               AppLog("AddSharedDirReaders(): dlopen() failed. [%s]", dlerror());
                return -1;
        }
 
-       app_add_permissions = reinterpret_cast <int (*)(const char*, const char**)>(dlsym(pHandle, "app_add_permissions"));
+       add_shared_dir_readers = reinterpret_cast <int (*)(const char*, const char**)>(dlsym(pHandle, "add_shared_dir_readers"));
        pErrorMsg = dlerror();
        if (pErrorMsg != null)
        {
-               AppLog("AddPermissions(): dlsym() failed. [%s][%s]", pPackageId, pErrorMsg);
+               AppLog("AddSharedDirReaders(): dlsym() failed. [%s]", pErrorMsg);
                dlclose(pHandle);
                return -1;
        }
 
-       for (int i = 0; ppPermissions[i] != null; i++)
+       ret = add_shared_dir_readers(pSharedLabel, ppAppList);
+       AppLog("[smack] add_shared_dir_readers(%s), result = [%d]", pSharedLabel, ret);
+
+       dlclose(pHandle);
+
+       return 0;
+}
+
+int
+SmackManager::AddFriend(const char* pPackageId1, const char* pPackageId2)
+{
+       int ret = 0;
+       void* pHandle = null;
+       char* pErrorMsg = null;
+       int (*app_add_friend)(const char*, const char*) = null;
+
+       pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
+       if (!pHandle)
        {
-               AppLog("Privilege - [%s]", ppPermissions[i]);
-        }
+               AppLog("AddFriend(): dlopen() failed. [%s]", dlerror());
+               return -1;
+       }
 
-       ret = app_add_permissions(pPackageId, ppPermissions);
-       AppLog("[smack] app_add_permissions(%s), result = [%d]", pPackageId, ret);
+       app_add_friend = reinterpret_cast <int (*)(const char*, const char*)>(dlsym(pHandle, "app_add_friend"));
+       pErrorMsg = dlerror();
+       if (pErrorMsg != null)
+       {
+               AppLog("AddFriend(): dlsym() failed. [%s]", pErrorMsg);
+               dlclose(pHandle);
+               return -1;
+       }
+
+       ret = app_add_friend(pPackageId1, pPackageId2);
+       AppLog("[smack] app_add_friend(%s, %s), result = [%d]", pPackageId1, pPackageId2, ret);
+
+       dlclose(pHandle);
+
+       return 0;
+}
+
+int
+SmackManager::EnablePermissions(const char* pPackageId, int appType, const char** ppPermissions, bool persistent)
+{
+       int ret = 0;
+       void* pHandle = null;
+       char* pErrorMsg = null;
+       int (*app_enable_permissions)(const char*, int, const char**, bool) = null;
+
+       pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
+       if (!pHandle)
+       {
+               AppLog("EnablePermissions(): dlopen() failed. [%s]", dlerror());
+               return -1;
+       }
+
+       app_enable_permissions = reinterpret_cast <int (*)(const char*, int, const char**, bool)>(dlsym(pHandle, "app_enable_permissions"));
+       pErrorMsg = dlerror();
+       if (pErrorMsg != null)
+       {
+               AppLog("EnablePermissions(): dlsym() failed. [%s]", pErrorMsg);
+               dlclose(pHandle);
+               return -1;
+       }
+
+       ret = app_enable_permissions(pPackageId, appType, ppPermissions, persistent);
+       AppLog("[smack] app_enable_permissions(%s, %d), result = [%d]", pPackageId, appType, ret);
 
        dlclose(pHandle);
 
@@ -437,3 +622,40 @@ SmackManager::RevokePermissions(const char* pPackageId)
 
        return 0;
 }
+
+int
+SmackManager::AddPermissions(const char* pPackageId, const char** ppPermissions)
+{
+       int ret = 0;
+       void* pHandle = null;
+       char* pErrorMsg = null;
+       int (*app_add_permissions)(const char*, const char**) = null;
+
+       pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
+       if (!pHandle)
+       {
+               AppLog("AddPermissions(): dlopen() failed. [%s][%s]", pPackageId, dlerror());
+               return -1;
+       }
+
+       app_add_permissions = reinterpret_cast <int (*)(const char*, const char**)>(dlsym(pHandle, "app_add_permissions"));
+       pErrorMsg = dlerror();
+       if (pErrorMsg != null)
+       {
+               AppLog("AddPermissions(): dlsym() failed. [%s][%s]", pPackageId, pErrorMsg);
+               dlclose(pHandle);
+               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);
+
+       dlclose(pHandle);
+
+       return 0;
+}
index 48d6a4e..fc98633 100755 (executable)
@@ -34,19 +34,34 @@ public:
        virtual ~SmackManager(void);
        bool Construct(InstallationContext* pContext);
 
+       bool Install(const Tizen::App::PackageId& packageId);
+       bool Uninstall(const Tizen::App::PackageId& packageId);
+
        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);
+       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 RevokePermissions(const Tizen::App::PackageId& packageId);
 
 private:
        bool IsSmackEnable();
 
+       int Install(const char* pPackageId);
+       int Uninstall(const char* pPackageId);
+
        int AddLabelDir(const char* pLabel, const char* pDirPath);
        int AddLabelSharedDir(const char* pLabel, const char* pSharedLabel, const char* pDirPath);
-       int AddPermissions(const char* pPackageId, const char** ppPermissions);
+       int AddSharedDirReaders(const char* pSharedLabel, const char** ppAppList);
+       int AddFriend(const char* pPackageId1, const char* pPackageId2);
+
+       int EnablePermissions(const char* pPackageId, int appType, const char** ppPermissions, bool persistent);
        int RevokePermissions(const char* pPackageId);
 
+       // deprecated
+       int AddPermissions(const char* pPackageId, const char** ppPermissions);
+
 private:
        InstallationContext* __pContext;
        bool __isSmackEnable;