summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/biosconfig/0004-Add-support-to-ChangePassword-action.patch
blob: 9a2fada9e9cb97a51b0a5ce4bda34853a2b1bab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
From 34f8680b21a134e2133bdcf41e1e83e4b4a05d28 Mon Sep 17 00:00:00 2001
From: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
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 <kuiying.wang@intel.com>
---
 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<bmcweb::AsyncResp>& 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