[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