REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the RedfishPkg 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: Abner Chang <abner.chang@hpe.com>
		
			
				
	
	
		
			210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  RedfishCrentialDxe produces the EdkIIRedfishCredentialProtocol for the consumer
 | 
						|
  to get the Redfish credential Info and to restrict Redfish access from UEFI side.
 | 
						|
 | 
						|
  (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <RedfishCredentialDxe.h>
 | 
						|
 | 
						|
EDKII_REDFISH_CREDENTIAL_PROTOCOL  mRedfishCredentialProtocol = {
 | 
						|
  RedfishCredentialGetAuthInfo,
 | 
						|
  RedfishCredentialStopService
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Callback function executed when the ExitBootServices event group is signaled.
 | 
						|
 | 
						|
  @param[in]  Event    Event whose notification function is being invoked.
 | 
						|
  @param[out] Context  Pointer to the buffer pass in.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
RedfishCredentialExitBootServicesEventNotify (
 | 
						|
  IN  EFI_EVENT  Event,
 | 
						|
  OUT VOID       *Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  LibCredentialExitBootServicesNotify ((EDKII_REDFISH_CREDENTIAL_PROTOCOL *)Context);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Callback function executed when the EndOfDxe event group is signaled.
 | 
						|
 | 
						|
  @param[in]  Event    Event whose notification function is being invoked.
 | 
						|
  @param[out] Context  Pointer to the buffer pass in.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
RedfishCredentialEndOfDxeEventNotify (
 | 
						|
  IN  EFI_EVENT  Event,
 | 
						|
  OUT VOID       *Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  LibCredentialEndOfDxeNotify ((EDKII_REDFISH_CREDENTIAL_PROTOCOL *)Context);
 | 
						|
 | 
						|
  //
 | 
						|
  // Close event, so it will not be invoked again.
 | 
						|
  //
 | 
						|
  gBS->CloseEvent (Event);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve platform's Redfish authentication information.
 | 
						|
 | 
						|
  This functions returns the Redfish authentication method together with the user Id and
 | 
						|
  password.
 | 
						|
  - For AuthMethodNone, the UserId and Password could be used for HTTP header authentication
 | 
						|
    as defined by RFC7235.
 | 
						|
  - For AuthMethodRedfishSession, the UserId and Password could be used for Redfish
 | 
						|
    session login as defined by  Redfish API specification (DSP0266).
 | 
						|
 | 
						|
  Callers are responsible for and freeing the returned string storage.
 | 
						|
 | 
						|
  @param[in]   This                Pointer to EDKII_REDFISH_CREDENTIAL_PROTOCOL instance.
 | 
						|
  @param[out]  AuthMethod          Type of Redfish authentication method.
 | 
						|
  @param[out]  UserId              The pointer to store the returned UserId string.
 | 
						|
  @param[out]  Password            The pointer to store the returned Password string.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              Get the authentication information successfully.
 | 
						|
  @retval EFI_ACCESS_DENIED        SecureBoot is disabled after EndOfDxe.
 | 
						|
  @retval EFI_INVALID_PARAMETER    This or AuthMethod or UserId or Password is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES     There are not enough memory resources.
 | 
						|
  @retval EFI_UNSUPPORTED          Unsupported authentication method is found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
RedfishCredentialGetAuthInfo (
 | 
						|
  IN  EDKII_REDFISH_CREDENTIAL_PROTOCOL  *This,
 | 
						|
  OUT EDKII_REDFISH_AUTH_METHOD          *AuthMethod,
 | 
						|
  OUT CHAR8                              **UserId,
 | 
						|
  OUT CHAR8                              **Password
 | 
						|
  )
 | 
						|
{
 | 
						|
  if ((This == NULL) || (AuthMethod == NULL) || (UserId == NULL) || (Password == NULL)) {
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  return LibCredentialGetAuthInfo (This, AuthMethod, UserId, Password);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Notify the Redfish service provide to stop provide configuration service to this platform.
 | 
						|
 | 
						|
  This function should be called when the platfrom is about to leave the safe environment.
 | 
						|
  It will notify the Redfish service provider to abort all logined session, and prohibit
 | 
						|
  further login with original auth info. GetAuthInfo() will return EFI_UNSUPPORTED once this
 | 
						|
  function is returned.
 | 
						|
 | 
						|
  @param[in]   This                Pointer to EDKII_REDFISH_CREDENTIAL_PROTOCOL instance.
 | 
						|
  @param[in]   ServiceStopType     Reason of stopping Redfish service.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              Service has been stoped successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER    This is NULL or given the worng ServiceStopType.
 | 
						|
  @retval EFI_UNSUPPORTED          Not support to stop Redfish service.
 | 
						|
  @retval Others                   Some error happened.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
RedfishCredentialStopService (
 | 
						|
  IN     EDKII_REDFISH_CREDENTIAL_PROTOCOL           *This,
 | 
						|
  IN     EDKII_REDFISH_CREDENTIAL_STOP_SERVICE_TYPE  ServiceStopType
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (This == NULL) {
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  return LibStopRedfishService (This, ServiceStopType);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Main entry for this driver.
 | 
						|
 | 
						|
  @param ImageHandle     Image handle this driver.
 | 
						|
  @param SystemTable     Pointer to SystemTable.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS    This function always complete successfully.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
RedfishCredentialDxeDriverEntryPoint (
 | 
						|
  IN EFI_HANDLE        ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE  *SystemTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  EFI_HANDLE  Handle;
 | 
						|
  EFI_EVENT   EndOfDxeEvent;
 | 
						|
  EFI_EVENT   ExitBootServiceEvent;
 | 
						|
 | 
						|
  Handle = NULL;
 | 
						|
 | 
						|
  //
 | 
						|
  // Install the RedfishCredentialProtocol onto Handle.
 | 
						|
  //
 | 
						|
  Status = gBS->InstallMultipleProtocolInterfaces (
 | 
						|
                  &Handle,
 | 
						|
                  &gEdkIIRedfishCredentialProtocolGuid,
 | 
						|
                  &mRedfishCredentialProtocol,
 | 
						|
                  NULL
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    return Status;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // After EndOfDxe, if SecureBoot is disabled, Redfish Credential Protocol should return
 | 
						|
  // error code to caller to avoid the 3rd code to bypass Redfish Credential Protocol and
 | 
						|
  // retrieve userid/pwd directly. So, here, we create EndOfDxe Event to check SecureBoot
 | 
						|
  // status.
 | 
						|
  //
 | 
						|
  Status = gBS->CreateEventEx (
 | 
						|
                  EVT_NOTIFY_SIGNAL,
 | 
						|
                  TPL_CALLBACK,
 | 
						|
                  RedfishCredentialEndOfDxeEventNotify,
 | 
						|
                  (VOID *)&mRedfishCredentialProtocol,
 | 
						|
                  &gEfiEndOfDxeEventGroupGuid,
 | 
						|
                  &EndOfDxeEvent
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto ON_ERROR;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // After ExitBootServices, Redfish Credential Protocol should stop the service.
 | 
						|
  // So, here, we create ExitBootService Event to stop service.
 | 
						|
  //
 | 
						|
  Status = gBS->CreateEventEx (
 | 
						|
                  EVT_NOTIFY_SIGNAL,
 | 
						|
                  TPL_CALLBACK,
 | 
						|
                  RedfishCredentialExitBootServicesEventNotify,
 | 
						|
                  (VOID *)&mRedfishCredentialProtocol,
 | 
						|
                  &gEfiEventExitBootServicesGuid,
 | 
						|
                  &ExitBootServiceEvent
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    gBS->CloseEvent (EndOfDxeEvent);
 | 
						|
    goto ON_ERROR;
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
 | 
						|
ON_ERROR:
 | 
						|
 | 
						|
  gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
         Handle,
 | 
						|
         &gEdkIIRedfishCredentialProtocolGuid,
 | 
						|
         &mRedfishCredentialProtocol,
 | 
						|
         NULL
 | 
						|
         );
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 |