From: Yu Watanabe Date: Thu, 24 Apr 2025 01:00:36 +0000 (+0900) Subject: core/dbus-cgroup: use bus_message_read_in_addr_auto() at one more place X-Git-Tag: v258-rc1~745^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F37230%2Fhead;p=thirdparty%2Fsystemd.git core/dbus-cgroup: use bus_message_read_in_addr_auto() at one more place --- diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 09692a93ec5..6f5d2c0b9e1 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -1636,46 +1636,29 @@ int bus_cgroup_set_property( return r; for (;;) { - const void *ap; - int32_t family; - uint32_t prefixlen; - size_t an; - r = sd_bus_message_enter_container(message, 'r', "iayu"); if (r < 0) return r; if (r == 0) break; - r = sd_bus_message_read(message, "i", &family); - if (r < 0) - return r; - - if (!IN_SET(family, AF_INET, AF_INET6)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= expects IPv4 or IPv6 addresses only.", name); - - r = sd_bus_message_read_array(message, 'y', &ap, &an); + struct in_addr_prefix prefix; + r = bus_message_read_in_addr_auto(message, error, &prefix.family, &prefix.address); if (r < 0) return r; - if (an != FAMILY_ADDRESS_SIZE(family)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "IP address has wrong size for family (%s, expected %zu, got %zu)", - af_to_name(family), FAMILY_ADDRESS_SIZE(family), an); - + uint32_t prefixlen; r = sd_bus_message_read(message, "u", &prefixlen); if (r < 0) return r; - if (prefixlen > FAMILY_ADDRESS_SIZE(family)*8) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Prefix length %" PRIu32 " too large for address family %s.", prefixlen, af_to_name(family)); + if (prefixlen > FAMILY_ADDRESS_SIZE(prefix.family)*8) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, + "Prefix length %" PRIu32 " too large for address family %s.", + prefixlen, af_to_name(prefix.family)); if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - struct in_addr_prefix prefix = { - .family = family, - .prefixlen = prefixlen, - }; - - memcpy(&prefix.address, ap, an); + prefix.prefixlen = (uint8_t) prefixlen; r = in_addr_prefix_add(&new_prefixes, &prefix); if (r < 0)