]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: add fallback servers list to DNSConfiguration
authorNick Rosbrook <enr0n@ubuntu.com>
Fri, 10 Oct 2025 19:56:35 +0000 (15:56 -0400)
committerNick Rosbrook <enr0n@ubuntu.com>
Thu, 6 Nov 2025 10:17:59 +0000 (05:17 -0500)
This is one of several commits to expand the DNSConfiguration varlink
type to include the necessary information for resolvectl status output.

src/resolve/resolved-manager.c
src/shared/varlink-io.systemd.Resolve.Monitor.c

index 259886ff0462e253f2a48c390254181a4bc41c9a..29c5f4488e27372d1c8e873b93586d4ae6cf6db4 100644 (file)
@@ -2047,6 +2047,7 @@ static int dns_configuration_json_append(
                 int default_route,
                 DnsServer *current_dns_server,
                 DnsServer *dns_servers,
+                DnsServer *fallback_dns_servers,
                 DnsSearchDomain *search_domains,
                 Set *negative_trust_anchors,
                 Set *dns_scopes,
@@ -2058,6 +2059,7 @@ static int dns_configuration_json_append(
                 sd_json_variant **configuration) {
 
         _cleanup_(sd_json_variant_unrefp) sd_json_variant *dns_servers_json = NULL,
+                                                          *fallback_dns_servers_json = NULL,
                                                           *search_domains_json = NULL,
                                                           *current_dns_server_json = NULL,
                                                           *scopes_json = NULL;
@@ -2084,6 +2086,12 @@ static int dns_configuration_json_append(
                         return r;
         }
 
+        if (fallback_dns_servers) {
+                r = sd_json_variant_new_array(&fallback_dns_servers_json, NULL, 0);
+                if (r < 0)
+                        return r;
+        }
+
         SET_FOREACH(scope, dns_scopes) {
                 _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
 
@@ -2129,6 +2137,20 @@ static int dns_configuration_json_append(
                         return r;
         }
 
+        LIST_FOREACH(servers, s, fallback_dns_servers) {
+                _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
+
+                assert(fallback_dns_servers_json);
+
+                r = dns_server_dump_configuration_to_json(s, &v);
+                if (r < 0)
+                        return r;
+
+                r = sd_json_variant_append_array(&fallback_dns_servers_json, v);
+                if (r < 0)
+                        return r;
+        }
+
         return sd_json_variant_append_arraybo(
                         configuration,
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("ifname", ifname),
@@ -2139,6 +2161,7 @@ static int dns_configuration_json_append(
                                                           default_route > 0),
                         JSON_BUILD_PAIR_VARIANT_NON_NULL("currentServer", current_dns_server_json),
                         JSON_BUILD_PAIR_VARIANT_NON_NULL("servers", dns_servers_json),
+                        JSON_BUILD_PAIR_VARIANT_NON_NULL("fallbackServers", fallback_dns_servers_json),
                         JSON_BUILD_PAIR_VARIANT_NON_NULL("searchDomains", search_domains_json),
                         SD_JSON_BUILD_PAIR_CONDITION(!set_isempty(negative_trust_anchors),
                                                      "negativeTrustAnchors",
@@ -2169,6 +2192,7 @@ static int global_dns_configuration_json_append(Manager *m, sd_json_variant **co
                         /* default_route = */ 0,
                         manager_get_dns_server(m),
                         m->dns_servers,
+                        m->fallback_dns_servers,
                         m->search_domains,
                         m->trust_anchor.negative_by_name,
                         scopes,
@@ -2224,6 +2248,7 @@ static int link_dns_configuration_json_append(Link *l, sd_json_variant **configu
                         link_get_default_route(l),
                         link_get_dns_server(l),
                         l->dns_servers,
+                        /* fallback_dns_servers = */ NULL,
                         l->search_domains,
                         l->dnssec_negative_trust_anchors,
                         scopes,
@@ -2253,6 +2278,7 @@ static int delegate_dns_configuration_json_append(DnsDelegate *d, sd_json_varian
                         d->default_route,
                         dns_delegate_get_dns_server(d),
                         d->dns_servers,
+                        /* fallback_dns_servers = */ NULL,
                         d->search_domains,
                         /* negative_trust_anchors = */ NULL,
                         scopes,
index 389da45a5e85708ebd17f71df91f3afc723eb9f7..a7ab279b5cf279f114cfacc7e541fe68f1dbbd2c 100644 (file)
@@ -167,6 +167,8 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
                 SD_VARLINK_DEFINE_FIELD_BY_TYPE(currentServer, DNSServer, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("Array of configured DNS servers."),
                 SD_VARLINK_DEFINE_FIELD_BY_TYPE(servers, DNSServer, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
+                SD_VARLINK_FIELD_COMMENT("Array of configured fallback DNS servers, set for global configuration only."),
+                SD_VARLINK_DEFINE_FIELD_BY_TYPE(fallbackServers, DNSServer, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("Array of configured search domains."),
                 SD_VARLINK_DEFINE_FIELD_BY_TYPE(searchDomains, SearchDomain, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("Array of configured DNSSEC negative trust anchors."),