diff --git a/ChangeLog b/ChangeLog index 9bf19c82d3..86aefbf5aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,17 @@ -2005-12-12 Robert Love +2005-12-13 Robert Love + + Patch by Stefan Scheler : + * src/nm-ip4-config.h, src/nm-ip4-config.c, + src/dhcp-manager/nm-dhcp-manager.c: Add support for setting up NIS + via DHCP. Still need the backends to commit the NIS domain name and + and servers to yp.conf as needed. + +2005-12-13 Robert Love * src/vpn-manager/nm-dbus-vpn.c: Do not call the lengthy-named function nm_vpn_manager_remove_connection() unless vpn is non-NULL. -2005-12-12 Robert Love +2005-12-13 Robert Love * src/named-manager/nm-named-manager.c: Don't unref the config until after we call rewrite_resolv_conf(), because get_last_default_domain() diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c index b4637a70b2..cb6b27abb2 100644 --- a/src/dhcp-manager/nm-dhcp-manager.c +++ b/src/dhcp-manager/nm-dhcp-manager.c @@ -469,7 +469,10 @@ NMIP4Config * nm_dhcp_manager_get_ip4_config (NMDHCPManager *manager, NMActReque 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 @@ NMIP4Config * nm_dhcp_manager_get_ip4_config (NMDHCPManager *manager, NMActReque 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 @@ NMIP4Config * nm_dhcp_manager_get_ip4_config (NMDHCPManager *manager, NMActReque 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 --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index bcf4ecded5..9b6070075b 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -42,6 +42,9 @@ struct NMIP4Config 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 @@ NMIP4Config *nm_ip4_config_copy (NMIP4Config *src_config) 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 @@ NMIP4Config *nm_ip4_config_copy (NMIP4Config *src_config) 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; } @@ -99,9 +108,11 @@ void nm_ip4_config_unref (NMIP4Config *config) config->refcount--; if (config->refcount <= 0) { + g_free (config->nis_domain); 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 +215,32 @@ guint32 nm_ip4_config_get_num_nameservers (NMIP4Config *config) 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 +252,23 @@ void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain) 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 --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h index 05cf3c627a..ce0203777b 100644 --- a/src/nm-ip4-config.h +++ b/src/nm-ip4-config.h @@ -51,6 +51,13 @@ void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver); 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);