Remove CynaraAdmin singleton 68/91468/1
authorZbigniew Jasinski <z.jasinski@samsung.com>
Fri, 7 Oct 2016 16:36:53 +0000 (18:36 +0200)
committerZbigniew Jasinski <z.jasinski@samsung.com>
Fri, 7 Oct 2016 16:36:53 +0000 (18:36 +0200)
Change-Id: Ib13d1a8306f2abd8bcf40765185a079840edaf11
Signed-off-by: Zbigniew Jasinski <z.jasinski@samsung.com>
src/common/cynara.cpp
src/common/include/cynara.h
src/common/include/service_impl.h
src/common/service_impl.cpp

index f95602ef4fed228016b0b0aec4b98f103847fcb8..80317828124d1d1c2daa7bbf14a27a61c3a4fdb3 100644 (file)
@@ -267,12 +267,6 @@ CynaraAdmin::~CynaraAdmin()
     cynara_admin_finish(m_CynaraAdmin);
 }
 
-CynaraAdmin &CynaraAdmin::getInstance()
-{
-    static CynaraAdmin cynaraAdmin;
-    return cynaraAdmin;
-}
-
 void CynaraAdmin::SetPolicies(const std::vector<CynaraAdminPolicy> &policies)
 {
     if (policies.empty()) {
@@ -307,7 +301,7 @@ void CynaraAdmin::UpdateAppPolicy(
     const std::vector<std::string> &privileges,
     std::function <bool(const std::string &)> isPrivacy)
 {
-    auto calcPolicies = [&label](
+    auto calcPolicies = [&](
         const std::string &user,
         const std::vector<std::string> &privileges,
         const std::string &bucket,
@@ -317,7 +311,7 @@ void CynaraAdmin::UpdateAppPolicy(
         std::vector<CynaraAdminPolicy> oldPolicies;
         std::unordered_set<std::string> privilegesSet(privileges.begin(),
                                                       privileges.end());
-        CynaraAdmin::getInstance().ListPolicies(bucket, label, user,
+        ListPolicies(bucket, label, user,
                                                CYNARA_ADMIN_ANY, oldPolicies);
 
         // Compare previous policies with set of new requested privileges
@@ -382,7 +376,7 @@ void CynaraAdmin::GetAppPolicy(const std::string &label, const std::string &user
         std::vector<std::string> &privileges)
 {
     std::vector<CynaraAdminPolicy> policies;
-    CynaraAdmin::getInstance().ListPolicies(
+    ListPolicies(
         CynaraAdmin::Buckets.at(Bucket::MANIFESTS),
         label, user, CYNARA_ADMIN_ANY, policies);
 
@@ -434,7 +428,7 @@ void CynaraAdmin::UserInit(uid_t uid, security_manager_user_type userType,
         int askUserPolicy = convertToPolicyType(Config::PRIVACY_POLICY_DESC);
 
         std::vector<CynaraAdminPolicy> appPolicies;
-        CynaraAdmin::getInstance().ListPolicies(CynaraAdmin::Buckets.at(Bucket::MANIFESTS),
+        ListPolicies(CynaraAdmin::Buckets.at(Bucket::MANIFESTS),
                                                 CYNARA_ADMIN_ANY, CYNARA_ADMIN_WILDCARD,
                                                 CYNARA_ADMIN_ANY, appPolicies);
 
@@ -447,13 +441,13 @@ void CynaraAdmin::UserInit(uid_t uid, security_manager_user_type userType,
                 Buckets.at(Bucket::PRIVACY_MANAGER)));
     }
 
-    CynaraAdmin::getInstance().SetPolicies(policies);
+    SetPolicies(policies);
 }
 
 void CynaraAdmin::ListUsers(std::vector<uid_t> &listOfUsers)
 {
     std::vector<CynaraAdminPolicy> tmpListOfUsers;
-    CynaraAdmin::getInstance().ListPolicies(
+    ListPolicies(
         CynaraAdmin::Buckets.at(Bucket::MAIN),
         CYNARA_ADMIN_WILDCARD,
         CYNARA_ADMIN_ANY,
@@ -487,7 +481,7 @@ security_manager_user_type CynaraAdmin::GetUserType(uid_t uid)
 {
     std::string uidStr = std::to_string(uid);
     std::vector<CynaraAdminPolicy> tmpListOfUsers;
-    CynaraAdmin::getInstance().ListPolicies(
+    ListPolicies(
             CynaraAdmin::Buckets.at(Bucket::MAIN),
             CYNARA_ADMIN_WILDCARD,
             uidStr,
index 511813c832c1159671a1904a8631f89c0e130b54..48dcc4051dcc21d603c8daed5f10e68739da7fa2 100644 (file)
@@ -112,8 +112,7 @@ public:
     typedef  std::map<std::string, int> DescriptionToTypeMap;
 
     virtual ~CynaraAdmin();
-
-    static CynaraAdmin &getInstance();
+    CynaraAdmin();
 
     /**
      * Update Cynara policies.
@@ -290,8 +289,6 @@ public:
         const std::string &privilege);
 
 private:
-    CynaraAdmin();
-
     /**
      * Empty bucket using filter - matching rules will be removed
      *
index 5d13d664ba71bcd34247c27350616ba2c57a6e85..b30e9f90d085db9ba4da907f0608c71cc41fdb41 100644 (file)
@@ -299,6 +299,7 @@ private:
 
     Cynara m_cynara;
     PrivilegeDb m_priviligeDb;
+    CynaraAdmin m_cynaraAdmin;
 
 };
 
index c9ddd57fdc7e4694a50f05ce9e28bcf4d4906d85..d89d7d10d3597b7428c9b7390e30d35af3a8f01d 100644 (file)
@@ -129,7 +129,7 @@ int ServiceImpl::validatePolicy(policy_entry &policyEntry, std::string uidStr, b
             level = CYNARA_ADMIN_DELETE;
         } else {
             try {
-                level = CynaraAdmin::getInstance().convertToPolicyType(policyEntry.maxLevel);
+                level = m_cynaraAdmin.convertToPolicyType(policyEntry.maxLevel);
             } catch (const std::out_of_range& e) {
                 LogError("policy max level cannot be: " << policyEntry.maxLevel);
                 return SECURITY_MANAGER_ERROR_INPUT_PARAM;
@@ -151,7 +151,7 @@ int ServiceImpl::validatePolicy(policy_entry &policyEntry, std::string uidStr, b
             level = CYNARA_ADMIN_DELETE;
         } else {
             try {
-                level = CynaraAdmin::getInstance().convertToPolicyType(policyEntry.currentLevel);
+                level = m_cynaraAdmin.convertToPolicyType(policyEntry.currentLevel);
             } catch (const std::out_of_range& e) {
                 LogError("policy current level cannot be: " << policyEntry.currentLevel);
                 return SECURITY_MANAGER_ERROR_INPUT_PARAM;
@@ -537,7 +537,7 @@ int ServiceImpl::appInstall(const Credentials &creds, app_inst_req &&req)
         /* Get all application ids in the package to generate rules withing the package */
         getPkgLabels(req.pkgName, pkgLabels);
         m_priviligeDb.GetPkgAuthorId(req.pkgName, authorId);
-        CynaraAdmin::getInstance().UpdateAppPolicy(appLabel, cynaraUserStr, req.privileges, isPrivilegePrivacy);
+        m_cynaraAdmin.UpdateAppPolicy(appLabel, cynaraUserStr, req.privileges, isPrivilegePrivacy);
 
         if (hasSharedRO)
             m_priviligeDb.SetSharedROPackage(req.pkgName);
@@ -701,7 +701,7 @@ int ServiceImpl::appUninstall(const Credentials &creds, app_inst_req &&req)
         m_priviligeDb.GetPackagesInfo(pkgsInfo);
         getPkgsProcessLabels(pkgsInfo, pkgsProcessLabels);
 
-        CynaraAdmin::getInstance().UpdateAppPolicy(processLabel, cynaraUserStr,
+        m_cynaraAdmin.UpdateAppPolicy(processLabel, cynaraUserStr,
                                                    std::vector<std::string>(), isPrivilegePrivacy);
         m_priviligeDb.CommitTransaction();
         LogDebug("Application uninstallation commited to database");
@@ -809,8 +809,8 @@ int ServiceImpl::getAppGroups(const Credentials &creds, const std::string &appNa
         std::vector<std::string> privileges;
 
         std::string uidStr = std::to_string(creds.uid);
-        CynaraAdmin::getInstance().GetAppPolicy(appProcessLabel, uidStr, privileges);
-        CynaraAdmin::getInstance().GetAppPolicy(appProcessLabel, CYNARA_ADMIN_WILDCARD, privileges);
+        m_cynaraAdmin.GetAppPolicy(appProcessLabel, uidStr, privileges);
+        m_cynaraAdmin.GetAppPolicy(appProcessLabel, CYNARA_ADMIN_WILDCARD, privileges);
 
         vectorRemoveDuplicates(privileges);
 
@@ -856,7 +856,7 @@ int ServiceImpl::userAdd(const Credentials &creds, uid_t uidAdded, int userType)
         return SECURITY_MANAGER_ERROR_AUTHENTICATION_FAILED;
     }
     try {
-        CynaraAdmin::getInstance().UserInit(uidAdded, static_cast<security_manager_user_type>(userType), isPrivilegePrivacy);
+        m_cynaraAdmin.UserInit(uidAdded, static_cast<security_manager_user_type>(userType), isPrivilegePrivacy);
         PermissibleSet::initializeUserPermissibleFile(uidAdded);
     } catch (CynaraException::InvalidParam &e) {
         return SECURITY_MANAGER_ERROR_INPUT_PARAM;
@@ -909,7 +909,7 @@ int ServiceImpl::userDelete(const Credentials &creds, uid_t uidDeleted)
         }
     }
 
-    CynaraAdmin::getInstance().UserRemove(uidDeleted);
+    m_cynaraAdmin.UserRemove(uidDeleted);
 
     return ret;
 }
@@ -958,7 +958,7 @@ int ServiceImpl::policyUpdate(const Credentials &creds, const std::vector<policy
         }
 
         // Apply updates
-        CynaraAdmin::getInstance().SetPolicies(validatedPolicies);
+        m_cynaraAdmin.SetPolicies(validatedPolicies);
 
     } catch (const CynaraException::Base &e) {
         LogError("Error while updating Cynara rules: " << e.DumpToString());
@@ -1002,7 +1002,7 @@ int ServiceImpl::getConfiguredPolicy(const Credentials &creds, bool forAdmin,
             }
 
             //Fetch privileges from ADMIN bucket
-            CynaraAdmin::getInstance().ListPolicies(
+            m_cynaraAdmin.ListPolicies(
                 CynaraAdmin::Buckets.at(Bucket::ADMIN),
                 appProcessLabel,
                 user,
@@ -1023,7 +1023,7 @@ int ServiceImpl::getConfiguredPolicy(const Credentials &creds, bool forAdmin,
                 };
             };
             //Fetch privileges from PRIVACY_MANAGER bucket
-            CynaraAdmin::getInstance().ListPolicies(
+            m_cynaraAdmin.ListPolicies(
                 CynaraAdmin::Buckets.at(Bucket::PRIVACY_MANAGER),
                 appProcessLabel,
                 user,
@@ -1067,16 +1067,16 @@ int ServiceImpl::getConfiguredPolicy(const Credentials &creds, bool forAdmin,
                 pe.appName = app;
                 pe.user =  strcmp(policy.user, CYNARA_ADMIN_WILDCARD) ? policy.user : SECURITY_MANAGER_ANY;
                 pe.privilege = strcmp(policy.privilege, CYNARA_ADMIN_WILDCARD) ? policy.privilege : pe.privilege = SECURITY_MANAGER_ANY;
-                pe.currentLevel = CynaraAdmin::getInstance().convertToPolicyDescription(policy.result);
+                pe.currentLevel = m_cynaraAdmin.convertToPolicyDescription(policy.result);
 
                 if (!forAdmin) {
                     // All policy entries in PRIVACY_MANAGER should be fully-qualified
-                    pe.maxLevel = CynaraAdmin::getInstance().convertToPolicyDescription(
-                        CynaraAdmin::getInstance().GetPrivilegeManagerMaxLevel(
+                    pe.maxLevel = m_cynaraAdmin.convertToPolicyDescription(
+                        m_cynaraAdmin.GetPrivilegeManagerMaxLevel(
                             policy.client, policy.user, policy.privilege));
                 } else {
                     // Cannot reliably calculate maxLavel for policies from ADMIN bucket
-                    pe.maxLevel = CynaraAdmin::getInstance().convertToPolicyDescription(CYNARA_ADMIN_ALLOW);
+                    pe.maxLevel = m_cynaraAdmin.convertToPolicyDescription(CYNARA_ADMIN_ALLOW);
                 }
 
 
@@ -1138,7 +1138,7 @@ int ServiceImpl::getPolicy(const Credentials &creds, const policy_entry &filter,
                     LogError("Invalid UID: " << e.what());
                 };
             } else
-                CynaraAdmin::getInstance().ListUsers(listOfUsers);
+                m_cynaraAdmin.ListUsers(listOfUsers);
         } else {
             LogWarning("Not enough privilege to fetch user policy for all users by user: " << creds.uid);
             LogDebug("Fetching personal policy for user: " << creds.uid);
@@ -1164,8 +1164,8 @@ int ServiceImpl::getPolicy(const Credentials &creds, const policy_entry &filter,
                 std::string appProcessLabel = getAppProcessLabel(appName);
                 std::vector<std::string> listOfPrivileges;
 
-                CynaraAdmin::getInstance().GetAppPolicy(appProcessLabel, userStr, listOfPrivileges);
-                CynaraAdmin::getInstance().GetAppPolicy(appProcessLabel, CYNARA_ADMIN_WILDCARD, listOfPrivileges);
+                m_cynaraAdmin.GetAppPolicy(appProcessLabel, userStr, listOfPrivileges);
+                m_cynaraAdmin.GetAppPolicy(appProcessLabel, CYNARA_ADMIN_WILDCARD, listOfPrivileges);
 
                 if (filter.privilege.compare(SECURITY_MANAGER_ANY)) {
                     LogDebug("Limitting Cynara query to privilege: " << filter.privilege);
@@ -1190,12 +1190,12 @@ int ServiceImpl::getPolicy(const Credentials &creds, const policy_entry &filter,
                     pe.user = userStr;
                     pe.privilege = privilege;
 
-                    pe.currentLevel = CynaraAdmin::getInstance().convertToPolicyDescription(
-                        CynaraAdmin::getInstance().GetPrivilegeManagerCurrLevel(
+                    pe.currentLevel = m_cynaraAdmin.convertToPolicyDescription(
+                        m_cynaraAdmin.GetPrivilegeManagerCurrLevel(
                             appProcessLabel, userStr, privilege));
 
-                    pe.maxLevel = CynaraAdmin::getInstance().convertToPolicyDescription(
-                        CynaraAdmin::getInstance().GetPrivilegeManagerMaxLevel(
+                    pe.maxLevel = m_cynaraAdmin.convertToPolicyDescription(
+                        m_cynaraAdmin.GetPrivilegeManagerMaxLevel(
                             appProcessLabel, userStr, privilege));
 
                     LogDebug(
@@ -1233,7 +1233,7 @@ int ServiceImpl::policyGetDesc(std::vector<std::string> &levels)
     int ret = SECURITY_MANAGER_SUCCESS;
 
     try {
-        CynaraAdmin::getInstance().ListPoliciesDescriptions(levels);
+        m_cynaraAdmin.ListPoliciesDescriptions(levels);
     } catch (const CynaraException::OutOfMemory &e) {
         LogError("Error - out of memory while querying Cynara for policy descriptions list: " << e.DumpToString());
         return SECURITY_MANAGER_ERROR_MEMORY;
@@ -1270,7 +1270,7 @@ int ServiceImpl::policyGroupsForUid(uid_t uid, std::vector<std::string> &groups)
     int ret = SECURITY_MANAGER_SUCCESS;
 
     try {
-        auto userType = CynaraAdmin::getInstance().GetUserType(uid);
+        auto userType = m_cynaraAdmin.GetUserType(uid);
 
         if (userType == SM_USER_TYPE_NONE) {
             return SECURITY_MANAGER_ERROR_NO_SUCH_OBJECT;
@@ -1303,7 +1303,7 @@ int ServiceImpl::policyGroupsForUid(uid_t uid, std::vector<std::string> &groups)
         m_priviligeDb.GetGroupsRelatedPrivileges(group2privVector);
 
         for (const auto &g2p : group2privVector) {
-            CynaraAdmin::getInstance().Check(CYNARA_ADMIN_ANY, uidStr, g2p.second,
+            m_cynaraAdmin.Check(CYNARA_ADMIN_ANY, uidStr, g2p.second,
                                              bucket, result, resultExtra, true);
             if (result == CYNARA_ADMIN_ALLOW)
                 groups.push_back(g2p.first);