REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the NetworkPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com>
		
			
				
	
	
		
			324 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			324 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The file operation functions for WiFi Connection Manager.
 | |
| 
 | |
|   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include "WifiConnectionMgrFileUtil.h"
 | |
| 
 | |
| CHAR16  *mDerPemEncodedSuffix[] = {
 | |
|   L".cer",
 | |
|   L".der",
 | |
|   L".crt",
 | |
|   L".pem",
 | |
|   NULL
 | |
| };
 | |
| 
 | |
| /**
 | |
|   This code checks if the FileSuffix is one of the possible DER/PEM-encoded certificate suffix.
 | |
| 
 | |
|   @param[in] FileSuffix     The suffix of the input certificate file
 | |
| 
 | |
|   @retval    TRUE           It's a DER/PEM-encoded certificate.
 | |
|   @retval    FALSE          It's NOT a DER/PEM-encoded certificate.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| IsDerPemEncodeCertificate (
 | |
|   IN CONST CHAR16  *FileSuffix
 | |
|   )
 | |
| {
 | |
|   UINTN  Index;
 | |
| 
 | |
|   for (Index = 0; mDerPemEncodedSuffix[Index] != NULL; Index++) {
 | |
|     if (StrCmp (FileSuffix, mDerPemEncodedSuffix[Index]) == 0) {
 | |
|       return TRUE;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Read file content into BufferPtr, the size of the allocate buffer
 | |
|   is *FileSize plus AddtionAllocateSize.
 | |
| 
 | |
|   @param[in]       FileHandle            The file to be read.
 | |
|   @param[in, out]  BufferPtr             Pointers to the pointer of allocated buffer.
 | |
|   @param[out]      FileSize              Size of input file
 | |
|   @param[in]       AddtionAllocateSize   Addtion size the buffer need to be allocated.
 | |
|                                          In case the buffer need to contain others besides the file content.
 | |
| 
 | |
|   @retval   EFI_SUCCESS                  The file was read into the buffer.
 | |
|   @retval   EFI_INVALID_PARAMETER        A parameter was invalid.
 | |
|   @retval   EFI_OUT_OF_RESOURCES         A memory allocation failed.
 | |
|   @retval   others                       Unexpected error.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| ReadFileContent (
 | |
|   IN      EFI_FILE_HANDLE  FileHandle,
 | |
|   IN OUT  VOID             **BufferPtr,
 | |
|   OUT  UINTN               *FileSize,
 | |
|   IN      UINTN            AddtionAllocateSize
 | |
|   )
 | |
| {
 | |
|   UINTN       BufferSize;
 | |
|   UINT64      SourceFileSize;
 | |
|   VOID        *Buffer;
 | |
|   EFI_STATUS  Status;
 | |
| 
 | |
|   if ((FileHandle == NULL) || (FileSize == NULL)) {
 | |
|     return EFI_INVALID_PARAMETER;
 | |
|   }
 | |
| 
 | |
|   Buffer = NULL;
 | |
| 
 | |
|   //
 | |
|   // Get the file size
 | |
|   //
 | |
|   Status = FileHandle->SetPosition (FileHandle, (UINT64)-1);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     goto ON_EXIT;
 | |
|   }
 | |
| 
 | |
|   Status = FileHandle->GetPosition (FileHandle, &SourceFileSize);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     goto ON_EXIT;
 | |
|   }
 | |
| 
 | |
|   Status = FileHandle->SetPosition (FileHandle, 0);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     goto ON_EXIT;
 | |
|   }
 | |
| 
 | |
|   BufferSize = (UINTN)SourceFileSize + AddtionAllocateSize;
 | |
|   Buffer     =  AllocateZeroPool (BufferSize);
 | |
|   if (Buffer == NULL) {
 | |
|     return EFI_OUT_OF_RESOURCES;
 | |
|   }
 | |
| 
 | |
|   BufferSize = (UINTN)SourceFileSize;
 | |
|   *FileSize  = BufferSize;
 | |
| 
 | |
|   Status = FileHandle->Read (FileHandle, &BufferSize, Buffer);
 | |
|   if (EFI_ERROR (Status) || (BufferSize != *FileSize)) {
 | |
|     FreePool (Buffer);
 | |
|     Buffer = NULL;
 | |
|     Status = EFI_BAD_BUFFER_SIZE;
 | |
|     goto ON_EXIT;
 | |
|   }
 | |
| 
 | |
| ON_EXIT:
 | |
| 
 | |
|   *BufferPtr = Buffer;
 | |
|   return Status;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   This function converts an input device structure to a Unicode string.
 | |
| 
 | |
|   @param[in] DevPath                  A pointer to the device path structure.
 | |
| 
 | |
|   @return A new allocated Unicode string that represents the device path.
 | |
| 
 | |
| **/
 | |
| CHAR16 *
 | |
| EFIAPI
 | |
| DevicePathToStr (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *DevPath
 | |
|   )
 | |
