2 The functions to add a user profile.
\r
4 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
\r
5 This program and the accompanying materials
\r
6 are licensed and made available under the terms and conditions of the BSD License
\r
7 which accompanies this distribution. The full text of the license may be found at
\r
8 http://opensource.org/licenses/bsd-license.php
\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
\r
15 #include "UserProfileManager.h"
\r
19 Get user name from the popup windows.
\r
21 @param[in, out] UserNameLen On entry, point to UserName buffer lengh, in bytes.
\r
22 On exit, point to input user name length, in bytes.
\r
23 @param[out] UserName The buffer to hold the input user name.
\r
25 @retval EFI_ABORTED It is given up by pressing 'ESC' key.
\r
26 @retval EFI_NOT_READY Not a valid input at all.
\r
27 @retval EFI_SUCCESS Get a user name successfully.
\r
32 IN OUT UINTN *UserNameLen,
\r
33 OUT CHAR16 *UserName
\r
38 CHAR16 Name[USER_NAME_LENGTH];
\r
42 Name[NameLen] = L'_';
\r
43 Name[NameLen + 1] = L'\0';
\r
45 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
\r
48 L"---------------------",
\r
55 if (Key.ScanCode == SCAN_NULL) {
\r
56 if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
\r
58 // Add the null terminator.
\r
63 } else if ((Key.UnicodeChar == CHAR_NULL) ||
\r
64 (Key.UnicodeChar == CHAR_TAB) ||
\r
65 (Key.UnicodeChar == CHAR_LINEFEED)
\r
69 if (Key.UnicodeChar == CHAR_BACKSPACE) {
\r
74 Name[NameLen] = Key.UnicodeChar;
\r
76 if (NameLen + 1 == USER_NAME_LENGTH) {
\r
78 // Add the null terminator.
\r
88 if (Key.ScanCode == SCAN_ESC) {
\r
94 return EFI_NOT_READY;
\r
97 if (*UserNameLen < NameLen * sizeof (CHAR16)) {
\r
98 return EFI_NOT_READY;
\r
101 *UserNameLen = NameLen * sizeof (CHAR16);
\r
102 CopyMem (UserName, Name, *UserNameLen);
\r
104 return EFI_SUCCESS;
\r
108 Set a user's username.
\r
110 @param[in] User Handle of a user profile .
\r
111 @param[in] UserNameLen The lengh of UserName.
\r
112 @param[in] UserName Point to the buffer of user name.
\r
114 @retval EFI_NOT_READY The usernme in mAddUserName had been used.
\r
115 @retval EFI_SUCCESS Change the user's username successfully with
\r
116 username in mAddUserName.
\r
121 IN EFI_USER_PROFILE_HANDLE User,
\r
122 IN UINTN UserNameLen,
\r
123 IN CHAR16 *UserName
\r
127 EFI_USER_INFO_HANDLE UserInfo;
\r
128 EFI_USER_PROFILE_HANDLE TempUser;
\r
129 EFI_USER_INFO *NewUserInfo;
\r
131 NewUserInfo = AllocateZeroPool (sizeof (EFI_USER_INFO) + UserNameLen);
\r
132 ASSERT (NewUserInfo != NULL);
\r
134 NewUserInfo->InfoType = EFI_USER_INFO_NAME_RECORD;
\r
135 NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |
\r
136 EFI_USER_INFO_PUBLIC |
\r
137 EFI_USER_INFO_EXCLUSIVE;
\r
138 NewUserInfo->InfoSize = (UINT32) (sizeof (EFI_USER_INFO) + UserNameLen);
\r
139 CopyMem ((UINT8 *) (NewUserInfo + 1), UserName, UserNameLen);
\r
141 Status = mUserManager->Find (
\r
146 NewUserInfo->InfoSize
\r
148 if (!EFI_ERROR (Status)) {
\r
150 // The user name had been used, return error.
\r
152 FreePool (NewUserInfo);
\r
153 return EFI_NOT_READY;
\r
157 mUserManager->SetInfo (
\r
162 NewUserInfo->InfoSize
\r
164 FreePool (NewUserInfo);
\r
165 return EFI_SUCCESS;
\r
170 Set create date of the specified user.
\r
172 @param[in] User Handle of a user profile.
\r
177 IN EFI_USER_PROFILE_HANDLE User
\r
181 EFI_USER_INFO_HANDLE UserInfo;
\r
182 EFI_USER_INFO_CREATE_DATE Date;
\r
183 EFI_USER_INFO *NewUserInfo;
\r
185 NewUserInfo = AllocateZeroPool (
\r
186 sizeof (EFI_USER_INFO) +
\r
187 sizeof (EFI_USER_INFO_CREATE_DATE)
\r
189 ASSERT (NewUserInfo != NULL);
\r
191 NewUserInfo->InfoType = EFI_USER_INFO_CREATE_DATE_RECORD;
\r
192 NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |
\r
193 EFI_USER_INFO_PUBLIC |
\r
194 EFI_USER_INFO_EXCLUSIVE;
\r
195 NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + sizeof (EFI_USER_INFO_CREATE_DATE);
\r
196 Status = gRT->GetTime (&Date, NULL);
\r
197 if (EFI_ERROR (Status)) {
\r
198 FreePool (NewUserInfo);
\r
202 CopyMem ((UINT8 *) (NewUserInfo + 1), &Date, sizeof (EFI_USER_INFO_CREATE_DATE));
\r
204 mUserManager->SetInfo (
\r
209 NewUserInfo->InfoSize
\r
211 FreePool (NewUserInfo);
\r
216 Set the default identity policy of the specified user.
\r
218 @param[in] User Handle of a user profile.
\r
222 SetIdentityPolicy (
\r
223 IN EFI_USER_PROFILE_HANDLE User
\r
226 EFI_USER_INFO_IDENTITY_POLICY *Policy;
\r
227 EFI_USER_INFO_HANDLE UserInfo;
\r
228 EFI_USER_INFO *NewUserInfo;
\r
230 NewUserInfo = AllocateZeroPool (
\r
231 sizeof (EFI_USER_INFO) +
\r
232 sizeof (EFI_USER_INFO_IDENTITY_POLICY)
\r
234 ASSERT (NewUserInfo != NULL);
\r
236 Policy = (EFI_USER_INFO_IDENTITY_POLICY *) (NewUserInfo + 1);
\r
237 Policy->Type = EFI_USER_INFO_IDENTITY_TRUE;
\r
238 Policy->Length = sizeof (EFI_USER_INFO_IDENTITY_POLICY);
\r
240 NewUserInfo->InfoType = EFI_USER_INFO_IDENTITY_POLICY_RECORD;
\r
241 NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |
\r
242 EFI_USER_INFO_PUBLIC |
\r
243 EFI_USER_INFO_EXCLUSIVE;
\r
244 NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + Policy->Length;
\r
246 mUserManager->SetInfo (
\r
251 NewUserInfo->InfoSize
\r
253 FreePool (NewUserInfo);
\r
258 Set the default access policy of the specified user.
\r
260 @param[in] User Handle of a user profile.
\r
265 IN EFI_USER_PROFILE_HANDLE User
\r
268 EFI_USER_INFO_ACCESS_CONTROL *Control;
\r
269 EFI_USER_INFO_HANDLE UserInfo;
\r
270 EFI_USER_INFO *NewUserInfo;
\r
272 NewUserInfo = AllocateZeroPool (
\r
273 sizeof (EFI_USER_INFO) +
\r
274 sizeof (EFI_USER_INFO_ACCESS_CONTROL)
\r
276 ASSERT (NewUserInfo != NULL);
\r
278 Control = (EFI_USER_INFO_ACCESS_CONTROL *) (NewUserInfo + 1);
\r
279 Control->Type = EFI_USER_INFO_ACCESS_ENROLL_SELF;
\r
280 Control->Size = sizeof (EFI_USER_INFO_ACCESS_CONTROL);
\r
282 NewUserInfo->InfoType = EFI_USER_INFO_ACCESS_POLICY_RECORD;
\r
283 NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |
\r
284 EFI_USER_INFO_PUBLIC |
\r
285 EFI_USER_INFO_EXCLUSIVE;
\r
286 NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + Control->Size;
\r
288 mUserManager->SetInfo (
\r
293 NewUserInfo->InfoSize
\r
295 FreePool (NewUserInfo);
\r
300 Add a new user profile into the user profile database.
\r
310 EFI_USER_PROFILE_HANDLE User;
\r
312 CHAR16 UserName[USER_NAME_LENGTH];
\r
313 CHAR16 *QuestionStr;
\r
316 QuestionStr = NULL;
\r
320 // Get user name to add.
\r
322 UserNameLen = sizeof (UserName);
\r
323 Status = GetUserNameInput (&UserNameLen, UserName);
\r
324 if (EFI_ERROR (Status)) {
\r
325 if (Status != EFI_ABORTED) {
\r
326 QuestionStr = GetStringById (STRING_TOKEN (STR_GET_USERNAME_FAILED));
\r
327 PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));
\r
334 // Create a new user profile.
\r
337 Status = mUserManager->Create (mUserManager, &User);
\r
338 if (EFI_ERROR (Status)) {
\r
339 QuestionStr = GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_FAILED));
\r
340 PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));
\r
343 // Add default user information.
\r
345 Status = SetUserName (User, UserNameLen, UserName);
\r
346 if (EFI_ERROR (Status)) {
\r
347 QuestionStr = GetStringById (STRING_TOKEN (STR_USER_ALREADY_EXISTED));
\r
348 PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));
\r
352 SetCreateDate (User);
\r
353 SetIdentityPolicy (User);
\r
354 SetAccessPolicy (User);
\r
356 QuestionStr = GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_SUCCESS));
\r
357 PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));
\r
362 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
\r
369 FreePool (QuestionStr);
\r
370 FreePool (PromptStr);
\r