From 22956921a228f6f1cbbbd3045a3cc3969732dca3 Mon Sep 17 00:00:00 2001 From: Arun Lal K M Date: Fri, 8 Oct 2021 20:56:00 +0000 Subject: [PATCH] Add support to ChangePassword action Tested: Passed Redfish validator. Bios change password: root@intel-obmc:~# cat /var/lib/bios-settings-manager/seedData { "UserPwdHash": "08D91157785366CDC3AA64D87E5E3C621EDAB13E26B6E484397EBA5E459E54C567BF5B1FFB36A43B6142B18F8D642E9D", "AdminPwdHash": "08D91157785366CDC3AA64D87E5E3C621EDAB13E26B6E484397EBA5E459E54C567BF5B1FFB36A43B6142B18F8D642E9D", "Seed": "123456", "HashAlgo": "SHA384" } POST https://IP_ADDR/redfish/v1/Systems/system/Bios/Actions/Bios.ChangePassword { "NewPassword": "12345678", "OldPassword": "1234567890", "PasswordName": "Administrator" } root@intel-obmc:~# cat /var/lib/bios-settings-manager/passwordData { "CurrentPassword": "1234567890", "IsAdminPwdChanged": 1, "IsUserPwdChanged": 0, "NewPassword": "2DD65D57EB60B1D92C5F3D2DC84724FCEE7BC02E57AA75E834712266ED94CAC704047B2FF7CEC1C36BED280B36BB5AC6", "UserName": "Administrator" } Signed-off-by: Arun Lal K M Signed-off-by: Kuiying Wang --- redfish-core/lib/bios.hpp | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/redfish-core/lib/bios.hpp b/redfish-core/lib/bios.hpp index f613613..b06a904 100644 --- a/redfish-core/lib/bios.hpp +++ b/redfish-core/lib/bios.hpp @@ -175,6 +175,10 @@ inline void asyncResp->res.jsonValue["Actions"]["#Bios.ResetBios"] = { {"target", "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios"}}; + asyncResp->res.jsonValue["Actions"]["#Bios.ChangePassword"] = { + {"target", "/redfish/v1/Systems/system/Bios/Actions/" + "Bios.ChangePassword"}}; + // Get the ActiveSoftwareImage and SoftwareImages fw_util::populateFirmwareInformation(asyncResp, fw_util::biosPurpose, "", true); @@ -265,6 +269,61 @@ inline void requestRoutesBiosService(App& app) .methods(boost::beast::http::verb::get)(handleBiosServiceGet); } +/** + * BiosChangePassword class supports handle POST method for change bios + * password. The class retrieves and sends data directly to D-Bus. + */ +inline void requestRoutesBiosChangePassword(App& app) +{ + BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/Bios/") + .privileges({{"ConfigureComponents"}}) + .methods(boost::beast::http::verb::post)( + [](const crow::Request& req, + const std::shared_ptr& asyncResp) { + std::string currentPassword, newPassword, userName; + if (!json_util::readJson(req, asyncResp->res, "NewPassword", + newPassword, "OldPassword", + currentPassword, "PasswordName", + userName)) + { + return; + } + if (currentPassword.empty()) + { + messages::actionParameterUnknown( + asyncResp->res, "ChangePassword", "OldPassword"); + return; + } + if (newPassword.empty()) + { + messages::actionParameterUnknown( + asyncResp->res, "ChangePassword", "NewPassword"); + return; + } + if (userName.empty()) + { + messages::actionParameterUnknown( + asyncResp->res, "ChangePassword", "PasswordName"); + return; + } + crow::connections::systemBus->async_method_call( + [asyncResp](const boost::system::error_code ec) { + if (ec) + { + BMCWEB_LOG_CRITICAL + << "Failed in doPost(BiosChangePassword) " + << ec; + messages::internalError(asyncResp->res); + return; + } + }, + "xyz.openbmc_project.BIOSConfigPassword", + "/xyz/openbmc_project/bios_config/password", + "xyz.openbmc_project.BIOSConfig.Password", "ChangePassword", + userName, currentPassword, newPassword); + }); +} + /** * BiosSettings class supports handle GET/PATCH method for * BIOS configuration pending settings. -- 2.17.1