blob: 898ee888440aa5410d4080c9ecdea73054d238c5 [file] [log] [blame]
/** @file
Header file for RedfishPlatformCredentialIpmiLib.
Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef REDFISH_PLATFORM_CREDENTIAL_IPMI_LIB_H_
#define REDFISH_PLATFORM_CREDENTIAL_IPMI_LIB_H_
#include <Uefi.h>
#include <IndustryStandard/Ipmi.h>
#include <IndustryStandard/RedfishHostInterfaceIpmi.h>
#include <Protocol/EdkIIRedfishCredential.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/IpmiLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/RedfishCredentialLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#define CREDENTIAL_VARIABLE_NAME L"Partstooblaitnederc"
///
/// The bootstrap credential keeping in UEFI variable
///
typedef struct {
CHAR8 Username[USERNAME_MAX_SIZE];
CHAR8 Password[PASSWORD_MAX_SIZE];
} BOOTSTRAP_CREDENTIALS_VARIABLE;
/**
Function to retrieve temporary user credentials for the UEFI redfish client. This function can
also disable bootstrap credential service in BMC.
@param[in] DisableBootstrapControl TRUE - Tell the BMC to disable the bootstrap credential
service to ensure no one else gains credentials
FALSE Allow the bootstrap credential service to continue
@param[in,out] BootstrapUsername A pointer to a Ascii encoded string for the credential username
When DisableBootstrapControl is TRUE, this pointer can be NULL
@param[in] BootstrapUsernameSize The size of BootstrapUsername including NULL terminator in bytes.
Per specification, the size is USERNAME_MAX_SIZE.
@param[in,out] BootstrapPassword A pointer to a Ascii encoded string for the credential password
When DisableBootstrapControl is TRUE, this pointer can be NULL
@param[in] BootstrapPasswordSize The size of BootstrapPassword including NULL terminator in bytes.
Per specification, the size is PASSWORD_MAX_SIZE.
@retval EFI_SUCCESS Credentials were successfully fetched and returned. When DisableBootstrapControl
is set to TRUE, the bootstrap credential service is disabled successfully.
@retval EFI_INVALID_PARAMETER BootstrapUsername or BootstrapPassword is NULL when DisableBootstrapControl
is set to FALSE. BootstrapUsernameSize or BootstrapPasswordSize is incorrect when
DisableBootstrapControl is set to FALSE.
@retval EFI_DEVICE_ERROR An IPMI failure occurred
**/
EFI_STATUS
GetBootstrapAccountCredentials (
IN BOOLEAN DisableBootstrapControl,
IN OUT CHAR8 *BootstrapUsername, OPTIONAL
IN UINTN BootstrapUsernameSize,
IN OUT CHAR8 *BootstrapPassword, OPTIONAL
IN UINTN BootstrapPasswordSize
);
/**
Function to save temporary user credentials into boot time variable. When DeleteVariable is True,
this function delete boot time variable.
@param[in] BootstrapUsername A pointer to a Ascii encoded string for the credential username.
@param[in] BootstrapPassword A pointer to a Ascii encoded string for the credential password.
@param[in] DeleteVariable True to remove boot time variable. False otherwise.
@retval EFI_SUCCESS Credentials were successfully saved.
@retval EFI_INVALID_PARAMETER BootstrapUsername or BootstrapPassword is NULL
@retval Others Error occurs
**/
EFI_STATUS
SetBootstrapAccountCredentialsToVariable (
IN CHAR8 *BootstrapUsername, OPTIONAL
IN CHAR8 *BootstrapPassword, OPTIONAL
IN BOOLEAN DeleteVariable
);
#endif