diff options
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.patch | 135 |
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, |