/** @file\r
The Miscellaneous Routines for TlsAuthConfigDxe driver.\r
\r
-Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
/**\r
Delete one entry from cert database.\r
\r
- @param[in] PrivateData Module's private data.\r
+ @param[in] Private Module's private data.\r
@param[in] VariableName The variable name of the database.\r
@param[in] VendorGuid A unique identifier for the vendor.\r
@param[in] LabelNumber Label number to insert opcodes.\r
\r
\r
/**\r
- Close an open file handle.\r
+ Clean the file related resource.\r
\r
- @param[in] FileHandle The file handle to close.\r
+ @param[in] Private Module's private data.\r
\r
**/\r
VOID\r
-CloseFile (\r
- IN EFI_FILE_HANDLE FileHandle\r
+CleanFileContext (\r
+ IN TLS_AUTH_CONFIG_PRIVATE_DATA *Private\r
)\r
{\r
- if (FileHandle != NULL) {\r
- FileHandle->Close (FileHandle);\r
+ if (Private->FileContext->FHandle != NULL) {\r
+ Private->FileContext->FHandle->Close (Private->FileContext->FHandle);\r
+ Private->FileContext->FHandle = NULL;\r
+ if (Private->FileContext->FileName!= NULL){\r
+ FreePool(Private->FileContext->FileName);\r
+ Private->FileContext->FileName = NULL;\r
+ }\r
}\r
}\r
\r
CACert = NULL;\r
CACertData = NULL;\r
Data = NULL;\r
+ Attr = 0;\r
\r
Status = ReadFileContent (\r
Private->FileContext->FHandle,\r
CopyMem ((UINT8* ) (CACertData->SignatureData), X509Data, X509DataSize);\r
\r
//\r
- // Check if signature database entry has been already existed.\r
- // If true, use EFI_VARIABLE_APPEND_WRITE attribute to append the\r
- // new signature data to original variable\r
+ // Check if the signature database entry already exists. If it does, use the\r
+ // EFI_VARIABLE_APPEND_WRITE attribute to append the new signature data to\r
+ // the original variable, plus preserve the original variable attributes.\r
//\r
- Attr = TLS_AUTH_CONFIG_VAR_BASE_ATTR;\r
-\r
Status = gRT->GetVariable(\r
VariableName,\r
&gEfiTlsCaCertificateGuid,\r
- NULL,\r
+ &Attr,\r
&DataSize,\r
NULL\r
);\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
Attr |= EFI_VARIABLE_APPEND_WRITE;\r
- } else if (Status != EFI_NOT_FOUND) {\r
+ } else if (Status == EFI_NOT_FOUND) {\r
+ Attr = TLS_AUTH_CONFIG_VAR_BASE_ATTR;\r
+ } else {\r
goto ON_EXIT;\r
}\r
\r
}\r
\r
ON_EXIT:\r
-\r
- CloseFile (Private->FileContext->FHandle);\r
- if (Private->FileContext->FileName != NULL) {\r
- FreePool(Private->FileContext->FileName);\r
- Private->FileContext->FileName = NULL;\r
- }\r
-\r
- Private->FileContext->FHandle = NULL;\r
+ CleanFileContext (Private);\r
\r
if (Private->CertGuid != NULL) {\r
FreePool (Private->CertGuid);\r
HiiGetBrowserData (&gTlsAuthConfigGuid, mTlsAuthConfigStorageName, BufferSize, (UINT8 *) IfrNvData);\r
\r
if ((Action != EFI_BROWSER_ACTION_CHANGED) &&\r
- (Action != EFI_BROWSER_ACTION_CHANGING)) {\r
+ (Action != EFI_BROWSER_ACTION_CHANGING) &&\r
+ (Action != EFI_BROWSER_ACTION_FORM_CLOSE)) {\r
Status = EFI_UNSUPPORTED;\r
goto EXIT;\r
}\r
CleanUpPage (LabelId, Private);\r
break;\r
case KEY_TLS_AUTH_CONFIG_ENROLL_CERT_FROM_FILE:\r
+ //\r
+ // If the file is already opened, clean the file related resource first.\r
+ //\r
+ CleanFileContext (Private);\r
+\r
ChooseFile( NULL, NULL, UpdateCAFromFile, &File);\r
break;\r
\r
case KEY_TLS_AUTH_CONFIG_VALUE_SAVE_AND_EXIT:\r
Status = EnrollCertDatabase (Private, EFI_TLS_CA_CERTIFICATE_VARIABLE);\r
if (EFI_ERROR (Status)) {\r
+ CleanFileContext (Private);\r
+\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
break;\r
\r
case KEY_TLS_AUTH_CONFIG_VALUE_NO_SAVE_AND_EXIT:\r
- if (Private->FileContext->FHandle != NULL) {\r
- CloseFile (Private->FileContext->FHandle);\r
- Private->FileContext->FHandle = NULL;\r
- if (Private->FileContext->FileName!= NULL){\r
- FreePool(Private->FileContext->FileName);\r
- Private->FileContext->FileName = NULL;\r
- }\r
- }\r
+ CleanFileContext (Private);\r
\r
if (Private->CertGuid!= NULL) {\r
FreePool (Private->CertGuid);\r
default:\r
break;\r
}\r
+ } else if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) {\r
+ CleanFileContext (Private);\r
}\r
\r
EXIT:\r