diff options
author | Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com> | 2021-12-09 01:46:49 +0300 |
---|---|---|
committer | Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com> | 2021-12-15 01:23:20 +0300 |
commit | 4f277b542659afb0f14f57fe07fe7f0f63a4d22e (patch) | |
tree | 972efe9f0d75a2ce4efc910a6637bfd348e8a1e7 | |
parent | 1349014d9059af637f66ac82be05e021c02b9c2b (diff) | |
download | bmcweb-4f277b542659afb0f14f57fe07fe7f0f63a4d22e.tar.xz |
Fix - RedFish response for non-manufacturing mode
Issue: If system is not in manufacturing mode, RedFish response is
success but sensor value is not updated
Fix: If the system is not in manufacturing mode, return proper error as
actionNotSupported.
Tested:
1. Redfish validator - passed for this new change
2. Verified RedFish response when system in not manufacturing mode.
Patch: https://<BMC-IP>/redfish/v1/Chassis/<Baseboard>/Thermal
Body:
{
"Temperatures": [
{
"MemberId": "BMC_Temp",
"ReadingCelsius": 34.313
}]
}
Response:
{
"@odata.id": "/redfish/v1/Chassis/<Baseboard>/Thermal",
"@odata.type": "#Thermal.v1_4_0.Thermal",
"Fans": [],
"Id": "Thermal",
"Name": "Thermal",
"Temperatures": [],
"error": {
"@Message.ExtendedInfo": [
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "There are insufficient privileges for the
account or credentials associated with the current
session to perform the requested operation.",
"MessageArgs": [],
"MessageId": "Base.1.8.1.InsufficientPrivilege",
"MessageSeverity": "Critical",
"Resolution": "Either abandon the operation or change the
associated access rights and resubmit the request if the
operation failed."
}
],
"code": "Base.1.8.1.InsufficientPrivilege",
"message": "There are insufficient privileges for the account or
credentials associated with the current session to perform the
requested operation."
}
}
Signed-off-by: Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com>
Change-Id: I3c6bfc9d37e1e8648ad0ff713929ad3fd06f437b
-rw-r--r-- | redfish-core/lib/sensors.hpp | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp index 6257dce9fe..eba0652180 100644 --- a/redfish-core/lib/sensors.hpp +++ b/redfish-core/lib/sensors.hpp @@ -2881,64 +2881,70 @@ inline void setSensorsOverride( } } // Get the connection to which the memberId belongs - auto getObjectsWithConnectionCb = - [sensorAsyncResp, overrideMap]( - const boost::container::flat_set<std::string>& /*connections*/, - const std::set<std::pair<std::string, std::string>>& - objectsWithConnection) { - if (objectsWithConnection.size() != overrideMap.size()) + auto getObjectsWithConnectionCb = [sensorAsyncResp, overrideMap]( + const boost::container::flat_set< + std::string>& /*connections*/, + const std::set<std::pair< + std::string, std::string>>& + objectsWithConnection) { + if (objectsWithConnection.size() != overrideMap.size()) + { + BMCWEB_LOG_INFO + << "Unable to find all objects with proper connection " + << objectsWithConnection.size() << " requested " + << overrideMap.size() << "\n"; + messages::resourceNotFound(sensorAsyncResp->asyncResp->res, + sensorAsyncResp->chassisSubNode == + sensors::node::thermal + ? "Temperatures" + : "Voltages", + "Count"); + return; + } + for (const auto& item : objectsWithConnection) + { + sdbusplus::message::object_path path(item.first); + std::string sensorName = path.filename(); + if (sensorName.empty()) { - BMCWEB_LOG_INFO - << "Unable to find all objects with proper connection " - << objectsWithConnection.size() << " requested " - << overrideMap.size() << "\n"; - messages::resourceNotFound( - sensorAsyncResp->asyncResp->res, - sensorAsyncResp->chassisSubNode == - sensors::node::thermal - ? "Temperatures" - : "Voltages", - "Count"); + messages::internalError(sensorAsyncResp->asyncResp->res); return; } - for (const auto& item : objectsWithConnection) - { - sdbusplus::message::object_path path(item.first); - std::string sensorName = path.filename(); - if (sensorName.empty()) - { - messages::internalError( - sensorAsyncResp->asyncResp->res); - return; - } - const auto& iterator = overrideMap.find(sensorName); - if (iterator == overrideMap.end()) - { - BMCWEB_LOG_INFO << "Unable to find sensor object" - << item.first << "\n"; - messages::internalError( - sensorAsyncResp->asyncResp->res); - return; - } - crow::connections::systemBus->async_method_call( - [sensorAsyncResp](const boost::system::error_code ec) { - if (ec) + const auto& iterator = overrideMap.find(sensorName); + if (iterator == overrideMap.end()) + { + BMCWEB_LOG_INFO << "Unable to find sensor object" + << item.first << "\n"; + messages::internalError(sensorAsyncResp->asyncResp->res); + return; + } + crow::connections::systemBus->async_method_call( + [sensorAsyncResp](const boost::system::error_code ec) { + if (ec) + { + if (ec.value() == + boost::system::errc::permission_denied) { - BMCWEB_LOG_DEBUG - << "setOverrideValueStatus DBUS error: " - << ec; - messages::internalError( + BMCWEB_LOG_WARNING + << "Manufacturing mode is not Enabled...can't " + "Override the sensor value. "; + + messages::insufficientPrivilege( sensorAsyncResp->asyncResp->res); return; } - }, - item.second, item.first, - "org.freedesktop.DBus.Properties", "Set", - "xyz.openbmc_project.Sensor.Value", "Value", - std::variant<double>(iterator->second.first)); - } - }; + BMCWEB_LOG_DEBUG + << "setOverrideValueStatus DBUS error: " << ec; + messages::internalError( + sensorAsyncResp->asyncResp->res); + } + }, + item.second, item.first, "org.freedesktop.DBus.Properties", + "Set", "xyz.openbmc_project.Sensor.Value", "Value", + std::variant<double>(iterator->second.first)); + } + }; // Get object with connection for the given sensor name getObjectsWithConnection(sensorAsyncResp, sensorNames, std::move(getObjectsWithConnectionCb)); |