dns: send NIS servers and domain to SUSE's netconfig

This commit is contained in:
Dan Williams
2010-07-16 12:44:50 -07:00
parent e780145a8f
commit 786ac623ab

View File

@@ -105,6 +105,8 @@ typedef struct {
GPtrArray *nameservers; GPtrArray *nameservers;
const char *domain; const char *domain;
GPtrArray *searches; GPtrArray *searches;
const char *nis_domain;
GPtrArray *nis_servers;
} NMResolvConfData; } NMResolvConfData;
static void static void
@@ -155,6 +157,23 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
num = nm_ip4_config_get_num_searches (src); num = nm_ip4_config_get_num_searches (src);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
add_string_item (rc->searches, nm_ip4_config_get_search (src, i)); add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
/* NIS stuff */
num = nm_ip4_config_get_num_nis_servers (src);
for (i = 0; i < num; i++) {
struct in_addr addr;
char buf[INET_ADDRSTRLEN];
addr.s_addr = nm_ip4_config_get_nis_server (src, i);
if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
add_string_item (rc->nis_servers, buf);
}
if (nm_ip4_config_get_nis_domain (src)) {
/* FIXME: handle multiple domains */
if (!rc->nis_domain)
rc->nis_domain = nm_ip4_config_get_nis_domain (src);
}
} }
static void static void
@@ -246,6 +265,8 @@ static gboolean
dispatch_netconfig (const char *domain, dispatch_netconfig (const char *domain,
char **searches, char **searches,
char **nameservers, char **nameservers,
const char *nis_domain,
char **nis_servers,
const char *iface, const char *iface,
GError **error) GError **error)
{ {
@@ -290,6 +311,15 @@ dispatch_netconfig (const char *domain,
g_free (str); g_free (str);
} }
if (nis_domain)
write_to_netconfig (fd, "NISDOMAIN", nis_domain);
if (nis_servers) {
str = g_strjoinv (" ", nis_servers);
write_to_netconfig (fd, "NISSERVERS", str);
g_free (str);
}
close (fd); close (fd);
/* Wait until the process exits */ /* Wait until the process exits */
@@ -509,8 +539,10 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
NMResolvConfData rc; NMResolvConfData rc;
GSList *iter; GSList *iter;
const char *domain = NULL; const char *domain = NULL;
const char *nis_domain = NULL;
char **searches = NULL; char **searches = NULL;
char **nameservers = NULL; char **nameservers = NULL;
char **nis_servers = NULL;
int num, i, len; int num, i, len;
gboolean success = FALSE; gboolean success = FALSE;
@@ -527,6 +559,7 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
rc.nameservers = g_ptr_array_new (); rc.nameservers = g_ptr_array_new ();
rc.domain = NULL; rc.domain = NULL;
rc.searches = g_ptr_array_new (); rc.searches = g_ptr_array_new ();
rc.nis_servers = g_ptr_array_new ();
if (priv->ip4_vpn_config) if (priv->ip4_vpn_config)
merge_one_ip4_config (&rc, priv->ip4_vpn_config); merge_one_ip4_config (&rc, priv->ip4_vpn_config);
@@ -595,13 +628,24 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
} else } else
g_ptr_array_free (rc.nameservers, TRUE); g_ptr_array_free (rc.nameservers, TRUE);
if (rc.nis_servers->len) {
g_ptr_array_add (rc.nis_servers, NULL);
nis_servers = (char **) g_ptr_array_free (rc.nis_servers, FALSE);
} else
g_ptr_array_free (rc.nis_servers, TRUE);
nis_domain = rc.nis_domain;
#ifdef RESOLVCONF_PATH #ifdef RESOLVCONF_PATH
success = dispatch_resolvconf (domain, searches, nameservers, iface, error); success = dispatch_resolvconf (domain, searches, nameservers, iface, error);
#endif #endif
#ifdef TARGET_SUSE #ifdef TARGET_SUSE
if (success == FALSE) if (success == FALSE) {
success = dispatch_netconfig (domain, searches, nameservers, iface, error); success = dispatch_netconfig (domain, searches, nameservers,
nis_domain, nis_servers,
iface, error);
}
#endif #endif
if (success == FALSE) if (success == FALSE)
@@ -614,6 +658,8 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
g_strfreev (searches); g_strfreev (searches);
if (nameservers) if (nameservers)
g_strfreev (nameservers); g_strfreev (nameservers);
if (nis_servers)
g_strfreev (nis_servers);
return success; return success;
} }