feat: check for provisioning state on shbc failure and reset if necessary

This commit is contained in:
Mudit Vats
2021-08-11 09:56:36 -07:00
parent 706a512bc7
commit 185cdceadb
3 changed files with 59 additions and 0 deletions

View File

@@ -492,3 +492,37 @@ bool cmd_start_config_host_based(config_host_based_settings& server_cert, config
return false;
}
bool cmd_get_provisioning_state(int& state)
{
state = 0;
// initialize HECI interface
if (heci_Init(NULL, PTHI_CLIENT) == 0) return false;
// get Control Mode
AMT_PROVISIONING_STATE provisioningState;
AMT_STATUS amt_status = pthi_GetProvisioningState(&provisioningState);
if (amt_status == 0)
{
state = provisioningState;
return true;
}
return false;
}
bool cmd_stop_configuration()
{
// initialize HECI interface
if (heci_Init(NULL, PTHI_CLIENT) == 0) return false;
AMT_STATUS amt_status = pthi_StopConfiguration();
if (amt_status == 0)
{
return true;
}
return false;
}

View File

@@ -57,5 +57,7 @@ bool cmd_get_certificate_hashes(std::vector<cert_hash_entry>& hash_entries);
bool cmd_get_remote_access_connection_status(int& network_status, int& remote_status, int& remote_trigger, std::string& mps_hostname);
bool cmd_get_lan_interface_settings(lan_interface_settings& lan_interface_settings, bool wired_interface = true);
bool cmd_start_config_host_based(config_host_based_settings& server_cert, config_host_based_settings& amt_cert);
bool cmd_get_provisioning_state(int& state);
bool cmd_stop_configuration();
#endif

View File

@@ -293,6 +293,29 @@ int main(int argc, char* argv[])
server_cert.algorithm = certAlgo;
server_cert.hash = certHash;
bool sbhc_success = cmd_start_config_host_based(server_cert, amt_cert);
if (!sbhc_success)
{
int state;
if (cmd_get_provisioning_state(state))
{
switch (state) {
case 0:
std::cout << "Provisioning state already in pre-provisioning." << std::endl;
break;
case 1:
std::cout << "Provisioning state is in-provisioning." << std::endl;
(cmd_stop_configuration()) ? std::cout << "Provisioning state succesfully reset." : std::cout << "Provisioning state could not be reset.";
break;
case 2:
std::cout << "Provisioning state is post-provisioning." << std::endl;
(cmd_stop_configuration()) ? std::cout << "Provisioning state succesfully reset." : std::cout << "Provisioning state could not be reset.";
break;
default:
break;
}
}
}
// create the response
std::string response;