Files
sablink-distro/net-misc/networkmanager/files/networkmanager-0.8.2-accept-gw.patch
T
2011-01-08 18:57:35 +01:00

136 lines
3.6 KiB
Diff

--- 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,