diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c index 33c01e3cdf..583e63be56 100644 --- a/libnm-core/nm-setting-bond.c +++ b/libnm-core/nm-setting-bond.c @@ -108,6 +108,16 @@ static const BondDefault defaults[] = { /*****************************************************************************/ +static int +_atoi (const char *value) +{ + int v; + + v = _nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXINT, -1); + nm_assert (v >= 0); + return v; +}; + /** * nm_setting_bond_get_num_options: * @setting: the #NMSettingBond @@ -663,21 +673,26 @@ verify (NMSetting *setting, NMConnection *connection, GError **error) } if (miimon == 0) { - /* updelay and downdelay can only be used with miimon */ - if (g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_UPDELAY)) { + gpointer delayopt; + + /* updelay and downdelay need miimon to be enabled to be valid */ + delayopt = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_UPDELAY); + if (delayopt && _atoi (delayopt) > 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' option requires '%s' option to be set"), + _("'%s' option requires '%s' option to be enabled"), NM_SETTING_BOND_OPTION_UPDELAY, NM_SETTING_BOND_OPTION_MIIMON); g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS); return FALSE; } - if (g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_DOWNDELAY)) { + + delayopt = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_DOWNDELAY); + if (delayopt && _atoi (delayopt) > 0) { g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' option requires '%s' option to be set"), + _("'%s' option requires '%s' option to be enabled"), NM_SETTING_BOND_OPTION_DOWNDELAY, NM_SETTING_BOND_OPTION_MIIMON); g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS); return FALSE; diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c index 5c9c614fb5..8bd5538ee6 100644 --- a/libnm-core/tests/test-setting.c +++ b/libnm-core/tests/test-setting.c @@ -590,6 +590,15 @@ test_bond_verify (void) test_verify_options (TRUE, "mode", "802.3ad", "ad_actor_system", "ae:00:11:33:44:55"); + test_verify_options (TRUE, + "mode", "0", + "miimon", "0", + "updelay", "0", + "downdelay", "0"); + test_verify_options (TRUE, + "mode", "0", + "downdelay", "0", + "updelay", "0"); } static void