diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 635e94f69f..545ac31958 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -1585,6 +1585,9 @@ plugin_skip:; */ if (caching) { const char *lladdr = "127.0.0.1"; + gboolean need_edns0; + gboolean need_trust; + guint len; if (NM_IS_DNS_SYSTEMD_RESOLVED(priv->plugin)) { /* systemd-resolved uses a different link-local address */ @@ -1594,6 +1597,19 @@ plugin_skip:; g_strfreev(nameservers); nameservers = g_new0(char *, 2); nameservers[0] = g_strdup(lladdr); + + need_edns0 = nm_utils_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_EDNS0) < 0; + need_trust = nm_utils_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_TRUST_AD) < 0; + + if (need_edns0 || need_trust) { + len = options ? g_strv_length(options) : 0; + options = g_realloc(options, sizeof(char *) * (len + 3)); + if (need_edns0) + options[len++] = g_strdup(NM_SETTING_DNS_OPTION_EDNS0); + if (need_trust) + options[len++] = g_strdup(NM_SETTING_DNS_OPTION_TRUST_AD); + options[len] = NULL; + } } if (do_update) {