On Fri, 2005-02-11 at 13:58 +0100, Tomislav Vujec wrote: >Hi, > >When the "domainName" DHCP option contains spaces, nm-named-manager >proclaims it as invalid, although multiple domain names are often used >in the DHCP server configuration. The attached patch fixes this >behavior. Tomislav, thanks for the patch. This should already be fixed in the latest CVS though. Which version of NetworkManager are you using?
Index: src/NetworkManagerDHCP.c =================================================================== RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerDHCP.c,v retrieving revision 1.9 diff -u -d -r1.9 NetworkManagerDHCP.c --- src/NetworkManagerDHCP.c 21 Jan 2005 19:32:08 -0000 1.9 +++ src/NetworkManagerDHCP.c 28 Jan 2005 23:52:01 -0000 @@ -81,31 +81,45 @@ } } -static void set_domain_search (NMDevice *dev, const char *domain) +static void set_domain_searches (NMDevice *dev, const char *searches_str) { GError *error = NULL; - guint id; + GList *elt; + char **searches; - if (dev->app_data->domain_search_id - && !nm_named_manager_remove_domain_search (dev->app_data->named, - dev->app_data->domain_search_id, - &error)) + /* Reset our domain search list */ + for (elt = dev->app_data->domain_search_ids; elt; elt = elt->next) { - syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Couldn't remove domain search: %s\n", error->message); - g_clear_error (&error); + if (!nm_named_manager_remove_domain_search (dev->app_data->named, + GPOINTER_TO_UINT (elt->data), + &error)) + { + syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Couldn't remove domain search: %s\n", error->message); + g_clear_error (&error); + } } - - syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Adding domain search: %s\n", domain); - if ((id = nm_named_manager_add_domain_search (dev->app_data->named, - domain, - &error))) - dev->app_data->domain_search_id = id; - else + g_list_free (dev->app_data->domain_search_ids); + dev->app_data->domain_search_ids = NULL; + + searches = g_strsplit (searches_str, " ", 0); + + for (; *searches; searches++) { - dev->app_data->domain_search_id = 0; - syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Couldn't add domain search: %s\n", error->message); - g_clear_error (&error); + const char *search_elt = *searches; + guint id; + + syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Adding domain search: %s\n", search_elt); + if ((id = nm_named_manager_add_domain_search (dev->app_data->named, + search_elt, + &error))) + dev->app_data->domain_search_ids = g_list_append (dev->app_data->domain_search_ids, GUINT_TO_POINTER (id)); + else + { + syslog (LOG_ERR, G_GNUC_PRETTY_FUNCTION ": Couldn't add domain search: %s\n", error->message); + g_clear_error (&error); + } } + g_strfreev (searches); } /* @@ -148,7 +162,7 @@ set_nameservers (dev, dhcp_interface_get_dhcp_field (dev->dhcp_iface, dns), dhcp_interface_get_dhcp_field_len (dev->dhcp_iface, dns)); if (dhcp_interface_dhcp_field_exists (dev->dhcp_iface, domainName)) - set_domain_search (dev, dhcp_interface_get_dhcp_field (dev->dhcp_iface, domainName)); + set_domain_searches (dev, dhcp_interface_get_dhcp_field (dev->dhcp_iface, domainName)); } Index: src/NetworkManagerMain.h =================================================================== RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerMain.h,v retrieving revision 1.8 diff -u -d -r1.8 NetworkManagerMain.h --- src/NetworkManagerMain.h 25 Jan 2005 18:21:38 -0000 1.8 +++ src/NetworkManagerMain.h 28 Jan 2005 23:52:01 -0000 @@ -39,7 +39,7 @@ NMNamedManager *named; GList *nameserver_ids; /* For now these are global instead of per-device */ - guint domain_search_id; + GList *domain_search_ids; DBusConnection *dbus_connection; GMainContext *main_context; cvs server: Diffing src/backends cvs server: Diffing test
Attachment:
signature.asc
Description: This is a digitally signed message part