diff options
author | Thomas Haller <thaller@redhat.com> | 2019-02-09 11:14:51 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-02-14 08:00:29 +0100 |
commit | d93845e2c2c67349abcfc1f5377d820f02247b8b (patch) | |
tree | 1783426d6408ff5fd2c19e9641a36a8f396620ef | |
parent | 28c53ea37ee7e83cbb16c4e15959b6b177f733cf (diff) | |
download | NetworkManager-d93845e2c2c67349abcfc1f5377d820f02247b8b.tar.gz |
libnm: add internal _nm_utils_secret_flags_validate() util
-rw-r--r-- | libnm-core/nm-utils-private.h | 6 | ||||
-rw-r--r-- | libnm-core/nm-utils.c | 56 |
2 files changed, 62 insertions, 0 deletions
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h index b61260cb22..46af26ed02 100644 --- a/libnm-core/nm-utils-private.h +++ b/libnm-core/nm-utils-private.h @@ -41,6 +41,12 @@ struct _NMVariantAttributeSpec { gboolean _nm_utils_string_slist_validate (GSList *list, const char **valid_values); +gboolean _nm_utils_secret_flags_validate (NMSettingSecretFlags secret_flags, + const char *setting_name, + const char *property_name, + NMSettingSecretFlags disallowed_flags, + GError **error); + gboolean _nm_utils_wps_method_validate (NMSettingWirelessSecurityWpsMethod wps_method, const char *setting_name, const char *property_name, diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index f2d0e94fe5..b5f9fb8676 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -4309,6 +4309,62 @@ _nm_utils_hwaddr_from_dbus (GVariant *dbus_value, /*****************************************************************************/ +/* Validate secret-flags. Most settings don't validate them, which is a bug. + * But we possibly cannot enforce a strict validation now. + * + * For new settings, they shall validate the secret-flags strictly. */ +gboolean +_nm_utils_secret_flags_validate (NMSettingSecretFlags secret_flags, + const char *setting_name, + const char *property_name, + NMSettingSecretFlags disallowed_flags, + GError **error) +{ + if (secret_flags == NM_SETTING_SECRET_FLAG_NONE) + return TRUE; + + if (NM_FLAGS_ANY (secret_flags, ~NM_SETTING_SECRET_FLAG_ALL)) { + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("unknown secret flags")); + if (setting_name) + g_prefix_error (error, "%s.%s: ", setting_name, property_name); + return FALSE; + } + + if (!nm_utils_is_power_of_two (secret_flags)) { + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("conflicting secret flags")); + if (setting_name) + g_prefix_error (error, "%s.%s: ", setting_name, property_name); + return FALSE; + } + + if (NM_FLAGS_ANY (secret_flags, disallowed_flags)) { + if (NM_FLAGS_HAS (secret_flags, NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) { + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("secret flags must not be \"not-required\"")); + if (setting_name) + g_prefix_error (error, "%s.%s: ", setting_name, property_name); + return FALSE; + } + g_set_error_literal (error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("unsupported secret flags")); + if (setting_name) + g_prefix_error (error, "%s.%s: ", setting_name, property_name); + return FALSE; + } + + return TRUE; +} + gboolean _nm_utils_wps_method_validate (NMSettingWirelessSecurityWpsMethod wps_method, const char *setting_name, |