void set_ip6_dns_servers (NMSettingIPConfig *s_ip6, const char *conn_name) { const char *dns_servers; gchar **server_list, *stripped; guint length, i; struct in6_addr tmp_ip6_addr; dns_servers = ifnet_get_data (conn_name, "dns_servers"); if (!dns_servers) return; stripped = g_strdup (dns_servers); strip_string (stripped, '"'); server_list = g_strsplit (stripped, " ", 0); g_free (stripped); length = g_strv_length (server_list); if (length) g_object_set (s_ip6, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE, NULL); for (i = 0; i < length; i++) { g_strstrip (server_list[i]); if (server_list[i][0] == '\0') continue; if (!inet_pton (AF_INET6, server_list[i], &tmp_ip6_addr)) { if (is_ip6_address (server_list[i])) nm_log_warn (LOGD_SETTINGS, "ignored dns: %s\n", server_list[i]); continue; } if (!nm_setting_ip_config_add_dns (s_ip6, server_list[i])) nm_log_warn (LOGD_SETTINGS, "warning: duplicate DNS server %s", server_list[i]); } g_strfreev (server_list); }
static void ifupdown_ip6_add_dns (NMSettingIPConfig *s_ip6, const char *dns) { struct in6_addr addr; char **list, **iter; if (dns == NULL) return; list = g_strsplit_set (dns, " \t", -1); for (iter = list; iter && *iter; iter++) { g_strstrip (*iter); if (g_ascii_isspace (*iter[0])) continue; if (!inet_pton (AF_INET6, *iter, &addr)) { nm_log_warn (LOGD_SETTINGS, " ignoring invalid nameserver '%s'", *iter); continue; } if (!nm_setting_ip_config_add_dns (s_ip6, *iter)) nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter); } g_strfreev (list); }