[Pkg-utopia-commits] r2156 - in /packages/unstable/networkmanager/debian: changelog patches/07-domain_search.patch

biebl at users.alioth.debian.org biebl at users.alioth.debian.org
Thu Apr 3 00:24:41 UTC 2008


Author: biebl
Date: Thu Apr  3 00:24:41 2008
New Revision: 2156

URL: http://svn.debian.org/wsvn/pkg-utopia/?sc=1&rev=2156
Log:
debian/patches/07-domain_search.patch
- Add support for DHCP domain-search option. (Closes: #465158)
Thanks to Bas Zoetekouw for the patch.

Added:
    packages/unstable/networkmanager/debian/patches/07-domain_search.patch
Modified:
    packages/unstable/networkmanager/debian/changelog

Modified: packages/unstable/networkmanager/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/networkmanager/debian/changelog?rev=2156&op=diff
==============================================================================
--- packages/unstable/networkmanager/debian/changelog (original)
+++ packages/unstable/networkmanager/debian/changelog Thu Apr  3 00:24:41 2008
@@ -15,6 +15,9 @@
     - debian/patches/25-libnl_unique_pid_r3155.patch (applied upstream)
     - debian/patches/26-libnl_1.0-pre8_r3206.patch (applied upstream)
     - debian/patches/27-dont_repeat_errors.patch (applied upstream)
+  * debian/patches/07-domain_search.patch
+    - Add support for DHCP domain-search option. (Closes: #465158)
+      Thanks to Bas Zoetekouw for the patch.
   * debian/patches/06-dispatch_more_events.patch
     - NetworkManagerDispatcher.1.in has been renamed to
       NetworkManagerDispatcher.8.in. Update the patch accordingly.

Added: packages/unstable/networkmanager/debian/patches/07-domain_search.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/networkmanager/debian/patches/07-domain_search.patch?rev=2156&op=file
==============================================================================
--- packages/unstable/networkmanager/debian/patches/07-domain_search.patch (added)
+++ packages/unstable/networkmanager/debian/patches/07-domain_search.patch Thu Apr  3 00:24:41 2008
@@ -1,0 +1,281 @@
+Index: NetworkManager-0.6/src/dhcp-manager/nm-dhcp-manager.c
+===================================================================
+--- NetworkManager-0.6.orig/src/dhcp-manager/nm-dhcp-manager.c	2008-03-02 09:25:16.000000000 +0100
++++ NetworkManager-0.6/src/dhcp-manager/nm-dhcp-manager.c	2008-03-02 09:26:33.000000000 +0100
+@@ -472,6 +472,7 @@
+ 	guint32		num_ip4_nis_servers = 0;
+ 	char *		hostname = NULL;
+ 	char *		domain_names = NULL;
++	char *		domain_searches = NULL;
+ 	char *		nis_domain = NULL;
+ 	guint32 *		ip4_nis_servers = NULL;
+ 	struct in_addr	temp_addr;
+@@ -520,6 +521,7 @@
+ 	get_ip4_string (manager, dev, "host_name", &hostname, TRUE);
+ 	get_ip4_uint32s (manager, dev, "domain_name_servers", &ip4_nameservers, &num_ip4_nameservers, FALSE);
+ 	get_ip4_string (manager, dev, "domain_name", &domain_names, TRUE);
++	get_ip4_string (manager, dev, "domain_search", &domain_searches, TRUE);
+ 	get_ip4_string (manager, dev, "nis_domain", &nis_domain, TRUE);
+ 	get_ip4_uint32s (manager, dev, "nis_servers", &ip4_nis_servers, &num_ip4_nis_servers, TRUE);
+ 
+@@ -557,14 +559,27 @@
+ 
+ 	if (domain_names)
+ 	{
+-		char **searches = g_strsplit (domain_names, " ", 0);
++		char **domains = g_strsplit (domain_names, " ", 0);
+ 		char **s;
+ 
+-		for (s = searches; *s; s++)
++		for (s = domains; *s; s++)
+ 		{
+ 			nm_info ("  domain name '%s'", *s);
+ 			nm_ip4_config_add_domain (ip4_config, *s);
+ 		}
++		g_strfreev (domains);
++	}
++
++	if (domain_searches)
++	{
++		char **searches = g_strsplit (domain_searches, " ", 0);
++		char **s;
++
++		for (s = searches; *s; s++)
++		{
++			nm_info ("  domain search '%s'", *s);
++			nm_ip4_config_add_search (ip4_config, *s);
++		}
+ 		g_strfreev (searches);
+ 	}
+ 
+Index: NetworkManager-0.6/src/named-manager/nm-named-manager.c
+===================================================================
+--- NetworkManager-0.6.orig/src/named-manager/nm-named-manager.c	2008-03-02 09:25:16.000000000 +0100
++++ NetworkManager-0.6/src/named-manager/nm-named-manager.c	2008-03-02 09:26:33.000000000 +0100
+@@ -319,7 +319,7 @@
+ static char *
+ compute_searches (NMNamedManager *mgr, NMIP4Config *config)
+ {
+-	int i, num_searches;
++	int i, num_searches, num_domains;
+ 	GString *str = NULL;
+ 
+ 	g_return_val_if_fail (mgr != NULL, g_strdup (""));
+@@ -328,14 +328,54 @@
+ 	if (!config)
+ 		return g_strdup ("");
+ 
+-	num_searches = nm_ip4_config_get_num_domains (config);
+-	for (i = 0; i < num_searches; i++)
+-	{
+-		if (!str)
+-			str = g_string_new ("search");
++	num_searches = nm_ip4_config_get_num_searches (config);
++	num_domains  = nm_ip4_config_get_num_domains  (config);
++
++	/* ISC DHCP 3.1 provides support for the domain-search option. This is the
++	 * correct way for a DHCP server to provide a domain search list. Wedging
++	 * multiple domains into the domain-name option is a horrible hack.
++	 *
++	 * So, we handle it like this (as proposed by Andrew Pollock at
++	 * http://bugs.debian.org/465158):
++	 *
++	 * - if the domain-search option is present in the data received via DHCP,
++	 *   use it in favour of the domain-name option for setting the search
++	 *   directive in /etc/resolv.conf
++	 *
++	 * - if the domain-name option is present in the data received via DHCP, use
++	 *   it to set the domain directive in /etc/resolv.conf
++	 *   (this is handled in compute_domain() below)
++	 *
++	 * - if only the domain-name option is present in the data received via DHCP
++	 *   (and domain-search is not), for backwards compatibility, set the search
++	 *   directive in /etc/resolv.conf to the specified domain names
++	 */
+ 
+-		g_string_append_c (str, ' ');
+-		g_string_append (str, nm_ip4_config_get_domain (config, i));		
++	if ( num_searches == 0 && num_domains > 0 )
++	{
++		/* old, pre-ISC-3.1 fallback:
++		 * use (possibly multiple entries from) domain-name for the search entry */
++		str = g_string_new ("search");
++		for (i = 0; i < num_domains; i++)
++		{
++			g_string_append_c (str, ' ');
++			g_string_append (str, nm_ip4_config_get_domain (config, i));
++		}
++	}
++	else if ( num_searches > 0 )
++	{
++		/* the "correct", post-ISC-3.1 situation: use searches just as received */
++		str = g_string_new ("search");
++		for (i = 0; i < num_searches; i++)
++		{
++			g_string_append_c (str, ' ');
++			g_string_append (str, nm_ip4_config_get_search (config, i));
++		}
++	}
++	else /* num_searches == 0 && num_domains == 0 */
++	{
++		/* no info available at all */
++		return g_strdup ("");
+ 	}
+ 
+ 	if (!str)
+@@ -346,11 +386,41 @@
+ 	return g_string_free (str, FALSE);
+ }
+ 
++static char *
++compute_domain (NMNamedManager *mgr, NMIP4Config *config)
++{
++	int num_domains;
++	GString *str = NULL;
++
++	g_return_val_if_fail (mgr != NULL, g_strdup (""));
++
++	/* config can be NULL */
++	if (!config)
++		return g_strdup ("");
++
++	num_domains = nm_ip4_config_get_num_domains (config);
++
++	/* warn the user that he should change his config
++	 * (see comments above in compute_search() ) */
++	if ( num_domains > 1 )
++		nm_warning ("DHCP server sent multiple entries in domain-name; this is obsolete behaviour; please fix or update your DHCP server");
++
++	if (num_domains == 0)
++		return g_strdup ("");
++
++	str = g_string_new ("domain ");
++	g_string_append (str, nm_ip4_config_get_domain (config, 0));
++	g_string_append_c (str, '\n');
++
++	return g_string_free (str, FALSE);
++}
++
+ static gboolean
+ rewrite_resolv_conf (NMNamedManager *mgr, NMIP4Config *config, GError **error)
+ {
+ 	const char *	tmp_resolv_conf = RESOLV_CONF ".tmp";
+ 	char *		searches = NULL;
++	char *		domain   = NULL;
+ 	FILE *		f;
+ 	NMIP4Config *ns_config = config;
+ 
+@@ -388,23 +458,27 @@
+ 	}
+ 	g_return_val_if_fail (ns_config != NULL, FALSE);
+ 
++	domain   = compute_domain   (mgr, ns_config);
+ 	searches = compute_searches (mgr, ns_config);
+ 
+ 	if (mgr->priv->use_named == TRUE) {
+ 		/* Using caching-nameserver & local DNS */
+-		if (fprintf (f, "%s%s%s", "; Use a local caching nameserver controlled by NetworkManager\n\n", searches, "\nnameserver 127.0.0.1\n") < 0)
++		if (fprintf (f, "%s%s%s%s", "; Use a local caching nameserver controlled by NetworkManager\n\n", domain, searches, "\nnameserver 127.0.0.1\n") < 0)
+ 			goto lose;
+ 	} else {
+ 		/* Using glibc resolver */
+ 		char *nameservers = compute_nameservers (mgr, ns_config);
+ 
++		fprintf (f, "%s\n\n", domain);
+ 		fprintf (f, "%s\n\n", searches);
+-		g_free (searches);
+-
+ 		fprintf (f, "%s\n\n", nameservers);
++
+ 		g_free (nameservers);
+ 	}
+ 
++	g_free (domain);
++	g_free (searches);
++
+ 	if (fclose (f) < 0)
+ 		goto lose;
+ 
+@@ -414,6 +488,7 @@
+ 	return TRUE;
+ 
+ lose:
++	g_free (domain);
+ 	g_free (searches);
+ 	fclose (f);
+ 	g_set_error (error,
+Index: NetworkManager-0.6/src/nm-ip4-config.c
+===================================================================
+--- NetworkManager-0.6.orig/src/nm-ip4-config.c	2008-03-02 09:25:16.000000000 +0100
++++ NetworkManager-0.6/src/nm-ip4-config.c	2008-03-02 09:26:33.000000000 +0100
+@@ -46,6 +46,7 @@
+ 
+ 	GSList *	nameservers;
+ 	GSList *	domains;
++	GSList *	searches;
+ 
+ 	gchar *	hostname;
+ 	gchar *	nis_domain;
+@@ -275,6 +276,17 @@
+ 	config->domains = g_slist_append (config->domains, g_strdup (domain));
+ }
+ 
++void nm_ip4_config_add_search (NMIP4Config *config, const char *search)
++{
++	g_return_if_fail (config != NULL);
++	g_return_if_fail (search != NULL);
++
++	if (!strlen (search))
++		return;
++
++	config->searches = g_slist_append (config->searches, g_strdup (search));
++}
++
+ void nm_ip4_config_set_hostname (NMIP4Config *config, const char *hostname)
+ {
+ 	g_return_if_fail (config != NULL);
+@@ -329,6 +341,25 @@
+ 	return (g_slist_length (config->domains));
+ }
+ 
++const char *nm_ip4_config_get_search (NMIP4Config *config, guint i)
++{
++	const char *search;
++
++	g_return_val_if_fail (config != NULL, NULL);
++	g_return_val_if_fail (i < g_slist_length (config->searches), NULL);
++
++	if ((search = (const char *) g_slist_nth_data (config->searches, i)))
++		return search;
++	return NULL;
++}
++
++guint32 nm_ip4_config_get_num_searches (NMIP4Config *config)
++{
++	g_return_val_if_fail (config != NULL, 0);
++
++	return (g_slist_length (config->searches));
++}
++
+ guint32 nm_ip4_config_get_mtu (NMIP4Config *config)
+ {
+ 	g_return_val_if_fail (config != NULL, 0);
+Index: NetworkManager-0.6/src/nm-ip4-config.h
+===================================================================
+--- NetworkManager-0.6.orig/src/nm-ip4-config.h	2008-03-02 09:25:16.000000000 +0100
++++ NetworkManager-0.6/src/nm-ip4-config.h	2008-03-02 09:26:33.000000000 +0100
+@@ -68,6 +68,14 @@
+ const char *	nm_ip4_config_get_domain			(NMIP4Config *config, guint i);
+ guint32		nm_ip4_config_get_num_domains		(NMIP4Config *config);
+ 
++void			nm_ip4_config_add_search			(NMIP4Config *config, const char *search);
++const char *	nm_ip4_config_get_search			(NMIP4Config *config, guint i);
++guint32		nm_ip4_config_get_num_searches		(NMIP4Config *config);
++
++void			nm_ip4_config_add_domain			(NMIP4Config *config, const char *search);
++const char *	nm_ip4_config_get_domain			(NMIP4Config *config, guint i);
++guint32		nm_ip4_config_get_num_searches		(NMIP4Config *config);
++
+ guint32		nm_ip4_config_get_mtu			(NMIP4Config *config);
+ void			nm_ip4_config_set_mtu			(NMIP4Config *config, guint32 mtu);
+ 




More information about the Pkg-utopia-commits mailing list