From: Nick Rosbrook Date: Fri, 30 Jan 2026 19:34:34 +0000 (-0500) Subject: dns-configuration: use OrderedSet for servers and domains X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bfc82bf5aaacf6b19ecaf3e39aab53ee1c4a75a;p=thirdparty%2Fsystemd.git dns-configuration: use OrderedSet for servers and domains This only has a small effect, which mostly matters for generating status output. It ensures that the order of servers and domains displayed matches the order they are stored on the daemon side, which keeps the new resolvectl output consistent with the old. --- diff --git a/src/shared/dns-configuration.c b/src/shared/dns-configuration.c index 1003f497fa4..1194e872585 100644 --- a/src/shared/dns-configuration.c +++ b/src/shared/dns-configuration.c @@ -9,6 +9,7 @@ #include "in-addr-util.h" #include "iovec-util.h" #include "json-util.h" +#include "ordered-set.h" #include "set.h" #include "string-util.h" #include "strv.h" @@ -66,8 +67,8 @@ static int dispatch_dns_server(const char *name, sd_json_variant *variant, sd_js } static int dispatch_dns_server_array(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { - Set **ret = ASSERT_PTR(userdata); - _cleanup_set_free_ Set *dns_servers = NULL; + OrderedSet **ret = ASSERT_PTR(userdata); + _cleanup_ordered_set_free_ OrderedSet *dns_servers = NULL; sd_json_variant *v; int r; @@ -78,12 +79,13 @@ static int dispatch_dns_server_array(const char *name, sd_json_variant *variant, if (r < 0) return json_log(v, flags, r, "JSON array element is not a valid DNSServer."); - r = set_ensure_consume(&dns_servers, &dns_server_hash_ops, TAKE_PTR(s)); + r = ordered_set_ensure_put(&dns_servers, &dns_server_hash_ops, s); if (r < 0) return r; + TAKE_PTR(s); } - set_free_and_replace(*ret, dns_servers); + free_and_replace_full(*ret, dns_servers, ordered_set_free); return 0; } @@ -130,8 +132,8 @@ static int dispatch_search_domain(const char *name, sd_json_variant *variant, sd } static int dispatch_search_domain_array(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { - Set **ret = ASSERT_PTR(userdata); - _cleanup_set_free_ Set *search_domains = NULL; + OrderedSet **ret = ASSERT_PTR(userdata); + _cleanup_ordered_set_free_ OrderedSet *search_domains = NULL; sd_json_variant *v; int r; @@ -142,12 +144,13 @@ static int dispatch_search_domain_array(const char *name, sd_json_variant *varia if (r < 0) return json_log(v, flags, r, "JSON array element is not a valid SearchDomain."); - r = set_ensure_consume(&search_domains, &search_domain_hash_ops, TAKE_PTR(d)); + r = ordered_set_ensure_put(&search_domains, &search_domain_hash_ops, d); if (r < 0) return r; + TAKE_PTR(d); } - set_free_and_replace(*ret, search_domains); + free_and_replace_full(*ret, search_domains, ordered_set_free); return 0; } @@ -226,9 +229,9 @@ DNSConfiguration* dns_configuration_free(DNSConfiguration *c) { return NULL; dns_server_free(c->current_dns_server); - set_free(c->dns_servers); - set_free(c->search_domains); - set_free(c->fallback_dns_servers); + ordered_set_free(c->dns_servers); + ordered_set_free(c->search_domains); + ordered_set_free(c->fallback_dns_servers); set_free(c->dns_scopes); free(c->ifname); free(c->dnssec_mode_str); @@ -303,7 +306,7 @@ bool dns_is_accessible(DNSConfiguration *c) { if (c->current_dns_server && c->current_dns_server->accessible) return true; - SET_FOREACH(s, c->dns_servers) + ORDERED_SET_FOREACH(s, c->dns_servers) if (s->accessible) return true; @@ -318,7 +321,7 @@ bool dns_configuration_contains_search_domain(DNSConfiguration *c, const char *d if (!c) return false; - SET_FOREACH(d, c->search_domains) + ORDERED_SET_FOREACH(d, c->search_domains) if (streq(d->name, domain)) return true; diff --git a/src/shared/dns-configuration.h b/src/shared/dns-configuration.h index e195570b624..40f0a4ad169 100644 --- a/src/shared/dns-configuration.h +++ b/src/shared/dns-configuration.h @@ -45,9 +45,9 @@ typedef struct DNSConfiguration { int ifindex; bool default_route; DNSServer *current_dns_server; - Set *dns_servers; - Set *search_domains; - Set *fallback_dns_servers; + OrderedSet *dns_servers; + OrderedSet *search_domains; + OrderedSet *fallback_dns_servers; Set *dns_scopes; char *dnssec_mode_str; char *dns_over_tls_mode_str;