diff options
author | Thomas Haller <thaller@redhat.com> | 2016-04-11 14:15:01 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-04-12 11:16:37 +0200 |
commit | 013ac9dfb2e4208bac11181d76a9b1c1e62da5ff (patch) | |
tree | 93bf78c60a71d1555ddeb54896c5ed0b75b2dafa | |
parent | b973efdfa50188bb8c9c6f694085d4b4e1b95dd5 (diff) | |
parent | b78e4de648caecc2c3edf9a5ad2dd172ad7e1e43 (diff) | |
download | NetworkManager-013ac9dfb2e4208bac11181d76a9b1c1e62da5ff.tar.gz |
libnm-core,core: merge branch 'th/nm-ip-address-zero-prefix'
(cherry picked from commit defc7fc89afe1b333e6257b3c61c9337ab31afe6)
-rw-r--r-- | libnm-core/nm-setting-ip-config.c | 37 | ||||
-rw-r--r-- | src/nm-ip4-config.c | 4 | ||||
-rw-r--r-- | src/nm-ip6-config.c | 4 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/reader.c | 52 |
4 files changed, 43 insertions, 54 deletions
diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c index 4e3088a98a..3e7f93b065 100644 --- a/libnm-core/nm-setting-ip-config.c +++ b/libnm-core/nm-setting-ip-config.c @@ -143,18 +143,16 @@ valid_ip (int family, const char *ip, GError **error) } static gboolean -valid_prefix (int family, guint prefix, GError **error, gboolean allow_zero_prefix) +valid_prefix (int family, guint prefix, GError **error) { - if ( (family == AF_INET && prefix > 32) - || (family == AF_INET6 && prefix > 128) - || (!allow_zero_prefix && prefix == 0)) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED, - family == AF_INET ? _("Invalid IPv4 address prefix '%u'") : _("Invalid IPv6 address prefix '%u'"), - prefix); - return FALSE; - } + if ( (family == AF_INET && prefix <= 32) + || (family == AF_INET6 && prefix <= 128)) + return TRUE; - return TRUE; + g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED, + family == AF_INET ? _("Invalid IPv4 address prefix '%u'") : _("Invalid IPv6 address prefix '%u'"), + prefix); + return FALSE; } static gboolean @@ -175,6 +173,9 @@ valid_metric (gint64 metric, GError **error) return TRUE; } +/***************************************************************************** + * NMIPAddress + *****************************************************************************/ G_DEFINE_BOXED_TYPE (NMIPAddress, nm_ip_address, nm_ip_address_dup, nm_ip_address_unref) @@ -211,7 +212,7 @@ nm_ip_address_new (int family, if (!valid_ip (family, addr, error)) return NULL; - if (!valid_prefix (family, prefix, error, FALSE)) + if (!valid_prefix (family, prefix, error)) return NULL; address = g_slice_new0 (NMIPAddress); @@ -248,7 +249,7 @@ nm_ip_address_new_binary (int family, g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL); g_return_val_if_fail (addr != NULL, NULL); - if (!valid_prefix (family, prefix, error, FALSE)) + if (!valid_prefix (family, prefix, error)) return NULL; address = g_slice_new0 (NMIPAddress); @@ -484,7 +485,7 @@ nm_ip_address_set_prefix (NMIPAddress *address, guint prefix) { g_return_if_fail (address != NULL); - g_return_if_fail (valid_prefix (address->family, prefix, NULL, FALSE)); + g_return_if_fail (valid_prefix (address->family, prefix, NULL)); address->prefix = prefix; } @@ -566,6 +567,9 @@ nm_ip_address_set_attribute (NMIPAddress *address, const char *name, GVariant *v g_hash_table_remove (address->attributes, name); } +/***************************************************************************** + * NMIPRoute + *****************************************************************************/ G_DEFINE_BOXED_TYPE (NMIPRoute, nm_ip_route, nm_ip_route_dup, nm_ip_route_unref) @@ -610,7 +614,7 @@ nm_ip_route_new (int family, if (!valid_ip (family, dest, error)) return NULL; - if (!valid_prefix (family, prefix, error, TRUE)) + if (!valid_prefix (family, prefix, error)) return NULL; if (next_hop && !valid_ip (family, next_hop, error)) return NULL; @@ -657,7 +661,7 @@ nm_ip_route_new_binary (int family, g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL); g_return_val_if_fail (dest, NULL); - if (!valid_prefix (family, prefix, error, TRUE)) + if (!valid_prefix (family, prefix, error)) return NULL; if (!valid_metric (metric, error)) return NULL; @@ -898,7 +902,7 @@ nm_ip_route_set_prefix (NMIPRoute *route, guint prefix) { g_return_if_fail (route != NULL); - g_return_if_fail (valid_prefix (route->family, prefix, NULL, TRUE)); + g_return_if_fail (valid_prefix (route->family, prefix, NULL)); route->prefix = prefix; } @@ -1105,6 +1109,7 @@ nm_ip_route_set_attribute (NMIPRoute *route, const char *name, GVariant *value) g_hash_table_remove (route->attributes, name); } +/*****************************************************************************/ G_DEFINE_ABSTRACT_TYPE (NMSettingIPConfig, nm_setting_ip_config, NM_TYPE_SETTING) diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index d6f6a9b3fc..75caf7e33c 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -567,10 +567,6 @@ nm_ip4_config_create_setting (const NMIP4Config *config) continue; } - /* FIXME: NMIPAddress doesn't support zero prefixes. */ - if (address->plen == 0) - continue; - /* Static address found. */ if (!method) method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL; diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 0b32901bf1..8e7bd22cc1 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -556,10 +556,6 @@ nm_ip6_config_create_setting (const NMIP6Config *config) continue; } - /* FIXME: NMIPAddress does not support zero prefixes. */ - if (address->plen == 0) - continue; - /* Static address found. */ if (!method || strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL) == 0) method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL; diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index 41ffa27db9..39e981f959 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -358,7 +358,7 @@ read_full_ip4_address (shvarFile *ifcfg, { char *ip_tag, *prefix_tag, *netmask_tag, *gw_tag; char *ip = NULL; - long prefix = 0; + int prefix = 0; gboolean success = FALSE; char *value; guint32 tmp; @@ -395,47 +395,40 @@ read_full_ip4_address (shvarFile *ifcfg, /* Prefix */ value = svGetValue (ifcfg, prefix_tag, FALSE); if (value) { - errno = 0; - prefix = strtol (value, NULL, 10); - if (errno || prefix < 0) { + prefix = _nm_utils_ascii_str_to_int64 (value, 10, 0, 32, -1); + if (prefix < 0) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, "Invalid IP4 prefix '%s'", value); g_free (value); goto done; } g_free (value); - } - - /* Fall back to NETMASK if no PREFIX was specified */ - if (prefix == 0) { + } else { + /* Fall back to NETMASK if no PREFIX was specified */ if (!read_ip4_address (ifcfg, netmask_tag, &value, error)) goto done; if (value) { inet_pton (AF_INET, value, &tmp); prefix = nm_utils_ip4_netmask_to_prefix (tmp); g_free (value); - } - } - - if (prefix == 0 && base_addr) - prefix = nm_ip_address_get_prefix (base_addr); - - /* Try to autodetermine the prefix for the address' class */ - if (prefix == 0) { - if (inet_pton (AF_INET, ip, &tmp) == 1) { - prefix = nm_utils_ip4_get_default_prefix (tmp); + } else { + if (base_addr) + prefix = nm_ip_address_get_prefix (base_addr); + else { + /* Try to autodetermine the prefix for the address' class */ + if (inet_pton (AF_INET, ip, &tmp) == 1) { + prefix = nm_utils_ip4_get_default_prefix (tmp); - PARSE_WARNING ("missing %s, assuming %s/%ld", prefix_tag, ip, prefix); + PARSE_WARNING ("missing %s, assuming %s/%d", prefix_tag, ip, prefix); + } else { + g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, + "Missing IP4 prefix"); + goto done; + } + } } } - /* Validate the prefix */ - if (prefix == 0) { - g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, - "Missing IP4 prefix"); - goto done; - } - *out_address = nm_ip_address_new (AF_INET, ip, prefix, error); if (*out_address) success = TRUE; @@ -717,7 +710,7 @@ parse_full_ip6_address (shvarFile *ifcfg, { char **list; char *ip_val, *prefix_val; - long prefix; + int prefix; gboolean success = FALSE; g_return_val_if_fail (addr_str != NULL, FALSE); @@ -737,9 +730,8 @@ parse_full_ip6_address (shvarFile *ifcfg, prefix_val = list[1]; if (prefix_val) { - errno = 0; - prefix = strtol (prefix_val, NULL, 10); - if (errno || prefix <= 0 || prefix > 128) { + prefix = _nm_utils_ascii_str_to_int64 (prefix_val, 10, 0, 128, -1); + if (prefix < 0) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, "Invalid IP6 prefix '%s'", prefix_val); goto error; |