summaryrefslogtreecommitdiffstats
path: root/user_channel/user_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'user_channel/user_layer.cpp')
-rw-r--r--user_channel/user_layer.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/user_channel/user_layer.cpp b/user_channel/user_layer.cpp
index 06cdd68..3e4490c 100644
--- a/user_channel/user_layer.cpp
+++ b/user_channel/user_layer.cpp
@@ -17,6 +17,8 @@
#include "user_layer.hpp"
#include "passwd_mgr.hpp"
+#include "user_mgmt.hpp"
+
namespace
{
ipmi::PasswdMgr passwdMgr;
@@ -24,6 +26,13 @@ ipmi::PasswdMgr passwdMgr;
namespace ipmi
{
+
+ipmi_ret_t ipmiUserInit()
+{
+ getUserAccessObject();
+ return IPMI_CC_OK;
+}
+
std::string ipmiUserGetPassword(const std::string& userName)
{
return passwdMgr.getPasswdByUserName(userName);
@@ -48,4 +57,107 @@ ipmi_ret_t ipmiRenameUserEntryPassword(const std::string& userName,
return IPMI_CC_OK;
}
+bool ipmiUserIsValidUserId(const uint8_t& userId)
+{
+ return UserAccess::isValidUserId(userId);
+}
+
+bool ipmiUserIsValidChannel(const uint8_t& chNum)
+{
+ return UserAccess::isValidChannel(chNum);
+}
+
+bool ipmiUserIsValidPrivilege(const uint8_t& priv)
+{
+ return UserAccess::isValidPrivilege(priv);
+}
+
+uint8_t ipmiUserGetUserId(const std::string& userName)
+{
+ return getUserAccessObject().getUserId(userName);
+}
+
+ipmi_ret_t ipmiUserSetUserName(const uint8_t& userId, const char* userName)
+{
+ return getUserAccessObject().setUserName(userId, userName);
+}
+
+ipmi_ret_t ipmiUserGetUserName(const uint8_t& userId, std::string& userName)
+{
+ return getUserAccessObject().getUserName(userId, userName);
+}
+
+ipmi_ret_t ipmiUserGetAllCounts(uint8_t& maxChUsers, uint8_t& enabledUsers,
+ uint8_t& fixedUsers)
+{
+ maxChUsers = ipmiMaxUsers;
+ UsersTbl* userData = getUserAccessObject().getUsersTblPtr();
+ enabledUsers = 0;
+ fixedUsers = 0;
+ // user index 0 is reserved, starts with 1
+ for (size_t count = 1; count <= ipmiMaxUsers; ++count)
+ {
+ if (userData->user[count].userEnabled)
+ {
+ enabledUsers++;
+ }
+ if (userData->user[count].fixedUserName)
+ {
+ fixedUsers++;
+ }
+ }
+ return IPMI_CC_OK;
+}
+
+ipmi_ret_t ipmiUserCheckEnabled(const uint8_t& userId, bool& state)
+{
+ if (!UserAccess::isValidUserId(userId))
+ {
+ return IPMI_CC_PARM_OUT_OF_RANGE;
+ }
+ UserInfo* userInfo = getUserAccessObject().getUserInfo(userId);
+ state = userInfo->userEnabled;
+ return IPMI_CC_OK;
+}
+
+ipmi_ret_t ipmiUserGetPrivilegeAccess(const uint8_t& userId,
+ const uint8_t& chNum,
+ PrivAccess& privAccess)
+{
+
+ if (!UserAccess::isValidChannel(chNum))
+ {
+ return IPMI_CC_INVALID_FIELD_REQUEST;
+ }
+ if (!UserAccess::isValidUserId(userId))
+ {
+ return IPMI_CC_PARM_OUT_OF_RANGE;
+ }
+ UserInfo* userInfo = getUserAccessObject().getUserInfo(userId);
+ privAccess.privilege = userInfo->userPrivAccess[chNum].privilege;
+ privAccess.ipmiEnabled = userInfo->userPrivAccess[chNum].ipmiEnabled;
+ privAccess.linkAuthEnabled =
+ userInfo->userPrivAccess[chNum].linkAuthEnabled;
+ privAccess.accessCallback = userInfo->userPrivAccess[chNum].accessCallback;
+
+ return IPMI_CC_OK;
+}
+
+ipmi_ret_t ipmiUserSetPrivilegeAccess(const uint8_t& userId,
+ const uint8_t& chNum,
+ const PrivAccess& privAccess,
+ const bool& otherPrivUpdates)
+{
+ UserPrivAccess userPrivAccess;
+ userPrivAccess.privilege = privAccess.privilege;
+ if (otherPrivUpdates)
+ {
+ userPrivAccess.ipmiEnabled = privAccess.ipmiEnabled;
+ userPrivAccess.linkAuthEnabled = privAccess.linkAuthEnabled;
+ userPrivAccess.accessCallback = privAccess.accessCallback;
+ }
+ return getUserAccessObject().setUserPrivilegeAccess(
+ userId, chNum, userPrivAccess, otherPrivUpdates);
+}
+
} // namespace ipmi
OpenPOWER on IntegriCloud