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