summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch')
-rw-r--r--net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch135
1 files changed, 135 insertions, 0 deletions
diff --git a/net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch b/net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch
new file mode 100644
index 0000000..b2911db
--- /dev/null
+++ b/net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch
@@ -0,0 +1,135 @@
+--- NetworkManager_Patched/system-settings/plugins/ifnet/net_utils.c 2010-11-04 04:10:52.000000000 +0800
++++ NetworkManager-0.8.2/system-settings/plugins/ifnet/net_utils.c 2010-11-23 15:11:08.024000011 +0800
+@@ -19,7 +19,6 @@
+ * Copyright (C) 1999-2010 Gentoo Foundation, Inc.
+ */
+
+-#include <config.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -194,6 +193,32 @@
+ return error_quark;
+ }
+
++static char *
++find_default_gateway_str (char *str)
++{
++ char *tmp;
++
++ if ((tmp = strstr (str, "default via ")) != NULL) {
++ return tmp + strlen ("default via ");
++ } else if ((tmp = strstr (str, "default gw ")) != NULL) {
++ return tmp + strlen ("default gw ");
++ }
++ return NULL;
++}
++
++static char *
++find_gateway_str (char *str)
++{
++ char *tmp;
++
++ if ((tmp = strstr (str, "via ")) != NULL) {
++ return tmp + strlen ("via ");
++ } else if ((tmp = strstr (str, "gw ")) != NULL) {
++ return tmp + strlen ("gw ");
++ }
++ return NULL;
++}
++
+ gboolean
+ reload_parsers ()
+ {
+@@ -362,11 +387,10 @@
+ if (!tmp)
+ return FALSE;
+ routes = g_strdup (tmp);
+- tmp = strstr (routes, "default via ");
++ tmp = find_default_gateway_str (routes);
+ if (!tmp) {
+ goto error;
+ }
+- tmp += strlen ("default via ");
+ g_strstrip (tmp);
+ if ((end = strstr (tmp, "\"")) != NULL)
+ *end = '\0';
+@@ -483,8 +507,13 @@
+
+ if (!gateway)
+ return 0;
+- tmp = strstr (gateway, "via ");
+- tmp = g_strdup (tmp + strlen ("via "));
++ tmp = find_gateway_str(gateway);
++ if (!tmp) {
++ PLUGIN_WARN (IFNET_PLUGIN_NAME,
++ "Couldn't obtain gateway in \"%s\"", gateway);
++ return 0;
++ }
++ tmp = g_strdup (tmp);
+ strip_string (tmp, ' ');
+ strip_string (tmp, '"');
+ if ((split = strstr (tmp, "\"")) != NULL)
+@@ -509,8 +538,13 @@
+
+ if (!next_hop)
+ return 0;
+- tmp = strstr (next_hop, "via ");
+- tmp = g_strdup (tmp + strlen ("via "));
++ tmp = find_gateway_str(next_hop);
++ if (!tmp) {
++ PLUGIN_WARN (IFNET_PLUGIN_NAME,
++ "Couldn't obtain next_hop in \"%s\"", next_hop);
++ return 0;
++ }
++ tmp = g_strdup (tmp);
+ strip_string (tmp, ' ');
+ strip_string (tmp, '"');
+ g_strstrip (tmp);
+@@ -671,8 +705,8 @@
+ length = g_strv_length (ipset);
+ for (i = 0; i < length; i++) {
+ ip = ipset[i];
+- if (strstr (ip, "default via ") || strstr (ip, "::")
+- || !strstr (ip, "via"))
++ if (find_default_gateway_str (ip) || strstr (ip, "::")
++ || !find_gateway_str (ip))
+ continue;
+ ip = strip_string (ip, '"');
+ iblock = create_ip4_block (ip);
+@@ -712,9 +746,7 @@
+ ip = strip_string (ip, '"');
+ if (ip[0] == '\0')
+ continue;
+- printf ("ip:%s\n", ip);
+- if ((tmp_addr = strstr (ip, "default via ")) != NULL) {
+- tmp_addr += strlen ("default via ");
++ if ((tmp_addr = find_default_gateway_str (ip)) != NULL) {
+ if (!is_ip6_address (tmp_addr))
+ continue;
+ else {
+@@ -855,7 +887,7 @@
+ void
+ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
+ {
+- gchar *dhcp_client = ifnet_get_global_setting ("main", "dhcp");
++ gchar *dhcp_client = NULL;
+ const gchar *dhcpcd_conf = "/etc/dhcpcd.conf";
+ const gchar *dhclient_conf = "/etc/dhcp/dhclient.conf";
+ gchar *line = NULL, *tmp = NULL, *contents = NULL;
+@@ -864,6 +896,7 @@
+
+ *hostname = NULL;
+ *client_id = NULL;
++ dhcp_client = ifnet_get_global_setting ("main", "dhcp");
+ if (dhcp_client) {
+ if (!strcmp (dhcp_client, "dhclient"))
+ g_file_get_contents (dhclient_conf, &contents, NULL,
+@@ -871,6 +904,7 @@
+ else if (!strcmp (dhcp_client, "dhcpcd"))
+ g_file_get_contents (dhcpcd_conf, &contents, NULL,
+ NULL);
++ g_free (dhcp_client);
+ } else {
+ if (g_file_test (dhclient_conf, G_FILE_TEST_IS_REGULAR))
+ g_file_get_contents (dhclient_conf, &contents, NULL,