--- 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 #include #include #include @@ -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,