summaryrefslogtreecommitdiffstats
path: root/phosphor-ldap-mapper/ldap_mapper_mgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'phosphor-ldap-mapper/ldap_mapper_mgr.cpp')
-rw-r--r--phosphor-ldap-mapper/ldap_mapper_mgr.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/phosphor-ldap-mapper/ldap_mapper_mgr.cpp b/phosphor-ldap-mapper/ldap_mapper_mgr.cpp
new file mode 100644
index 0000000..9fe40ad
--- /dev/null
+++ b/phosphor-ldap-mapper/ldap_mapper_mgr.cpp
@@ -0,0 +1,88 @@
+#include <xyz/openbmc_project/Common/error.hpp>
+#include <xyz/openbmc_project/User/Common/error.hpp>
+#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog.hpp>
+#include <phosphor-logging/elog-errors.hpp>
+#include "config.h"
+#include "ldap_mapper_mgr.hpp"
+
+namespace phosphor
+{
+namespace user
+{
+
+using namespace phosphor::logging;
+using InvalidArgument =
+ sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
+using Argument = xyz::openbmc_project::Common::InvalidArgument;
+using PrivilegeMappingExists = sdbusplus::xyz::openbmc_project::User::Common::
+ Error::PrivilegeMappingExists;
+
+LDAPMapperMgr::LDAPMapperMgr(sdbusplus::bus::bus &bus, const char *path) :
+ MapperMgrIface(bus, path), bus(bus), path(path)
+{
+}
+
+ObjectPath LDAPMapperMgr::create(std::string groupName, std::string privilege)
+{
+ checkPrivilegeMapper(groupName);
+ checkPrivilegeLevel(privilege);
+
+ entryId++;
+
+ // Object path for the LDAP group privilege mapper entry
+ auto mapperObject =
+ std::string(mapperMgrRoot) + "/" + std::to_string(entryId);
+
+ // Create mapping for LDAP privilege mapper entry
+ auto entry = std::make_unique<phosphor::user::LDAPMapperEntry>(
+ bus, mapperObject.c_str(), groupName, privilege, *this);
+
+ PrivilegeMapperList.emplace(entryId, std::move(entry));
+
+ return mapperObject;
+}
+
+void LDAPMapperMgr::deletePrivilegeMapper(Id id)
+{
+ PrivilegeMapperList.erase(id);
+}
+
+void LDAPMapperMgr::checkPrivilegeMapper(const std::string &groupName)
+{
+ if (groupName.empty())
+ {
+ log<level::ERR>("Group name is empty");
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("Group name"),
+ Argument::ARGUMENT_VALUE("Null"));
+ }
+
+ for (const auto &val : PrivilegeMapperList)
+ {
+ if (val.second.get()->groupName() == groupName)
+ {
+ log<level::ERR>("Group name already exists");
+ elog<PrivilegeMappingExists>();
+ }
+ }
+}
+
+void LDAPMapperMgr::checkPrivilegeLevel(const std::string &privilege)
+{
+ if (privilege.empty())
+ {
+ log<level::ERR>("Privilege level is empty");
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("Privilege level"),
+ Argument::ARGUMENT_VALUE("Null"));
+ }
+
+ if (std::find(privMgr.begin(), privMgr.end(), privilege) == privMgr.end())
+ {
+ log<level::ERR>("Invalid privilege");
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("Privilege level"),
+ Argument::ARGUMENT_VALUE(privilege.c_str()));
+ }
+}
+
+} // namespace user
+} // namespace phosphor
OpenPOWER on IntegriCloud