+++ /dev/null
-/** @file\r
- The functions to add a user profile.\r
-\r
-Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "UserProfileManager.h"\r
-\r
-\r
-/**\r
- Get user name from the popup windows.\r
-\r
- @param[in, out] UserNameLen On entry, point to UserName buffer lengh, in bytes.\r
- On exit, point to input user name length, in bytes.\r
- @param[out] UserName The buffer to hold the input user name.\r
-\r
- @retval EFI_ABORTED It is given up by pressing 'ESC' key.\r
- @retval EFI_NOT_READY Not a valid input at all.\r
- @retval EFI_SUCCESS Get a user name successfully.\r
-\r
-**/\r
-EFI_STATUS\r
-GetUserNameInput (\r
- IN OUT UINTN *UserNameLen,\r
- OUT CHAR16 *UserName\r
- )\r
-{\r
- EFI_INPUT_KEY Key;\r
- UINTN NameLen;\r
- CHAR16 Name[USER_NAME_LENGTH];\r
-\r
- NameLen = 0;\r
- while (TRUE) {\r
- Name[NameLen] = L'_';\r
- Name[NameLen + 1] = L'\0';\r
- CreatePopUp (\r
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
- &Key,\r
- L"Input User Name",\r
- L"---------------------",\r
- Name,\r
- NULL\r
- );\r
- //\r
- // Check key.\r
- //\r
- if (Key.ScanCode == SCAN_NULL) {\r
- if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
- //\r
- // Add the null terminator.\r
- //\r
- Name[NameLen] = 0;\r
- NameLen++;\r
- break;\r
- } else if ((Key.UnicodeChar == CHAR_NULL) ||\r
- (Key.UnicodeChar == CHAR_TAB) ||\r
- (Key.UnicodeChar == CHAR_LINEFEED)\r
- ) {\r
- continue;\r
- } else {\r
- if (Key.UnicodeChar == CHAR_BACKSPACE) {\r
- if (NameLen > 0) {\r
- NameLen--;\r
- }\r
- } else {\r
- Name[NameLen] = Key.UnicodeChar;\r
- NameLen++;\r
- if (NameLen + 1 == USER_NAME_LENGTH) {\r
- //\r
- // Add the null terminator.\r
- //\r
- Name[NameLen] = 0;\r
- NameLen++;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
-\r
- if (Key.ScanCode == SCAN_ESC) {\r
- return EFI_ABORTED;\r
- }\r
- }\r
-\r
- if (NameLen <= 1) {\r
- return EFI_NOT_READY;\r
- }\r
-\r
- if (*UserNameLen < NameLen * sizeof (CHAR16)) {\r
- return EFI_NOT_READY;\r
- }\r
-\r
- *UserNameLen = NameLen * sizeof (CHAR16);\r
- CopyMem (UserName, Name, *UserNameLen);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Set a user's username.\r
-\r
- @param[in] User Handle of a user profile .\r
- @param[in] UserNameLen The lengh of UserName.\r
- @param[in] UserName Point to the buffer of user name.\r
-\r
- @retval EFI_NOT_READY The usernme in mAddUserName had been used.\r
- @retval EFI_SUCCESS Change the user's username successfully with\r
- username in mAddUserName.\r
-\r
-**/\r
-EFI_STATUS\r
-SetUserName (\r
- IN EFI_USER_PROFILE_HANDLE User,\r
- IN UINTN UserNameLen,\r
- IN CHAR16 *UserName\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_USER_INFO_HANDLE UserInfo;\r
- EFI_USER_PROFILE_HANDLE TempUser;\r
- EFI_USER_INFO *NewUserInfo;\r
-\r
- NewUserInfo = AllocateZeroPool (sizeof (EFI_USER_INFO) + UserNameLen);\r
- ASSERT (NewUserInfo != NULL);\r
-\r
- NewUserInfo->InfoType = EFI_USER_INFO_NAME_RECORD;\r
- NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |\r
- EFI_USER_INFO_PUBLIC |\r
- EFI_USER_INFO_EXCLUSIVE;\r
- NewUserInfo->InfoSize = (UINT32) (sizeof (EFI_USER_INFO) + UserNameLen);\r
- CopyMem ((UINT8 *) (NewUserInfo + 1), UserName, UserNameLen);\r
- TempUser = NULL;\r
- Status = mUserManager->Find (\r
- mUserManager,\r
- &TempUser,\r
- NULL,\r
- NewUserInfo,\r
- NewUserInfo->InfoSize\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- //\r
- // The user name had been used, return error.\r
- //\r
- FreePool (NewUserInfo);\r
- return EFI_NOT_READY;\r
- }\r
-\r
- UserInfo = NULL;\r
- mUserManager->SetInfo (\r
- mUserManager,\r
- User,\r
- &UserInfo,\r
- NewUserInfo,\r
- NewUserInfo->InfoSize\r
- );\r
- FreePool (NewUserInfo);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Set create date of the specified user.\r
-\r
- @param[in] User Handle of a user profile.\r
-\r
-**/\r
-VOID\r
-SetCreateDate (\r
- IN EFI_USER_PROFILE_HANDLE User\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_USER_INFO_HANDLE UserInfo;\r
- EFI_USER_INFO_CREATE_DATE Date;\r
- EFI_USER_INFO *NewUserInfo;\r
-\r
- NewUserInfo = AllocateZeroPool (\r
- sizeof (EFI_USER_INFO) +\r
- sizeof (EFI_USER_INFO_CREATE_DATE)\r
- );\r
- ASSERT (NewUserInfo != NULL);\r
-\r
- NewUserInfo->InfoType = EFI_USER_INFO_CREATE_DATE_RECORD;\r
- NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |\r
- EFI_USER_INFO_PUBLIC |\r
- EFI_USER_INFO_EXCLUSIVE;\r
- NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + sizeof (EFI_USER_INFO_CREATE_DATE);\r
- Status = gRT->GetTime (&Date, NULL);\r
- if (EFI_ERROR (Status)) {\r
- FreePool (NewUserInfo);\r
- return ;\r
- }\r
-\r
- CopyMem ((UINT8 *) (NewUserInfo + 1), &Date, sizeof (EFI_USER_INFO_CREATE_DATE));\r
- UserInfo = NULL;\r
- mUserManager->SetInfo (\r
- mUserManager,\r
- User,\r
- &UserInfo,\r
- NewUserInfo,\r
- NewUserInfo->InfoSize\r
- );\r
- FreePool (NewUserInfo);\r
-}\r
-\r
-\r
-/**\r
- Set the default identity policy of the specified user.\r
-\r
- @param[in] User Handle of a user profile.\r
-\r
-**/\r
-VOID\r
-SetIdentityPolicy (\r
- IN EFI_USER_PROFILE_HANDLE User\r
- )\r
-{\r
- EFI_USER_INFO_IDENTITY_POLICY *Policy;\r
- EFI_USER_INFO_HANDLE UserInfo;\r
- EFI_USER_INFO *NewUserInfo;\r
-\r
- NewUserInfo = AllocateZeroPool (\r
- sizeof (EFI_USER_INFO) +\r
- sizeof (EFI_USER_INFO_IDENTITY_POLICY)\r
- );\r
- ASSERT (NewUserInfo != NULL);\r
-\r
- Policy = (EFI_USER_INFO_IDENTITY_POLICY *) (NewUserInfo + 1);\r
- Policy->Type = EFI_USER_INFO_IDENTITY_TRUE;\r
- Policy->Length = sizeof (EFI_USER_INFO_IDENTITY_POLICY);\r
-\r
- NewUserInfo->InfoType = EFI_USER_INFO_IDENTITY_POLICY_RECORD;\r
- NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |\r
- EFI_USER_INFO_PUBLIC |\r
- EFI_USER_INFO_EXCLUSIVE;\r
- NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + Policy->Length;\r
- UserInfo = NULL;\r
- mUserManager->SetInfo (\r
- mUserManager,\r
- User,\r
- &UserInfo,\r
- NewUserInfo,\r
- NewUserInfo->InfoSize\r
- );\r
- FreePool (NewUserInfo);\r
-}\r
-\r
-\r
-/**\r
- Set the default access policy of the specified user.\r
-\r
- @param[in] User Handle of a user profile.\r
-\r
-**/\r
-VOID\r
-SetAccessPolicy (\r
- IN EFI_USER_PROFILE_HANDLE User\r
- )\r
-{\r
- EFI_USER_INFO_ACCESS_CONTROL *Control;\r
- EFI_USER_INFO_HANDLE UserInfo;\r
- EFI_USER_INFO *NewUserInfo;\r
-\r
- NewUserInfo = AllocateZeroPool (\r
- sizeof (EFI_USER_INFO) +\r
- sizeof (EFI_USER_INFO_ACCESS_CONTROL)\r
- );\r
- ASSERT (NewUserInfo != NULL);\r
-\r
- Control = (EFI_USER_INFO_ACCESS_CONTROL *) (NewUserInfo + 1);\r
- Control->Type = EFI_USER_INFO_ACCESS_ENROLL_SELF;\r
- Control->Size = sizeof (EFI_USER_INFO_ACCESS_CONTROL);\r
-\r
- NewUserInfo->InfoType = EFI_USER_INFO_ACCESS_POLICY_RECORD;\r
- NewUserInfo->InfoAttribs = EFI_USER_INFO_STORAGE_PLATFORM_NV |\r
- EFI_USER_INFO_PUBLIC |\r
- EFI_USER_INFO_EXCLUSIVE;\r
- NewUserInfo->InfoSize = sizeof (EFI_USER_INFO) + Control->Size;\r
- UserInfo = NULL;\r
- mUserManager->SetInfo (\r
- mUserManager,\r
- User,\r
- &UserInfo,\r
- NewUserInfo,\r
- NewUserInfo->InfoSize\r
- );\r
- FreePool (NewUserInfo);\r
-}\r
-\r
-\r
-/**\r
- Add a new user profile into the user profile database.\r
-\r
-**/\r
-VOID\r
-CallAddUser (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_INPUT_KEY Key;\r
- EFI_USER_PROFILE_HANDLE User;\r
- UINTN UserNameLen;\r
- CHAR16 UserName[USER_NAME_LENGTH];\r
- CHAR16 *QuestionStr;\r
- CHAR16 *PromptStr;\r
-\r
- QuestionStr = NULL;\r
- PromptStr = NULL;\r
-\r
- //\r
- // Get user name to add.\r
- //\r
- UserNameLen = sizeof (UserName);\r
- Status = GetUserNameInput (&UserNameLen, UserName);\r
- if (EFI_ERROR (Status)) {\r
- if (Status != EFI_ABORTED) {\r
- QuestionStr = GetStringById (STRING_TOKEN (STR_GET_USERNAME_FAILED));\r
- PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));\r
- goto Done;\r
- }\r
- return ;\r
- }\r
-\r
- //\r
- // Create a new user profile.\r
- //\r
- User = NULL;\r
- Status = mUserManager->Create (mUserManager, &User);\r
- if (EFI_ERROR (Status)) {\r
- QuestionStr = GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_FAILED));\r
- PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));\r
- } else {\r
- //\r
- // Add default user information.\r
- //\r
- Status = SetUserName (User, UserNameLen, UserName);\r
- if (EFI_ERROR (Status)) {\r
- QuestionStr = GetStringById (STRING_TOKEN (STR_USER_ALREADY_EXISTED));\r
- PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));\r
- goto Done;\r
- }\r
-\r
- SetCreateDate (User);\r
- SetIdentityPolicy (User);\r
- SetAccessPolicy (User);\r
-\r
- QuestionStr = GetStringById (STRING_TOKEN (STR_CREATE_PROFILE_SUCCESS));\r
- PromptStr = GetStringById (STRING_TOKEN (STR_STROKE_KEY_CONTINUE));\r
- }\r
-\r
-Done:\r
- CreatePopUp (\r
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
- &Key,\r
- QuestionStr,\r
- L"",\r
- PromptStr,\r
- NULL\r
- );\r
- FreePool (QuestionStr);\r
- FreePool (PromptStr);\r
-}\r
-\r