NetworkManager and NIS



Hi folks,

I played a bit around with NetworkManager and I think a must-have feature that 
is currently missing is surely to set up NIS if available. I already prepared 
a bit of code (diff attached) to read the NIS domain, and NIS servers from 
the dhcp reply into NMIP4Config. 

What's still to be done is to set up the nis domain name and modify yp.conf 
accordingly. This should probably placed somehow in the distribution specific 
backends (i don't know how distribution specific that task really is)? 

What do you think?

Stefan
diff -ur NetworkManager-0.5.1cvs20051212/src/dhcp-manager/nm-dhcp-manager.c NetworkManager-patched/src/dhcp-manager/nm-dhcp-manager.c
--- NetworkManager-0.5.1cvs20051212/src/dhcp-manager/nm-dhcp-manager.c	2005-12-12 16:29:32.000000000 +0100
+++ NetworkManager-patched/src/dhcp-manager/nm-dhcp-manager.c	2005-12-13 17:43:25.000000000 +0100
@@ -469,7 +469,10 @@
 	guint32 *		ip4_nameservers = NULL;
 	guint32 *		ip4_gateway = NULL;
 	guint32		num_ip4_nameservers = 0;
+	guint32		num_ip4_nis_servers = 0;
 	char *		domain_names = NULL;
+	char *		nis_domain = NULL;
+	guint32 *		ip4_nis_servers = NULL;
 	struct in_addr	temp_addr;
         nm_completion_args args;
 
@@ -509,6 +512,8 @@
 
 	get_ip4_uint32s (manager, dev, "domain_name_servers", &ip4_nameservers, &num_ip4_nameservers);
 	get_ip4_string (manager, dev, "domain_name", &domain_names);
+	get_ip4_string (manager, dev, "nis_domain", &nis_domain);
+	get_ip4_uint32s (manager, dev, "nis_servers", &ip4_nis_servers, &num_ip4_nis_servers);
 
 	nm_info ("Retrieved the following IP4 configuration from the DHCP daemon:");
 
@@ -549,6 +554,21 @@
 		g_strfreev (searches);
 	}
 
+	if (nis_domain) {
+		nm_ip4_config_set_nis_domain( ip4_config, nis_domain);
+		nm_info ("  nis domain '%s'", nis_domain);
+	}
+
+	for (i = 0; i < num_ip4_nis_servers; i++)
+	{
+		nm_ip4_config_add_nis_server (ip4_config, ip4_nis_servers[i]);
+		temp_addr.s_addr = ip4_nis_servers[i];
+		nm_info ("  nis server %s", inet_ntoa (temp_addr));
+	}
+
+	nm_info("nis_servers = %d", nm_ip4_config_get_num_nis_servers(ip4_config));
+	nm_info("nis domain = %s", nm_ip4_config_get_nis_domain(ip4_config));
+
 out:
 	return ip4_config;
 }
diff -ur NetworkManager-0.5.1cvs20051212/src/nm-ip4-config.c NetworkManager-patched/src/nm-ip4-config.c
--- NetworkManager-0.5.1cvs20051212/src/nm-ip4-config.c	2005-12-04 03:23:29.000000000 +0100
+++ NetworkManager-patched/src/nm-ip4-config.c	2005-12-13 17:53:05.000000000 +0100
@@ -42,6 +42,9 @@
 	GSList *	nameservers;
 	GSList *	domains;
 
