NetworkManager r3865 - in trunk: . libnm-util



Author: dcbw
Date: Sun Jul 27 21:24:55 2008
New Revision: 3865
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3865&view=rev

Log:
2008-07-27  Dan Williams  <dcbw redhat com>

	* libnm-util/nm-setting-ip6-config.c
		- (set_property): add missing break that caused routes to be overwritten
			with addresses

	* libnm-util/nm-setting-ip6-config.c
		- (verify): validate routes and return GError everywhere on invalid setting
		- (finalize): don't leak routes
		- (set_property): add missing break that caused routes to be overwritten
			with addresses



Modified:
   trunk/ChangeLog
   trunk/libnm-util/nm-setting-ip4-config.c
   trunk/libnm-util/nm-setting-ip6-config.c

Modified: trunk/libnm-util/nm-setting-ip4-config.c
==============================================================================
--- trunk/libnm-util/nm-setting-ip4-config.c	(original)
+++ trunk/libnm-util/nm-setting-ip4-config.c	Sun Jul 27 21:24:55 2008
@@ -148,12 +148,18 @@
 	}
 
 	if (self->dhcp_client_id && !strlen (self->dhcp_client_id)) {
-		g_warning ("invalid DHCP client ID");
+		g_set_error (error,
+		             NM_SETTING_IP4_CONFIG_ERROR,
+		             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+		             NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID);
 		return FALSE;
 	}
 
 	if (self->dhcp_hostname && !strlen (self->dhcp_hostname)) {
-		g_warning ("invalid DHCP client ID");
+		g_set_error (error,
+		             NM_SETTING_IP4_CONFIG_ERROR,
+		             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+		             NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
 		return FALSE;
 	}
 
@@ -162,13 +168,39 @@
 		NMSettingIP4Address *addr = (NMSettingIP4Address *) iter->data;
 
 		if (!addr->address) {
-			g_warning ("invalid IP4 address #%d", i);
+			g_set_error (error,
+			             NM_SETTING_IP4_CONFIG_ERROR,
+			             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+			             NM_SETTING_IP4_CONFIG_ADDRESSES);
 			return FALSE;
 		}
 
 		if (!addr->prefix || addr->prefix > 32) {
-			g_warning ("invalid IP4 address prefix %d for address #%d",
-			           addr->prefix, i);
+			g_set_error (error,
+			             NM_SETTING_IP4_CONFIG_ERROR,
+			             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+			             NM_SETTING_IP4_CONFIG_ADDRESSES);
+			return FALSE;
+		}
+	}
+
+	/* Validate routes */
+	for (iter = self->routes, i = 0; iter; iter = g_slist_next (iter), i++) {
+		NMSettingIP4Address *addr = (NMSettingIP4Address *) iter->data;
+
+		if (!addr->address) {
+			g_set_error (error,
+			             NM_SETTING_IP4_CONFIG_ERROR,
+			             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+			             NM_SETTING_IP4_CONFIG_ROUTES);
+			return FALSE;
+		}
+
+		if (!addr->prefix || addr->prefix > 32) {
+			g_set_error (error,
+			             NM_SETTING_IP4_CONFIG_ERROR,
+			             NM_SETTING_IP4_CONFIG_ERROR_INVALID_PROPERTY,
+			             NM_SETTING_IP4_CONFIG_ROUTES);
 			return FALSE;
 		}
 	}
@@ -195,6 +227,7 @@
 
 	nm_utils_slist_free (self->dns_search, g_free);
 	nm_utils_slist_free (self->addresses, g_free);
+	nm_utils_slist_free (self->routes, g_free);
 
 	G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object);
 }
@@ -222,6 +255,7 @@
 	case PROP_ADDRESSES:
 		nm_utils_slist_free (setting->addresses, g_free);
 		setting->addresses = nm_utils_ip4_addresses_from_gvalue (value);
+		break;
 	case PROP_ROUTES:
 		nm_utils_slist_free (setting->routes, g_free);
 		setting->routes = nm_utils_ip4_addresses_from_gvalue (value);

Modified: trunk/libnm-util/nm-setting-ip6-config.c
==============================================================================
--- trunk/libnm-util/nm-setting-ip6-config.c	(original)
+++ trunk/libnm-util/nm-setting-ip6-config.c	Sun Jul 27 21:24:55 2008
@@ -204,6 +204,7 @@
 	case PROP_ADDRESSES:
 		nm_utils_slist_free (setting->addresses, g_free);
 		setting->addresses = nm_utils_ip6_addresses_from_gvalue (value);
+		break;
 	case PROP_ROUTES:
 		nm_utils_slist_free (setting->routes, g_free);
 		setting->routes = nm_utils_ip6_addresses_from_gvalue (value);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]