diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 726035b00a..59d7a3ba71 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -7,6 +7,7 @@ #include "bpf-firewall.h" #include "bpf-foreign.h" #include "bus-get-properties.h" +#include "bus-util.h" #include "cgroup-util.h" #include "cgroup.h" #include "core-varlink.h" @@ -400,9 +401,9 @@ static int property_get_restrict_network_interfaces( sd_bus_message *reply, void *userdata, sd_bus_error *error) { - int r; + CGroupContext *c = ASSERT_PTR(userdata); - char *iface; + int r; assert(bus); assert(reply); @@ -415,17 +416,7 @@ static int property_get_restrict_network_interfaces( if (r < 0) return r; - r = sd_bus_message_open_container(reply, 'a', "s"); - if (r < 0) - return r; - - SET_FOREACH(iface, c->restrict_network_interfaces) { - r = sd_bus_message_append(reply, "s", iface); - if (r < 0) - return r; - } - - r = sd_bus_message_close_container(reply); + r = bus_message_append_string_set(reply, c->restrict_network_interfaces); if (r < 0) return r; diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 57e9eb8254..04070a7f1e 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -10,6 +10,7 @@ #include "af-list.h" #include "alloc-util.h" #include "bus-get-properties.h" +#include "bus-util.h" #include "cap-list.h" #include "capability-util.h" #include "cpu-set-util.h" @@ -929,36 +930,6 @@ static int property_get_load_credential( return sd_bus_message_close_container(reply); } -static int property_get_import_credential( - sd_bus *bus, - const char *path, - const char *interface, - const char *property, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error) { - - ExecContext *c = ASSERT_PTR(userdata); - const char *s; - int r; - - assert(bus); - assert(property); - assert(reply); - - r = sd_bus_message_open_container(reply, 'a', "s"); - if (r < 0) - return r; - - SET_FOREACH(s, c->import_credentials) { - r = sd_bus_message_append(reply, "s", s); - if (r < 0) - return r; - } - - return sd_bus_message_close_container(reply); -} - static int property_get_root_hash( sd_bus *bus, const char *path, @@ -1312,7 +1283,7 @@ const sd_bus_vtable bus_exec_vtable[] = { SD_BUS_PROPERTY("SetCredentialEncrypted", "a(say)", property_get_set_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("LoadCredential", "a(ss)", property_get_load_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("LoadCredentialEncrypted", "a(ss)", property_get_load_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST), - SD_BUS_PROPERTY("ImportCredential", "as", property_get_import_credential, 0, SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("ImportCredential", "as", bus_property_get_string_set, offsetof(ExecContext, import_credentials), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("SupplementaryGroups", "as", NULL, offsetof(ExecContext, supplementary_groups), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("PAMName", "s", NULL, offsetof(ExecContext, pam_name), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("ReadWritePaths", "as", NULL, offsetof(ExecContext, read_write_paths), SD_BUS_VTABLE_PROPERTY_CONST), diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c index 12d0d28bab..334ae8dcff 100644 --- a/src/resolve/resolved-bus.c +++ b/src/resolve/resolved-bus.c @@ -1677,34 +1677,6 @@ static int bus_property_get_dnssec_statistics( (uint64_t) m->n_dnssec_verdict[DNSSEC_INDETERMINATE]); } -static int bus_property_get_ntas( - sd_bus *bus, - const char *path, - const char *interface, - const char *property, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error) { - - Manager *m = ASSERT_PTR(userdata); - const char *domain; - int r; - - assert(reply); - - r = sd_bus_message_open_container(reply, 'a', "s"); - if (r < 0) - return r; - - SET_FOREACH(domain, m->trust_anchor.negative_by_name) { - r = sd_bus_message_append(reply, "s", domain); - if (r < 0) - return r; - } - - return sd_bus_message_close_container(reply); -} - static BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_dns_stub_listener_mode, dns_stub_listener_mode, DnsStubListenerMode); static BUS_DEFINE_PROPERTY_GET(bus_property_get_dnssec_supported, "b", Manager, manager_dnssec_supported); static BUS_DEFINE_PROPERTY_GET2(bus_property_get_dnssec_mode, "s", Manager, manager_get_dnssec_mode, dnssec_mode_to_string); @@ -2102,7 +2074,7 @@ static const sd_bus_vtable resolve_vtable[] = { SD_BUS_PROPERTY("DNSSEC", "s", bus_property_get_dnssec_mode, 0, 0), SD_BUS_PROPERTY("DNSSECStatistics", "(tttt)", bus_property_get_dnssec_statistics, 0, 0), SD_BUS_PROPERTY("DNSSECSupported", "b", bus_property_get_dnssec_supported, 0, 0), - SD_BUS_PROPERTY("DNSSECNegativeTrustAnchors", "as", bus_property_get_ntas, 0, 0), + SD_BUS_PROPERTY("DNSSECNegativeTrustAnchors", "as", bus_property_get_string_set, offsetof(Manager, trust_anchor.negative_by_name), 0), SD_BUS_PROPERTY("DNSStubListener", "s", bus_property_get_dns_stub_listener_mode, offsetof(Manager, dns_stub_listener_mode), 0), SD_BUS_PROPERTY("ResolvConfMode", "s", bus_property_get_resolv_conf_mode, 0, 0), diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c index 9b6d14f20c..4f8f591306 100644 --- a/src/resolve/resolved-link-bus.c +++ b/src/resolve/resolved-link-bus.c @@ -207,34 +207,6 @@ static int property_get_scopes_mask( return sd_bus_message_append(reply, "t", mask); } -static int property_get_ntas( - sd_bus *bus, - const char *path, - const char *interface, - const char *property, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error) { - - Link *l = ASSERT_PTR(userdata); - const char *name; - int r; - - assert(reply); - - r = sd_bus_message_open_container(reply, 'a', "s"); - if (r < 0) - return r; - - SET_FOREACH(name, l->dnssec_negative_trust_anchors) { - r = sd_bus_message_append(reply, "s", name); - if (r < 0) - return r; - } - - return sd_bus_message_close_container(reply); -} - static int verify_unmanaged_link(Link *l, sd_bus_error *error) { assert(l); @@ -870,7 +842,7 @@ static const sd_bus_vtable link_vtable[] = { SD_BUS_PROPERTY("MulticastDNS", "s", property_get_mdns_support, 0, 0), SD_BUS_PROPERTY("DNSOverTLS", "s", property_get_dns_over_tls_mode, 0, 0), SD_BUS_PROPERTY("DNSSEC", "s", property_get_dnssec_mode, 0, 0), - SD_BUS_PROPERTY("DNSSECNegativeTrustAnchors", "as", property_get_ntas, 0, 0), + SD_BUS_PROPERTY("DNSSECNegativeTrustAnchors", "as", bus_property_get_string_set, offsetof(Link, dnssec_negative_trust_anchors), 0), SD_BUS_PROPERTY("DNSSECSupported", "b", property_get_dnssec_supported, 0, 0), SD_BUS_METHOD_WITH_ARGS("SetDNS", diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index 4eb1b1c316..d4c91fa3aa 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -678,3 +678,40 @@ const struct hash_ops bus_message_hash_ops = { .compare = trivial_compare_func, .free_value = bus_message_unref_wrapper, }; + +int bus_message_append_string_set(sd_bus_message *m, Set *set) { + const char *s; + int r; + + assert(m); + + r = sd_bus_message_open_container(m, 'a', "s"); + if (r < 0) + return r; + + SET_FOREACH(s, set) { + r = sd_bus_message_append(m, "s", s); + if (r < 0) + return r; + } + + return sd_bus_message_close_container(m); +} + +int bus_property_get_string_set( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + Set **s = ASSERT_PTR(userdata); + + assert(bus); + assert(property); + assert(reply); + + return bus_message_append_string_set(reply, *s); +} diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h index 81f5d0f152..869c639aeb 100644 --- a/src/shared/bus-util.h +++ b/src/shared/bus-util.h @@ -12,6 +12,7 @@ #include "errno-util.h" #include "macro.h" #include "runtime-scope.h" +#include "set.h" #include "string-util.h" #include "time-util.h" @@ -68,3 +69,7 @@ int bus_reply_pair_array(sd_bus_message *m, char **l); int bus_register_malloc_status(sd_bus *bus, const char *destination); extern const struct hash_ops bus_message_hash_ops; + +int bus_message_append_string_set(sd_bus_message *m, Set *s); + +int bus_property_get_string_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);