X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-introspect.c;h=d528ab2a04b1fe826dc71a15c7b2d15578a19c4b;hb=4cdf07519a9582afa9d2deeb6d9f54597b8268a1;hp=504fab1b4b3b9b08861bc9e5985aa27d245bb2f7;hpb=6e8df5f00a3874decf1e5542da3d65b25f6da1dc;p=elogind.git diff --git a/src/libsystemd-bus/bus-introspect.c b/src/libsystemd-bus/bus-introspect.c index 504fab1b4..d528ab2a0 100644 --- a/src/libsystemd-bus/bus-introspect.c +++ b/src/libsystemd-bus/bus-introspect.c @@ -26,10 +26,11 @@ #include "bus-internal.h" #include "bus-protocol.h" -int introspect_begin(struct introspect *i) { +int introspect_begin(struct introspect *i, bool trusted) { assert(i); zero(*i); + i->trusted = trusted; i->f = open_memstream(&i->introspection, &i->size); if (!i->f) @@ -81,14 +82,18 @@ static void introspect_write_flags(struct introspect *i, int type, int flags) { fputs(" \n", i->f); if (type == _SD_BUS_VTABLE_PROPERTY || type == _SD_BUS_VTABLE_WRITABLE_PROPERTY) { - if (!(flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE)) - fputs(" \n", i->f); - else if (flags & SD_BUS_VTABLE_PROPERTY_INVALIDATE_ONLY) + if (flags & SD_BUS_VTABLE_PROPERTY_CONST) + fputs(" \n", i->f); + else if (flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION) fputs(" \n", i->f); + else if (!(flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE)) + fputs(" \n", i->f); } - if ((type == _SD_BUS_VTABLE_METHOD || type == _SD_BUS_VTABLE_WRITABLE_PROPERTY) && (flags & SD_BUS_VTABLE_UNPRIVILEGED)) - fputs(" \n", i->f); + if (!i->trusted && + (type == _SD_BUS_VTABLE_METHOD || type == _SD_BUS_VTABLE_WRITABLE_PROPERTY) && + !(flags & SD_BUS_VTABLE_UNPRIVILEGED)) + fputs(" \n", i->f); } static int introspect_write_arguments(struct introspect *i, const char *signature, const char *direction) { @@ -121,6 +126,10 @@ int introspect_write_interface(struct introspect *i, const sd_bus_vtable *v) { for (; v->type != _SD_BUS_VTABLE_END; v++) { + /* Ignore methods, signals and properties that are + * marked "hidden", but do show the interface + * itself */ + if (v->type != _SD_BUS_VTABLE_START && (v->flags & SD_BUS_VTABLE_HIDDEN)) continue;