MdeModulePkg/DriverSample: Remove the password related codes
In current DriverSampleDxe, the sample code of password is not a good example, so we plan to remove it. Cc: Liming Gao <liming.gao@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -261,233 +261,6 @@ InternalStopMonitor(
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Encode the password using a simple algorithm.
|
|
||||||
|
|
||||||
@param Password The string to be encoded.
|
|
||||||
@param MaxSize The size of the string.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
EncodePassword (
|
|
||||||
IN CHAR16 *Password,
|
|
||||||
IN UINTN MaxSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Index;
|
|
||||||
UINTN Loop;
|
|
||||||
CHAR16 *Buffer;
|
|
||||||
CHAR16 *Key;
|
|
||||||
|
|
||||||
Key = L"MAR10648567";
|
|
||||||
Buffer = AllocateZeroPool (MaxSize);
|
|
||||||
ASSERT (Buffer != NULL);
|
|
||||||
|
|
||||||
for (Index = 0; Key[Index] != 0; Index++) {
|
|
||||||
for (Loop = 0; Loop < (UINT8) (MaxSize / 2); Loop++) {
|
|
||||||
Buffer[Loop] = (CHAR16) (Password[Loop] ^ Key[Index]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CopyMem (Password, Buffer, MaxSize);
|
|
||||||
|
|
||||||
FreePool (Buffer);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Validate the user's password.
|
|
||||||
|
|
||||||
@param PrivateData This driver's private context data.
|
|
||||||
@param StringId The user's input.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The user's input matches the password.
|
|
||||||
@retval EFI_NOT_READY The user's input does not match the password.
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
ValidatePassword (
|
|
||||||
IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData,
|
|
||||||
IN EFI_STRING_ID StringId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
UINTN Index;
|
|
||||||
UINTN BufferSize;
|
|
||||||
UINTN PasswordMaxSize;
|
|
||||||
CHAR16 *Password;
|
|
||||||
CHAR16 *EncodedPassword;
|
|
||||||
BOOLEAN OldPassword;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get encoded password first
|
|
||||||
//
|
|
||||||
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);
|
|
||||||
Status = gRT->GetVariable (
|
|
||||||
VariableName,
|
|
||||||
&gDriverSampleFormSetGuid,
|
|
||||||
NULL,
|
|
||||||
&BufferSize,
|
|
||||||
&PrivateData->Configuration
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
//
|
|
||||||
// Old password not exist, prompt for new password
|
|
||||||
//
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
OldPassword = FALSE;
|
|
||||||
PasswordMaxSize = sizeof (PrivateData->Configuration.WhatIsThePassword2);
|
|
||||||
//
|
|
||||||
// Check whether we have any old password set
|
|
||||||
//
|
|
||||||
for (Index = 0; Index < PasswordMaxSize / sizeof (UINT16); Index++) {
|
|
||||||
if (PrivateData->Configuration.WhatIsThePassword2[Index] != 0) {
|
|
||||||
OldPassword = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!OldPassword) {
|
|
||||||
//
|
|
||||||
// Old password not exist, return EFI_SUCCESS to prompt for new password
|
|
||||||
//
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get user input password
|
|
||||||
//
|
|
||||||
Password = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);
|
|
||||||
if (Password == NULL) {
|
|
||||||
return EFI_NOT_READY;
|
|
||||||
}
|
|
||||||
if (StrSize (Password) > PasswordMaxSize) {
|
|
||||||
FreePool (Password);
|
|
||||||
return EFI_NOT_READY;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Validate old password
|
|
||||||
//
|
|
||||||
EncodedPassword = AllocateZeroPool (PasswordMaxSize);
|
|
||||||
ASSERT (EncodedPassword != NULL);
|
|
||||||
StrnCpyS (EncodedPassword, PasswordMaxSize / sizeof (CHAR16), Password, StrLen (Password));
|
|
||||||
EncodePassword (EncodedPassword, StrLen (EncodedPassword) * sizeof (CHAR16));
|
|
||||||
if (CompareMem (EncodedPassword, PrivateData->Configuration.WhatIsThePassword2, PasswordMaxSize) != 0) {
|
|
||||||
//
|
|
||||||
// Old password mismatch, return EFI_NOT_READY to prompt for error message
|
|
||||||
//
|
|
||||||
Status = EFI_NOT_READY;
|
|
||||||
} else {
|
|
||||||
Status = EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (Password);
|
|
||||||
FreePool (EncodedPassword);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Encode the password using a simple algorithm.
|
|
||||||
|
|
||||||
@param PrivateData This driver's private context data.
|
|
||||||
@param StringId The password from User.
|
|
||||||
|
|
||||||
@retval EFI_SUCESS The operation is successful.
|
|
||||||
@return Other value if gRT->SetVariable () fails.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
SetPassword (
|
|
||||||
IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData,
|
|
||||||
IN EFI_STRING_ID StringId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
CHAR16 *Password;
|
|
||||||
CHAR16 *TempPassword;
|
|
||||||
UINTN PasswordSize;
|
|
||||||
DRIVER_SAMPLE_CONFIGURATION *Configuration;
|
|
||||||
UINTN BufferSize;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get Buffer Storage data from EFI variable
|
|
||||||
//
|
|
||||||
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);
|
|
||||||
Status = gRT->GetVariable (
|
|
||||||
VariableName,
|
|
||||||
&gDriverSampleFormSetGuid,
|
|
||||||
NULL,
|
|
||||||
&BufferSize,
|
|
||||||
&PrivateData->Configuration
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get user input password
|
|
||||||
//
|
|
||||||
Password = PrivateData->Configuration.WhatIsThePassword2;
|
|
||||||
PasswordSize = sizeof (PrivateData->Configuration.WhatIsThePassword2);
|
|
||||||
ZeroMem (Password, PasswordSize);
|
|
||||||
|
|
||||||
TempPassword = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);
|
|
||||||
if (TempPassword == NULL) {
|
|
||||||
return EFI_NOT_READY;
|
|
||||||
}
|
|
||||||
if (StrSize (TempPassword) > PasswordSize) {
|
|
||||||
FreePool (TempPassword);
|
|
||||||
return EFI_NOT_READY;
|
|
||||||
}
|
|
||||||
StrnCpyS (Password, PasswordSize / sizeof (CHAR16), TempPassword, StrLen (TempPassword));
|
|
||||||
FreePool (TempPassword);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve uncommitted data from Browser
|
|
||||||
//
|
|
||||||
Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_CONFIGURATION));
|
|
||||||
ASSERT (Configuration != NULL);
|
|
||||||
if (HiiGetBrowserData (&gDriverSampleFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration)) {
|
|
||||||
//
|
|
||||||
// Update password's clear text in the screen
|
|
||||||
//
|
|
||||||
CopyMem (Configuration->PasswordClearText, Password, StrSize (Password));
|
|
||||||
|
|
||||||
//
|
|
||||||
// Update uncommitted data of Browser
|
|
||||||
//
|
|
||||||
HiiSetBrowserData (
|
|
||||||
&gDriverSampleFormSetGuid,
|
|
||||||
VariableName,
|
|
||||||
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
|
||||||
(UINT8 *) Configuration,
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Free Configuration Buffer
|
|
||||||
//
|
|
||||||
FreePool (Configuration);
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Set password
|
|
||||||
//
|
|
||||||
EncodePassword (Password, StrLen (Password) * 2);
|
|
||||||
Status = gRT->SetVariable(
|
|
||||||
VariableName,
|
|
||||||
&gDriverSampleFormSetGuid,
|
|
||||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
|
||||||
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
|
||||||
&PrivateData->Configuration
|
|
||||||
);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Update names of Name/Value storage to current language.
|
Update names of Name/Value storage to current language.
|
||||||
|
|
||||||
@ -1728,40 +1501,6 @@ DriverCallback (
|
|||||||
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x2000:
|
|
||||||
//
|
|
||||||
// Only used to update the state.
|
|
||||||
//
|
|
||||||
if ((Type == EFI_IFR_TYPE_STRING) && (Value->string == 0) &&
|
|
||||||
(PrivateData->PasswordState == BROWSER_STATE_SET_PASSWORD)) {
|
|
||||||
PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;
|
|
||||||
return EFI_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// When try to set a new password, user will be chanlleged with old password.
|
|
||||||
// The Callback is responsible for validating old password input by user,
|
|
||||||
// If Callback return EFI_SUCCESS, it indicates validation pass.
|
|
||||||
//
|
|
||||||
switch (PrivateData->PasswordState) {
|
|
||||||
case BROWSER_STATE_VALIDATE_PASSWORD:
|
|
||||||
Status = ValidatePassword (PrivateData, Value->string);
|
|
||||||
if (Status == EFI_SUCCESS) {
|
|
||||||
PrivateData->PasswordState = BROWSER_STATE_SET_PASSWORD;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BROWSER_STATE_SET_PASSWORD:
|
|
||||||
Status = SetPassword (PrivateData, Value->string);
|
|
||||||
PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1983,7 +1722,6 @@ DriverSampleInit (
|
|||||||
mPrivateData->ConfigAccess.ExtractConfig = ExtractConfig;
|
mPrivateData->ConfigAccess.ExtractConfig = ExtractConfig;
|
||||||
mPrivateData->ConfigAccess.RouteConfig = RouteConfig;
|
mPrivateData->ConfigAccess.RouteConfig = RouteConfig;
|
||||||
mPrivateData->ConfigAccess.Callback = DriverCallback;
|
mPrivateData->ConfigAccess.Callback = DriverCallback;
|
||||||
mPrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Locate Hii Database protocol
|
// Locate Hii Database protocol
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/** @file
|
/** @file
|
||||||
|
|
||||||
Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -84,7 +84,6 @@ typedef struct {
|
|||||||
EFI_HII_HANDLE HiiHandle[2];
|
EFI_HII_HANDLE HiiHandle[2];
|
||||||
DRIVER_SAMPLE_CONFIGURATION Configuration;
|
DRIVER_SAMPLE_CONFIGURATION Configuration;
|
||||||
MY_EFI_VARSTORE_DATA VarStoreConfig;
|
MY_EFI_VARSTORE_DATA VarStoreConfig;
|
||||||
UINT8 PasswordState;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Name/Value storage Name list
|
// Name/Value storage Name list
|
||||||
|
@ -34,9 +34,7 @@ Revision History:
|
|||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT16 WhatIsThePassword2[20];
|
|
||||||
UINT16 MyStringData[40];
|
UINT16 MyStringData[40];
|
||||||
UINT16 PasswordClearText[20];
|
|
||||||
UINT16 SomethingHiddenForHtml;
|
UINT16 SomethingHiddenForHtml;
|
||||||
UINT8 HowOldAreYouInYearsManual;
|
UINT8 HowOldAreYouInYearsManual;
|
||||||
UINT16 HowTallAreYouManual;
|
UINT16 HowTallAreYouManual;
|
||||||
|
@ -458,26 +458,6 @@ formset
|
|||||||
help = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_HELP),
|
help = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_HELP),
|
||||||
endresetbutton;
|
endresetbutton;
|
||||||
|
|
||||||
string varid = MyIfrNVData.PasswordClearText,
|
|
||||||
prompt = STRING_TOKEN(STR_MY_STRING_PROMPT),
|
|
||||||
help = STRING_TOKEN(STR_MY_STRING_HELP),
|
|
||||||
minsize = 6,
|
|
||||||
maxsize = 0x14,
|
|
||||||
default = STRING_TOKEN(STR_MY_STRING_DEFAULT),
|
|
||||||
endstring;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Interactive password, validate via ConfigAccess.Callback()
|
|
||||||
//
|
|
||||||
password varid = MyIfrNVData.WhatIsThePassword2,
|
|
||||||
prompt = STRING_TOKEN(STR_PASSWORD_CALLBACK_PROMPT),
|
|
||||||
help = STRING_TOKEN(STR_PASSWORD_HELP),
|
|
||||||
flags = INTERACTIVE,
|
|
||||||
key = 0x2000,
|
|
||||||
minsize = 6,
|
|
||||||
maxsize = 20,
|
|
||||||
endpassword;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Sample use case for IFR Security op-code
|
// Sample use case for IFR Security op-code
|
||||||
//
|
//
|
||||||
|
@ -111,12 +111,8 @@
|
|||||||
#string STR_NUMERIC_HELP3 #language en-US "This is the help for those who are curious about body height. Type how tall you are in a numeric value. The valid range in this case is from 0 to 190. Let's see if you actually read this help and figure that out."
|
#string STR_NUMERIC_HELP3 #language en-US "This is the help for those who are curious about body height. Type how tall you are in a numeric value. The valid range in this case is from 0 to 190. Let's see if you actually read this help and figure that out."
|
||||||
#language fr-FR "Ésta es la ayuda para los que sean demasiado viejos entender la pregunta. Pulse cómo es viejo usted está en años."
|
#language fr-FR "Ésta es la ayuda para los que sean demasiado viejos entender la pregunta. Pulse cómo es viejo usted está en años."
|
||||||
|
|
||||||
#string STR_PASSWORD_CALLBACK_PROMPT #language en-US "Set the system password - Interactive"
|
|
||||||
#language fr-FR "Cuál es la palabra mágica? - Interactive"
|
|
||||||
#string STR_PASSWORD_PROMPT #language en-US "Set the system password"
|
#string STR_PASSWORD_PROMPT #language en-US "Set the system password"
|
||||||
#language fr-FR "Cuál es la palabra mágica?"
|
#language fr-FR "Cuál es la palabra mágica?"
|
||||||
#string STR_PASSWORD_HELP #language en-US "This is a system password which will likely be used by the BDS architecture in its platform portion of the code. There is a very simple encryption in this sample and the password will be stored in NVRAM in its encrypted form."
|
|
||||||
#language fr-FR "Esto es analgous a mí que le pregunta cuál es su palabra de paso."
|
|
||||||
#string STR_TEXT_SECRUITY_TEST_TEXT #language en-US "Access only permitted for Admin"
|
#string STR_TEXT_SECRUITY_TEST_TEXT #language en-US "Access only permitted for Admin"
|
||||||
#language fr-FR "Access only permitted for Admin"
|
#language fr-FR "Access only permitted for Admin"
|
||||||
#string STR_TEXT_SECRUITY_TEST_HELP #language en-US "If this label is not gray, then current user has admin access setup permission. If this label is gray, then current user has no admin access setup permission."
|
#string STR_TEXT_SECRUITY_TEST_HELP #language en-US "If this label is not gray, then current user has admin access setup permission. If this label is gray, then current user has no admin access setup permission."
|
||||||
@ -151,10 +147,6 @@
|
|||||||
#language fr-FR "Éste es mi mensaje de error contrario."
|
#language fr-FR "Éste es mi mensaje de error contrario."
|
||||||
#string STR_ERROR_POPUP #language en-US "You typed in something bad!"
|
#string STR_ERROR_POPUP #language en-US "You typed in something bad!"
|
||||||
#language fr-FR "Esto es un mensaje de error del popup."
|
#language fr-FR "Esto es un mensaje de error del popup."
|
||||||
#string STR_MY_STRING_PROMPT #language en-US "Password you typed in is"
|
|
||||||
#language fr-FR "Password you typed in is"
|
|
||||||
#string STR_MY_STRING_HELP #language en-US "This is my string help"
|
|
||||||
#language fr-FR "This is my string help"
|
|
||||||
#string STR_MY_STRING_DEFAULT #language en-US "my password"
|
#string STR_MY_STRING_DEFAULT #language en-US "my password"
|
||||||
#language fr-FR "my password"
|
#language fr-FR "my password"
|
||||||
#string STR_MY_STRING_PROMPT2 #language en-US "String - Interactive"
|
#string STR_MY_STRING_PROMPT2 #language en-US "String - Interactive"
|
||||||
|
Reference in New Issue
Block a user