| {
 | |
|   return ConvertDevicePathToText (
 | |
|            DevPath,
 | |
|            FALSE,
 | |
|            TRUE
 | |
|            );
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Extract filename from device path. The returned buffer is allocated using AllocateCopyPool.
 | |
|   The caller is responsible for freeing the allocated buffer using FreePool(). If return NULL
 | |
|   means not enough memory resource.
 | |
| 
 | |
|   @param DevicePath       Device path.
 | |
| 
 | |
|   @retval NULL            Not enough memory resourece for AllocateCopyPool.
 | |
|   @retval Other           A new allocated string that represents the file name.
 | |
| 
 | |
| **/
 | |
| CHAR16 *
 | |
| ExtractFileNameFromDevicePath (
 | |
|   IN   EFI_DEVICE_PATH_PROTOCOL  *DevicePath
 | |
|   )
 | |
| {
 | |
|   CHAR16  *String;
 | |
|   CHAR16  *MatchString;
 | |
|   CHAR16  *LastMatch;
 | |
|   CHAR16  *FileName;
 | |
|   UINTN   Length;
 | |
| 
 | |
|   ASSERT (DevicePath != NULL);
 | |
| 
 | |
|   String = DevicePathToStr (DevicePath);
 | |
|   if (String == NULL) {
 | |
|     return NULL;
 | |
|   }
 | |
| 
 | |
|   MatchString = String;
 | |
|   LastMatch   = String;
 | |
|   FileName    = NULL;
 | |
| 
 | |
|   while (MatchString != NULL) {
 | |
|     LastMatch   = MatchString + 1;
 | |
|     MatchString = StrStr (LastMatch, L"\\");
 | |
|   }
 | |
| 
 | |
|   Length   = StrLen (LastMatch);
 | |
|   FileName = AllocateCopyPool ((Length + 1) * sizeof (CHAR16), LastMatch);
 | |
|   if (FileName != NULL) {
 | |
|     *(FileName + Length) = 0;
 | |
|   }
 | |
| 
 | |
|   FreePool (String);
 | |
| 
 | |
|   return FileName;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the form base on the selected file.
 | |
| 
 | |
|   @param[in]  Private             The pointer to the global private data structure.
 | |
|   @param[in]  FilePath            Point to the file path.
 | |
|   @param[in]  FormId              The form needs to display.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| UpdatePage (
 | |
|   IN  WIFI_MGR_PRIVATE_DATA     *Private,
 | |
|   IN  EFI_DEVICE_PATH_PROTOCOL  *FilePath,
 | |
|   IN  EFI_FORM_ID               FormId
 | |
|   )
 | |
| {
 | |
|   CHAR16      *FileName;
 | |
|   EFI_STATUS  Status;
 | |
| 
 | |
|   FileName = NULL;
 | |
| 
 | |
|   if (FilePath != NULL) {
 | |
|     FileName = ExtractFileNameFromDevicePath (FilePath);
 | |
|   }
 | |
| 
 | |
|   if (FileName == NULL) {
 | |
|     //
 | |
|     // FileName = NULL has two cases:
 | |
|     // 1. FilePath == NULL, not select file.
 | |
|     // 2. FilePath != NULL, but ExtractFileNameFromDevicePath return NULL not enough memory resource.
 | |
|     // In these two case, no need to update the form, and exit the caller function.
 | |
|     //
 | |
|     return TRUE;
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Close the previous file handle before open a new one.
 | |
|   //
 | |
|   if (Private->FileContext->FHandle != NULL) {
 | |
|     Private->FileContext->FHandle->Close (Private->FileContext->FHandle);
 | |
|   }
 | |
| 
 | |
|   Private->FileContext->FHandle = NULL;
 | |
| 
 | |
|   Status = EfiOpenFileByDevicePath (
 | |
|              &FilePath,
 | |
|              &Private->FileContext->FHandle,
 | |
|              EFI_FILE_MODE_READ,
 | |
|              0
 | |
|              );
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     if (FormId == FORMID_ENROLL_CERT) {
 | |
|       HiiSetString (
 | |
|         Private->RegisteredHandle,
 | |
|         STRING_TOKEN (STR_EAP_ENROLLED_CERT_NAME),
 | |
|         L"",
 | |
|         NULL
 | |
|         );
 | |
|     } else if (FormId == FORMID_ENROLL_PRIVATE_KEY) {
 | |
|       HiiSetString (
 | |
|         Private->RegisteredHandle,
 | |
|         STRING_TOKEN (STR_EAP_ENROLLED_PRIVATE_KEY_NAME),
 | |
|         L"",
 | |
|         NULL
 | |
|         );
 | |
|     }
 | |
|   } else {
 | |
|     if (Private->FileContext->FileName != NULL) {
 | |
|       FreePool (Private->FileContext->FileName);
 | |
|       Private->FileContext->FileName = NULL;
 | |
|     }
 | |
| 
 | |
|     Private->FileContext->FileName = FileName;
 | |
| 
 | |
|     if (FormId == FORMID_ENROLL_CERT) {
 | |
|       HiiSetString (
 | |
|         Private->RegisteredHandle,
 | |
|         STRING_TOKEN (STR_EAP_ENROLLED_CERT_NAME),
 | |
|         FileName,
 | |
|         NULL
 | |
|         );
 | |
|     } else if (FormId == FORMID_ENROLL_PRIVATE_KEY) {
 | |
|       HiiSetString (
 | |
|         Private->RegisteredHandle,
 | |
|         STRING_TOKEN (STR_EAP_ENROLLED_PRIVATE_KEY_NAME),
 | |
|         FileName,
 | |
|         NULL
 | |
|         );
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the CA form base on the input file path info.
 | |
| 
 | |
|   @param[in]  Private             The pointer to the global private data structure.
 | |
|   @param[in]  FilePath            Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| UpdateCAFromFile (
 | |
|   IN  WIFI_MGR_PRIVATE_DATA     *Private,
 | |
|   IN  EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (Private, FilePath, FORMID_ENROLL_CERT);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the Private Key form base on the input file path info.
 | |
| 
 | |
|   @param[in]  Private             The pointer to the global private data structure.
 | |
|   @param[in]  FilePath            Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| UpdatePrivateKeyFromFile (
 | |
|   IN  WIFI_MGR_PRIVATE_DATA     *Private,
 | |
|   IN  EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (Private, FilePath, FORMID_ENROLL_PRIVATE_KEY);
 | |
| }
 |