diff --git a/ChangeLog b/ChangeLog index d49ac750f9..67f88d14c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-07-27 Dan Williams + + * 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 + 2008-07-27 Dan Williams * libnm-util/* diff --git a/libnm-util/nm-setting-ip4-config.c b/libnm-util/nm-setting-ip4-config.c index b6c08d6274..d452c46ecc 100644 --- a/libnm-util/nm-setting-ip4-config.c +++ b/libnm-util/nm-setting-ip4-config.c @@ -148,12 +148,18 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) } 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 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) 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 @@ finalize (GObject *object) 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 @@ set_property (GObject *object, guint prop_id, 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); diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c index 687c1bb1aa..0488815171 100644 --- a/libnm-util/nm-setting-ip6-config.c +++ b/libnm-util/nm-setting-ip6-config.c @@ -204,6 +204,7 @@ set_property (GObject *object, guint prop_id, 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);