+	gchar *	 nis_domain;
+	GSList * nis_servers;
+
 	/* If this is a VPN/etc config that requires
 	 * another device (like Ethernet) to already have
 	 * an IP4Config before it can be used.
@@ -74,6 +77,8 @@
 	dst_config->ip4_netmask = nm_ip4_config_get_netmask (src_config);
 	dst_config->ip4_broadcast = nm_ip4_config_get_broadcast (src_config);
 
+	dst_config->nis_domain = g_strdup(nm_ip4_config_get_nis_domain(src_config));
+
 	len = nm_ip4_config_get_num_nameservers (src_config);
 	for (i = 0; i < len; i++)
 		nm_ip4_config_add_nameserver (dst_config, nm_ip4_config_get_nameserver (src_config, i));
@@ -82,6 +87,10 @@
 	for (i = 0; i < len; i++)
 		nm_ip4_config_add_domain (dst_config, nm_ip4_config_get_domain (src_config, i));
 
+	len = nm_ip4_config_get_num_nis_servers (src_config);
+	for (i = 0; i < len; i++)
+		nm_ip4_config_add_nis_server (dst_config, nm_ip4_config_get_nis_server (src_config, i));
+
 	return dst_config;
 }
 
@@ -102,6 +111,7 @@
 		g_slist_free (config->nameservers);
 		g_slist_foreach (config->domains, (GFunc) g_free, NULL);
 		g_slist_free (config->domains);
+		g_slist_free (config->nis_servers);
 
 		memset (config, 0, sizeof (NMIP4Config));
 		g_free (config);
@@ -204,6 +214,32 @@
 	return (g_slist_length (config->nameservers));
 }
 
+void nm_ip4_config_add_nis_server (NMIP4Config *config, guint32 nis_server)
+{
+	g_return_if_fail (config != NULL);
+
+	config->nis_servers = g_slist_append (config->nis_servers, GINT_TO_POINTER (nis_server));
+}
+
+guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint index)
+{
+	guint nis_server;
+
+	g_return_val_if_fail (config != NULL, 0);
+	g_return_val_if_fail (index < g_slist_length (config->nis_servers), 0);
+
+	if ((nis_server = GPOINTER_TO_UINT (g_slist_nth_data (config->nis_servers, index))))
+		return nis_server;
+	return 0;
+}
+
+guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config)
+{
+	g_return_val_if_fail (config != NULL, 0);
+
+	return (g_slist_length (config->nis_servers));
+}
+
 void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain)
 {
 	g_return_if_fail (config != NULL);
@@ -215,6 +251,23 @@
 	config->domains = g_slist_append (config->domains, g_strdup (domain));
 }
 
+void nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain) 
+{
+	g_return_if_fail (config != NULL);
+	g_return_if_fail (domain != NULL);
+	
+	if (!strlen (domain))
+		return;
+	
+	config->nis_domain = g_strdup(domain);
+}
+
+gchar *nm_ip4_config_get_nis_domain (NMIP4Config *config)
+{
+	g_return_val_if_fail( config != NULL, NULL);
+	return config->nis_domain;
+}
+
 const char *nm_ip4_config_get_domain (NMIP4Config *config, guint index)
 {
 	const char *domain;
diff -ur NetworkManager-0.5.1cvs20051212/src/nm-ip4-config.h NetworkManager-patched/src/nm-ip4-config.h
--- NetworkManager-0.5.1cvs20051212/src/nm-ip4-config.h	2005-10-28 05:16:02.000000000 +0200
+++ NetworkManager-patched/src/nm-ip4-config.h	2005-12-13 17:25:44.000000000 +0100
@@ -51,6 +51,13 @@
 guint32		nm_ip4_config_get_nameserver		(NMIP4Config *config, guint index);
 guint32		nm_ip4_config_get_num_nameservers	(NMIP4Config *config);
 
+void			nm_ip4_config_add_nis_server		(NMIP4Config *config, guint32 nis_server);
+guint32		nm_ip4_config_get_nis_server		(NMIP4Config *config, guint index);
+guint32		nm_ip4_config_get_num_nis_servers	(NMIP4Config *config);
+
+void nm_ip4_config_set_nis_domain (NMIP4Config *config, const char *domain);
+gchar *nm_ip4_config_get_nis_domain (NMIP4Config *config);
+
 void			nm_ip4_config_add_domain			(NMIP4Config *config, const char *domain);
 const char *	nm_ip4_config_get_domain			(NMIP4Config *config, guint index);
 guint32		nm_ip4_config_get_num_domains		(NMIP4Config *config);

Attachment: pgplhwR4RQH6t.pgp
Description: digital signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]