Re: Problem (and the patch) when having multiple search domains on a network.



On Fri, 2005-02-11 at 22:51 +0100, Tomislav Vujec wrote:
>On Fri, 11 Feb 2005 09:21:10 -0500, Colin Walters wrote:
>> Tomislav, thanks for the patch.  This should already be fixed in the
>> latest CVS though.  Which version of NetworkManager are you using?
>
>The fix in the patch you posted would work too, but I can't find it in the
>CVS. It seems that there is a single branch, and no diffs after 1.9
>include your change. I am using the revision 1.12 which is the current
>HEAD. Could it be that this patch is only in your private tree?

Ah, how embarrassing :)  Indeed.

Could you try the patch?  I'm in the middle of a number of things right
now and won't have a chance to set up a DHCP server etc for testing
soon.

I am still wondering whether this is actually a standard DHCP feature,
and if it is whether other separators like tab are valid.


Index: src/NetworkManagerMain.h
===================================================================
RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerMain.h,v
retrieving revision 1.9
diff -u -d -r1.9 NetworkManagerMain.h
--- src/NetworkManagerMain.h	7 Feb 2005 23:04:05 -0000	1.9
+++ src/NetworkManagerMain.h	11 Feb 2005 23:00:41 -0000
@@ -42,7 +42,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;
 	NMDbusMethodList		*nm_methods;
Index: src/NetworkManagerDHCP.c
===================================================================
RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerDHCP.c,v
retrieving revision 1.12
diff -u -d -r1.12 NetworkManagerDHCP.c
--- src/NetworkManagerDHCP.c	10 Feb 2005 20:54:04 -0000	1.12
+++ src/NetworkManagerDHCP.c	11 Feb 2005 23:00:41 -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);
 }
 
 /*
@@ -151,7 +165,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));
 }
 
 

Attachment: signature.asc
Description: This is a digitally signed message part



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