From a8b05d161ef3367f3fc2f4a5e44a2b0b69a9f3d2 Mon Sep 17 00:00:00 2001 From: Adriana Kobylak Date: Thu, 23 Aug 2018 10:44:07 -0500 Subject: rest_dbus: Add read-only property error There is now support in sdbusplus to mark a property as read-only, so that a REST request to modify it would return org.freedesktop.DBus.Error.PropertyReadOnly. Add support for this error to provide a more useful and compact error instead of the default 500 Internal Error with the traceback. Tested: Instead of a 500 error with traceback, a compact 403 error is displayed: $ curl b cjar -k -H "Content-Type: application/json" -X PUT -d '{"data": 50}' https://${bmc}/xyz/openbmc_project/control/power_supply/attr/DeratingFactor { "data": { "description": "org.freedesktop.DBus.Error.PropertyReadOnly: Property 'DeratingFactor' is not writable." }, "message": "403 Forbidden", "status": "error" } Change-Id: I5648a99c7656a6f9d9a8ca967418fabd64b080c6 Signed-off-by: Adriana Kobylak --- module/obmc/wsgi/apps/rest_dbus.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'module/obmc/wsgi') diff --git a/module/obmc/wsgi/apps/rest_dbus.py b/module/obmc/wsgi/apps/rest_dbus.py index 5eaffb7..9cb69f0 100644 --- a/module/obmc/wsgi/apps/rest_dbus.py +++ b/module/obmc/wsgi/apps/rest_dbus.py @@ -50,6 +50,7 @@ if have_wsock: DBUS_UNKNOWN_INTERFACE = 'org.freedesktop.DBus.Error.UnknownInterface' DBUS_UNKNOWN_METHOD = 'org.freedesktop.DBus.Error.UnknownMethod' +DBUS_PROPERTY_READONLY = 'org.freedesktop.DBus.Error.PropertyReadOnly' DBUS_INVALID_ARGS = 'org.freedesktop.DBus.Error.InvalidArgs' DBUS_TYPE_ERROR = 'org.freedesktop.DBus.Python.TypeError' DELETE_IFACE = 'xyz.openbmc_project.Object.Delete' @@ -495,6 +496,8 @@ class PropertyHandler(RouteHandler): except ValueError as e: abort(400, str(e)) except dbus.exceptions.DBusException as e: + if e.get_dbus_name() == DBUS_PROPERTY_READONLY: + abort(403, str(e)) if e.get_dbus_name() == DBUS_INVALID_ARGS and retry: bus_name = properties_iface.bus_name expected_type = get_type_signature_by_introspection(self.bus, -- cgit v1.2.1