diff --git a/src/libnm-core-impl/nm-setting-ovs-external-ids.c b/src/libnm-core-impl/nm-setting-ovs-external-ids.c index f4e31f81c..44bb1d3e6 100644 --- a/src/libnm-core-impl/nm-setting-ovs-external-ids.c +++ b/src/libnm-core-impl/nm-setting-ovs-external-ids.c @@ -53,15 +53,6 @@ G_DEFINE_TYPE(NMSettingOvsExternalIDs, nm_setting_ovs_external_ids, NM_TYPE_SETT /*****************************************************************************/ -static gboolean -_exid_key_char_is_regular(char ch) -{ - /* allow words of printable characters, plus some - * special characters, for example to support base64 encoding. */ - return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') - || NM_IN_SET(ch, '-', '_', '+', '/', '=', '.'); -} - /** * nm_setting_ovs_external_ids_check_key: * @key: (allow-none): the key to check @@ -105,7 +96,7 @@ nm_setting_ovs_external_ids_check_key(const char *key, GError **error) _("key must be UTF8")); return FALSE; } - if (!NM_STRCHAR_ALL(key, ch, _exid_key_char_is_regular(ch))) { + if (!NM_STRCHAR_ALL(key, ch, nm_ascii_is_regular_char(ch))) { /* Probably OVS is more forgiving about what makes a valid key for * an external-id. However, we are strict (at least, for now). */ g_set_error_literal(error, diff --git a/src/libnm-glib-aux/nm-macros-internal.h b/src/libnm-glib-aux/nm-macros-internal.h index 974355b26..71a17e3e3 100644 --- a/src/libnm-glib-aux/nm-macros-internal.h +++ b/src/libnm-glib-aux/nm-macros-internal.h @@ -1101,6 +1101,32 @@ nm_ascii_is_newline(char ch) return NM_IN_SET(ch, '\n', '\t'); } +static inline gboolean +nm_ascii_is_regular_char(char ch) +{ + /* Checks whether "ch" is "regular", which basically + * means it's either a digit, a alpha, or some special + * characters that are suitable for base64 encoding. + * + * The meaning of what "regular" means is not well defined, + * but it's used to validate the keys for "ovs.external-ids" + * dictionary. */ + switch (ch) { + case 'a' ... 'z': + case 'A' ... 'Z': + case '0' ... '9': + case '-': + case '_': + case '+': + case '/': + case '=': + case '.': + return TRUE; + default: + return FALSE; + } +} + #define nm_str_skip_leading_spaces(str) \ ({ \ typeof(*(str)) *_str_sls = (str); \