nm-shared-utils: relax ovs ifname check to accept any (non-space) ASCII printable char

quoting 'man ovs-vswitchd.conf.db':
"The name must be alphanumeric and must not contain forward or backward
slashes."

OVS actually accepts a wider range of chars (all printable UTF-8 chars),
NetworkManager restricts this to ASCII char as it's a safer option for
now since OVS is not well documented on this matter.

https://bugzilla.redhat.com/show_bug.cgi?id=1788432

Fixes: e7d72a14f6 ('libnm-core: use different ifname validation function for OVS bridges, ports and interfaces')
(cherry picked from commit ed5a647ad1)
This commit is contained in:
Antonio Cardace 2020-02-18 12:16:02 +01:00
parent 53b878818c
commit 88d0d80d09
2 changed files with 10 additions and 17 deletions

View file

@ -8469,21 +8469,6 @@ test_connection_ovs_ifname (gconstpointer test_data)
nmtst_assert_connection_unnormalizable (con,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY);
/* wrong: contains non-alphanumerical char */
g_object_set (s_con,
NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs-0",
NULL);
nmtst_assert_connection_unnormalizable (con,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY);
g_object_set (s_con,
NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs@0",
NULL);
nmtst_assert_connection_unnormalizable (con,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_INVALID_PROPERTY);
}
/* wrong: contains space */
@ -8500,6 +8485,11 @@ test_connection_ovs_ifname (gconstpointer test_data)
NULL);
nmtst_assert_connection_verifies (con);
g_object_set (s_con,
NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs-br0",
NULL);
nmtst_assert_connection_verifies (con);
/* good if bridge, port, or patch interface */
g_object_set (s_con,
NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs123123123123130123123",

View file

@ -4039,11 +4039,14 @@ _nm_utils_ifname_valid_ovs (const char* name, GError **error)
{
const char *ch;
/* OVS actually accepts a wider range of chars (all printable UTF-8 chars),
NetworkManager restricts this to ASCII char as it's a safer option for
now since OVS is not well documented on this matter.
*/
for (ch = name; *ch; ++ch) {
if ( *ch == '\\'
|| *ch == '/'
|| g_ascii_isspace (*ch)
|| !g_ascii_isalnum (*ch)) {
|| !g_ascii_isgraph (*ch)) {
g_set_error_literal (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN,
_("interface name must be alphanumerical with "
"no forward or backward slashes"));