static gboolean add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split) { char buf[INET_ADDRSTRLEN + 1]; struct in_addr addr; int n, i; gboolean added = FALSE; if (split) { char **domains, **iter; /* FIXME: it appears that dnsmasq can only handle one nameserver * per domain (and the manpage says this too) so only use the first * nameserver here. */ addr.s_addr = nm_ip4_config_get_nameserver (ip4, 0); memset (&buf[0], 0, sizeof (buf)); if (!inet_ntop (AF_INET, &addr, buf, sizeof (buf))) return FALSE; /* searches are preferred over domains */ n = nm_ip4_config_get_num_searches (ip4); for (i = 0; i < n; i++) { g_string_append_printf (str, "server=/%s/%s\n", nm_ip4_config_get_search (ip4, i), buf); added = TRUE; } if (n == 0) { /* If not searches, use any domains */ n = nm_ip4_config_get_num_domains (ip4); for (i = 0; i < n; i++) { g_string_append_printf (str, "server=/%s/%s\n", nm_ip4_config_get_domain (ip4, i), buf); added = TRUE; } } /* Ensure reverse-DNS works by directing queries for in-addr.arpa * domains to the split domain's nameserver. */ domains = nm_dns_utils_get_ip4_rdns_domains (ip4); if (domains) { for (iter = domains; iter && *iter; iter++) g_string_append_printf (str, "server=/%s/%s\n", *iter, buf); g_strfreev (domains); added = TRUE; } } /* If no searches or domains, just add the namservers */ if (!added) { n = nm_ip4_config_get_num_nameservers (ip4); for (i = 0; i < n; i++) { memset (&buf[0], 0, sizeof (buf)); addr.s_addr = nm_ip4_config_get_nameserver (ip4, i); if (inet_ntop (AF_INET, &addr, buf, sizeof (buf))) g_string_append_printf (str, "server=%s\n", buf); } } return TRUE; }
static gboolean add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split) { char buf[INET_ADDRSTRLEN]; in_addr_t addr; int nnameservers, i_nameserver, n, i; gboolean added = FALSE; nnameservers = nm_ip4_config_get_num_nameservers (ip4); if (split) { char **domains, **iter; if (nnameservers == 0) return FALSE; for (i_nameserver = 0; i_nameserver < nnameservers; i_nameserver++) { addr = nm_ip4_config_get_nameserver (ip4, i_nameserver); nm_utils_inet4_ntop (addr, buf); /* searches are preferred over domains */ n = nm_ip4_config_get_num_searches (ip4); for (i = 0; i < n; i++) { g_string_append_printf (str, "server=/%s/%s\n", nm_ip4_config_get_search (ip4, i), buf); added = TRUE; } if (n == 0) { /* If not searches, use any domains */ n = nm_ip4_config_get_num_domains (ip4); for (i = 0; i < n; i++) { g_string_append_printf (str, "server=/%s/%s\n", nm_ip4_config_get_domain (ip4, i), buf); added = TRUE; } } /* Ensure reverse-DNS works by directing queries for in-addr.arpa * domains to the split domain's nameserver. */ domains = nm_dns_utils_get_ip4_rdns_domains (ip4); if (domains) { for (iter = domains; iter && *iter; iter++) g_string_append_printf (str, "server=/%s/%s\n", *iter, buf); g_strfreev (domains); added = TRUE; } } } /* If no searches or domains, just add the namservers */ if (!added) { for (i = 0; i < nnameservers; i++) { addr = nm_ip4_config_get_nameserver (ip4, i); g_string_append_printf (str, "server=%s\n", nm_utils_inet4_ntop (addr, NULL)); } } return TRUE; }