From 34f8680b21a134e2133bdcf41e1e83e4b4a05d28 Mon Sep 17 00:00:00 2001 From: Krzysztof Grobelny Date: Wed, 30 Jun 2021 15:37:47 +0000 Subject: [PATCH 4/5] 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" } Change-Id: I90319a68da0b0a7f9c5cd65a8cb8cf52269a5f52 Signed-off-by: Kuiying Wang --- redfish-core/lib/bios.hpp | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/redfish-core/lib/bios.hpp b/redfish-core/lib/bios.hpp index 49c0fd0..0250c59 100644 --- a/redfish-core/lib/bios.hpp +++ b/redfish-core/lib/bios.hpp @@ -180,6 +180,9 @@ inline void requestRoutesBiosService(App& app) 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( @@ -283,6 +286,61 @@ inline void requestRoutesBiosService(App& app) }); } +/** + * 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