aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-11-20 20:58:39 +0100
committerMike Gilbert <floppym@gentoo.org>2014-11-23 13:23:14 -0500
commitbe2130690d066b582443fd327b429d1c1c1c0889 (patch)
treebe9987f05afca82f966cebea9a03fa0f4c23d5b2
parentcore: watchdog bus properties cannot be both writable and constant (diff)
downloadsystemd-be2130690d066b582443fd327b429d1c1c1c0889.tar.gz
systemd-be2130690d066b582443fd327b429d1c1c1c0889.tar.bz2
systemd-be2130690d066b582443fd327b429d1c1c1c0889.zip
sd-bus: create clean error when a property Set() call with incorrect signature is passed in
-rw-r--r--src/libsystemd/sd-bus/bus-objects.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index 0ab1119b5..6c3230aac 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -617,6 +617,9 @@ static int property_get_set_callbacks_run(
return r;
} else {
+ const char *signature = NULL;
+ char type = 0;
+
if (c->vtable->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY)
return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_PROPERTY_READ_ONLY, "Property '%s' is not writable.", c->member);
@@ -628,6 +631,13 @@ static int property_get_set_callbacks_run(
c->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_peek_type(m, &type, &signature);
+ if (r < 0)
+ return r;
+
+ if (type != 'v' || !streq(strempty(signature), strempty(c->vtable->x.property.signature)))
+ return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_INVALID_ARGS, "Incorrect parameters for property '%s', expected '%s', got '%s'.", c->member, strempty(c->vtable->x.property.signature), strempty(signature));
+
r = sd_bus_message_enter_container(m, 'v', c->vtable->x.property.signature);
if (r < 0)
return r;