summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2015-09-15 12:19:10 +0200
committerJiří Klimeš <jklimes@redhat.com>2015-09-15 12:19:10 +0200
commitaac87ecfd77a708114221fa163b1d9064090ed91 (patch)
tree120df9a682b53ac97c6ae6e0bafc1347120ade28
parent1ec0b4e7e889b7cedfd1883a48561c35b19cafdf (diff)
parentc0c1cb1dc8bff47385fd00043196ce323a6cb770 (diff)
downloadNetworkManager-aac87ecfd77a708114221fa163b1d9064090ed91.tar.gz
merge: improve handling of wake-on-lan property (rh #1260584)
https://bugzilla.redhat.com/show_bug.cgi?id=1260584
-rw-r--r--clients/cli/settings.c38
-rw-r--r--libnm-core/nm-utils.c4
-rw-r--r--libnm-core/tests/test-general.c6
3 files changed, 34 insertions, 14 deletions
diff --git a/clients/cli/settings.c b/clients/cli/settings.c
index 952681d2cd..8d2d70be0a 100644
--- a/clients/cli/settings.c
+++ b/clients/cli/settings.c
@@ -1524,9 +1524,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
@@ -1536,16 +1543,27 @@ 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 (!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 (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 (NM_FLAGS_HAS (wol, NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT) &&
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index 66dd1c872d..987cf7318e 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -3676,7 +3676,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;
@@ -3733,7 +3733,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 a73604bfb4..42b55c187f 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -4582,12 +4582,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);
@@ -4601,6 +4601,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");