From f88ce92b2574b9f4388868d7f92a48ea71e93bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Mon, 14 Sep 2015 14:06:39 +0200 Subject: [PATCH 1/2] nmcli: allow "none" value for ethernet.wake-on-lan property (rh #1260584) Aliases "disable" and "disabled" are accepted too. nmcli> set 802-3-ethernet.wake-on-lan none It was possible to remove flags by setting a string containing just white spaces, but it was user unfriendly and non-intuitive. https://bugzilla.redhat.com/show_bug.cgi?id=1260584 --- clients/cli/settings.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/clients/cli/settings.c b/clients/cli/settings.c index 1132c862cc..f12bc95cd5 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -1575,11 +1575,17 @@ nmc_property_wired_set_wake_on_lan (NMSetting *setting, const char *prop, (int *) &wol, &err_token); if (!ret) { - g_set_error (error, 1, 0, _("invalid option '%s', use a combination of %s or 'default'"), - err_token, - nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), - NM_SETTING_WIRED_WAKE_ON_LAN_ALL)); - return FALSE; + if ( g_ascii_strcasecmp (err_token, "none") == 0 + || g_ascii_strcasecmp (err_token, "disable") == 0 + || g_ascii_strcasecmp (err_token, "disabled") == 0) + wol = NM_SETTING_WIRED_WAKE_ON_LAN_NONE; + else { + g_set_error (error, 1, 0, _("invalid option '%s', use a combination of %s or 'default' or 'none'"), + err_token, + nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), + NM_SETTING_WIRED_WAKE_ON_LAN_ALL)); + return FALSE; + } } if (NM_FLAGS_HAS (wol, NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT) && From 4485b4ec2fa22d588a75640573b06270031f5c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Mon, 14 Sep 2015 14:23:50 +0200 Subject: [PATCH 2/2] nmcli: wake-on-lan property set/get fixes - accept a numeric value (decimal or hex (0x prefix)) - display a numeric value of the property in addition to the strings - add/accept spaces between string names to behave similar to other flags' properties. --- clients/cli/settings.c | 40 +++++++++++++++++++++------------ libnm-core/nm-utils.c | 4 ++-- libnm-core/tests/test-general.c | 6 +++-- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/clients/cli/settings.c b/clients/cli/settings.c index f12bc95cd5..30acd7f20d 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -1558,9 +1558,16 @@ nmc_property_wired_get_wake_on_lan (NMSetting *setting, NmcPropertyGetType get_t { NMSettingWired *s_wired = NM_SETTING_WIRED (setting); NMSettingWiredWakeOnLan wol; + char *tmp, *str; wol = nm_setting_wired_get_wake_on_lan (s_wired); - return nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), wol); + tmp = nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), wol); + if (get_type == NMC_PROPERTY_GET_PARSABLE) + str = g_strdup_printf ("%s", tmp && *tmp ? tmp : "none"); + else + str = g_strdup_printf ("%d (%s)", wol, tmp && *tmp ? tmp : "none"); + g_free (tmp); + return str; } static gboolean @@ -1570,21 +1577,26 @@ nmc_property_wired_set_wake_on_lan (NMSetting *setting, const char *prop, NMSettingWiredWakeOnLan wol; gs_free char *err_token = NULL; gboolean ret; + long int t; - ret = nm_utils_enum_from_str (nm_setting_wired_wake_on_lan_get_type (), val, - (int *) &wol, &err_token); + if (nmc_string_to_int_base (val, 0, TRUE, 0, NM_SETTING_WIRED_WAKE_ON_LAN_ALL, &t)) + wol = (NMSettingWiredWakeOnLan) t; + else { + ret = nm_utils_enum_from_str (nm_setting_wired_wake_on_lan_get_type (), val, + (int *) &wol, &err_token); - if (!ret) { - if ( g_ascii_strcasecmp (err_token, "none") == 0 - || g_ascii_strcasecmp (err_token, "disable") == 0 - || g_ascii_strcasecmp (err_token, "disabled") == 0) - wol = NM_SETTING_WIRED_WAKE_ON_LAN_NONE; - else { - g_set_error (error, 1, 0, _("invalid option '%s', use a combination of %s or 'default' or 'none'"), - err_token, - nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), - NM_SETTING_WIRED_WAKE_ON_LAN_ALL)); - return FALSE; + if (!ret) { + if ( g_ascii_strcasecmp (err_token, "none") == 0 + || g_ascii_strcasecmp (err_token, "disable") == 0 + || g_ascii_strcasecmp (err_token, "disabled") == 0) + wol = NM_SETTING_WIRED_WAKE_ON_LAN_NONE; + else { + g_set_error (error, 1, 0, _("invalid option '%s', use a combination of [%s] or 'default' or 'none'"), + err_token, + nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), + NM_SETTING_WIRED_WAKE_ON_LAN_ALL)); + return FALSE; + } } } diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 7c32695a2b..e3c6b80bef 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -4030,7 +4030,7 @@ char *nm_utils_enum_to_str (GType type, int value) break; if (!first) - g_string_append_c (str, ','); + g_string_append (str, ", "); g_string_append (str, flags_value->value_nick); value &= ~flags_value->value; @@ -4089,7 +4089,7 @@ gboolean nm_utils_enum_from_str (GType type, const char *str, gs_strfreev char **strv = NULL; int i; - strv = g_strsplit (stripped, ",", 0); + strv = g_strsplit_set (stripped, " \t,", 0); for (i = 0; strv[i]; i++) { if (!strv[i][0]) continue; diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index d8bfef4d97..2253f0c3ba 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -4679,12 +4679,12 @@ static void test_nm_utils_enum (void) test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_BAZ, "baz"); test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAR | - NM_TEST_GENERAL_META_FLAGS_BAZ, "foo,bar,baz"); + NM_TEST_GENERAL_META_FLAGS_BAZ, "foo, bar, baz"); test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_RED, "red"); test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_WHITE, ""); test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_RED | - NM_TEST_GENERAL_COLOR_FLAGS_GREEN, "red,green"); + NM_TEST_GENERAL_COLOR_FLAGS_GREEN, "red, green"); test_nm_utils_enum_from_str_do (bool_enum, "", FALSE, 0, NULL); test_nm_utils_enum_from_str_do (bool_enum, " ", FALSE, 0, NULL); @@ -4698,6 +4698,8 @@ static void test_nm_utils_enum (void) test_nm_utils_enum_from_str_do (meta_flags, "foo", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO, NULL); test_nm_utils_enum_from_str_do (meta_flags, "foo,baz", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAZ, NULL); + test_nm_utils_enum_from_str_do (meta_flags, "foo, baz", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO | + NM_TEST_GENERAL_META_FLAGS_BAZ, NULL); test_nm_utils_enum_from_str_do (meta_flags, "foo,,bar", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAR, NULL); test_nm_utils_enum_from_str_do (meta_flags, "foo,baz,quux,bar", FALSE, 0, "quux");