blob: 5a4d7ad0e67a1505cde5b22940a14f5b268d6e3c [file] [log] [blame]
Richard Marian Thomaiyar4654d992018-04-19 05:38:37 +05301/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
16
17#include "user_layer.hpp"
18
19#include "passwd_mgr.hpp"
Richard Marian Thomaiyar5a6b6362018-03-12 23:42:34 +053020#include "user_mgmt.hpp"
21
Richard Marian Thomaiyar4654d992018-04-19 05:38:37 +053022namespace
23{
24ipmi::PasswdMgr passwdMgr;
25}
26
27namespace ipmi
28{
Richard Marian Thomaiyar5a6b6362018-03-12 23:42:34 +053029
30ipmi_ret_t ipmiUserInit()
31{
32 getUserAccessObject();
33 return IPMI_CC_OK;
34}
35
Richard Marian Thomaiyar4654d992018-04-19 05:38:37 +053036std::string ipmiUserGetPassword(const std::string& userName)
37{
38 return passwdMgr.getPasswdByUserName(userName);
39}
40
Richard Marian Thomaiyar42bed642018-09-21 12:28:57 +053041ipmi_ret_t ipmiClearUserEntryPassword(const std::string& userName)
AppaRao Pulib29b5ab2018-05-17 10:28:48 +053042{
Richard Marian Thomaiyar42bed642018-09-21 12:28:57 +053043 if (passwdMgr.updateUserEntry(userName, "") != 0)
44 {
45 return IPMI_CC_UNSPECIFIED_ERROR;
46 }
47 return IPMI_CC_OK;
48}
49
50ipmi_ret_t ipmiRenameUserEntryPassword(const std::string& userName,
51 const std::string& newUserName)
52{
53 if (passwdMgr.updateUserEntry(userName, newUserName) != 0)
54 {
55 return IPMI_CC_UNSPECIFIED_ERROR;
56 }
AppaRao Pulib29b5ab2018-05-17 10:28:48 +053057 return IPMI_CC_OK;
58}
59
Richard Marian Thomaiyar5a6b6362018-03-12 23:42:34 +053060bool ipmiUserIsValidUserId(const uint8_t& userId)
61{
62 return UserAccess::isValidUserId(userId);
63}
64
65bool ipmiUserIsValidChannel(const uint8_t& chNum)
66{
67 return UserAccess::isValidChannel(chNum);
68}
69
70bool ipmiUserIsValidPrivilege(const uint8_t& priv)
71{
72 return UserAccess::isValidPrivilege(priv);
73}
74
75uint8_t ipmiUserGetUserId(const std::string& userName)
76{
77 return getUserAccessObject().getUserId(userName);
78}
79
80ipmi_ret_t ipmiUserSetUserName(const uint8_t& userId, const char* userName)
81{
82 return getUserAccessObject().setUserName(userId, userName);
83}
84
85ipmi_ret_t ipmiUserGetUserName(const uint8_t& userId, std::string& userName)
86{
87 return getUserAccessObject().getUserName(userId, userName);
88}
89
90ipmi_ret_t ipmiUserGetAllCounts(uint8_t& maxChUsers, uint8_t& enabledUsers,
91 uint8_t& fixedUsers)
92{
93 maxChUsers = ipmiMaxUsers;
94 UsersTbl* userData = getUserAccessObject().getUsersTblPtr();
95 enabledUsers = 0;
96 fixedUsers = 0;
97 // user index 0 is reserved, starts with 1
98 for (size_t count = 1; count <= ipmiMaxUsers; ++count)
99 {
100 if (userData->user[count].userEnabled)
101 {
102 enabledUsers++;
103 }
104 if (userData->user[count].fixedUserName)
105 {
106 fixedUsers++;
107 }
108 }
109 return IPMI_CC_OK;
110}
111
Richard Marian Thomaiyar282e79b2018-11-13 19:00:58 +0530112ipmi_ret_t ipmiUserUpdateEnabledState(const uint8_t& userId, const bool& state)
113{
114 return getUserAccessObject().setUserEnabledState(userId, state);
115}
116
Richard Marian Thomaiyar5a6b6362018-03-12 23:42:34 +0530117ipmi_ret_t ipmiUserCheckEnabled(const uint8_t& userId, bool& state)
118{
119 if (!UserAccess::isValidUserId(userId))
120 {
121 return IPMI_CC_PARM_OUT_OF_RANGE;
122 }
123 UserInfo* userInfo = getUserAccessObject().getUserInfo(userId);
124 state = userInfo->userEnabled;
125 return IPMI_CC_OK;
126}
127
128ipmi_ret_t ipmiUserGetPrivilegeAccess(const uint8_t& userId,
129 const uint8_t& chNum,
130 PrivAccess& privAccess)
131{
132
133 if (!UserAccess::isValidChannel(chNum))
134 {
135 return IPMI_CC_INVALID_FIELD_REQUEST;
136 }
137 if (!UserAccess::isValidUserId(userId))
138 {
139 return IPMI_CC_PARM_OUT_OF_RANGE;
140 }
141 UserInfo* userInfo = getUserAccessObject().getUserInfo(userId);
142 privAccess.privilege = userInfo->userPrivAccess[chNum].privilege;
143 privAccess.ipmiEnabled = userInfo->userPrivAccess[chNum].ipmiEnabled;
144 privAccess.linkAuthEnabled =
145 userInfo->userPrivAccess[chNum].linkAuthEnabled;
146 privAccess.accessCallback = userInfo->userPrivAccess[chNum].accessCallback;
147
148 return IPMI_CC_OK;
149}
150
151ipmi_ret_t ipmiUserSetPrivilegeAccess(const uint8_t& userId,
152 const uint8_t& chNum,
153 const PrivAccess& privAccess,
154 const bool& otherPrivUpdates)
155{
156 UserPrivAccess userPrivAccess;
157 userPrivAccess.privilege = privAccess.privilege;
158 if (otherPrivUpdates)
159 {
160 userPrivAccess.ipmiEnabled = privAccess.ipmiEnabled;
161 userPrivAccess.linkAuthEnabled = privAccess.linkAuthEnabled;
162 userPrivAccess.accessCallback = privAccess.accessCallback;
163 }
164 return getUserAccessObject().setUserPrivilegeAccess(
165 userId, chNum, userPrivAccess, otherPrivUpdates);
166}
167
Richard Marian Thomaiyar4654d992018-04-19 05:38:37 +0530168} // namespace ipmi