From 6e8df5f00a3874decf1e5542da3d65b25f6da1dc Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 10 Dec 2013 16:49:00 +0000 Subject: [PATCH] bus: introduce new SD_BUS_VTABLE_HIDDEN flag for vtable members When this flag is set then its member will not be shown in the introspection data. Also, properties with this flag set will not be included in GetAll() responses. --- src/libsystemd-bus/bus-introspect.c | 3 +++ src/libsystemd-bus/bus-objects.c | 9 +++++++++ src/systemd/sd-bus-vtable.h | 1 + 3 files changed, 13 insertions(+) diff --git a/src/libsystemd-bus/bus-introspect.c b/src/libsystemd-bus/bus-introspect.c index 8bec017..504fab1 100644 --- a/src/libsystemd-bus/bus-introspect.c +++ b/src/libsystemd-bus/bus-introspect.c @@ -121,6 +121,9 @@ int introspect_write_interface(struct introspect *i, const sd_bus_vtable *v) { for (; v->type != _SD_BUS_VTABLE_END; v++) { + if (v->type != _SD_BUS_VTABLE_START && (v->flags & SD_BUS_VTABLE_HIDDEN)) + continue; + switch (v->type) { case _SD_BUS_VTABLE_START: diff --git a/src/libsystemd-bus/bus-objects.c b/src/libsystemd-bus/bus-objects.c index 941c281..8ffda2f 100644 --- a/src/libsystemd-bus/bus-objects.c +++ b/src/libsystemd-bus/bus-objects.c @@ -633,10 +633,16 @@ static int vtable_append_all_properties( assert(path); assert(c); + if (c->vtable[0].flags & SD_BUS_VTABLE_HIDDEN) + return 1; + for (v = c->vtable+1; v->type != _SD_BUS_VTABLE_END; v++) { if (v->type != _SD_BUS_VTABLE_PROPERTY && v->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY) continue; + if (v->flags & SD_BUS_VTABLE_HIDDEN) + continue; + r = sd_bus_message_open_container(reply, 'e', "sv"); if (r < 0) return r; @@ -853,6 +859,9 @@ static int process_introspect( empty = false; + if (c->vtable[0].flags & SD_BUS_VTABLE_HIDDEN) + continue; + if (!streq_ptr(previous_interface, c->interface)) { if (previous_interface) diff --git a/src/systemd/sd-bus-vtable.h b/src/systemd/sd-bus-vtable.h index e6e0a72..5400e9a 100644 --- a/src/systemd/sd-bus-vtable.h +++ b/src/systemd/sd-bus-vtable.h @@ -46,6 +46,7 @@ enum { SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE = 1ULL << 2, SD_BUS_VTABLE_PROPERTY_INVALIDATE_ONLY = 1ULL << 3, SD_BUS_VTABLE_UNPRIVILEGED = 1ULL << 4, + SD_BUS_VTABLE_HIDDEN = 1ULL << 5, _SD_BUS_VTABLE_CAPABILITY_MASK = 0xFFFFULL << 40 }; -- 2.1.4