diff options
author | Thomas Haller <thaller@redhat.com> | 2019-03-24 20:36:00 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-03-27 16:23:30 +0100 |
commit | d0727509b224554a2d53448bc6db589f361c530d (patch) | |
tree | ac4387eeee2983379d94714d3aa7b52567d0543e | |
parent | e96643a0b66cea03ca709b0ed22e57ff37f05b81 (diff) | |
download | NetworkManager-d0727509b224554a2d53448bc6db589f361c530d.tar.gz |
libnm: add nm_utils_is_valid_iface_name_utf8safe() util
-rw-r--r-- | libnm-core/nm-core-internal.h | 2 | ||||
-rw-r--r-- | libnm-core/nm-utils.c | 23 |
2 files changed, 25 insertions, 0 deletions
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index 60774c49b3..68f453a17f 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -250,6 +250,8 @@ guint nm_setting_ethtool_init_features (NMSettingEthtool *setting, guint8 *_nm_utils_hwaddr_aton (const char *asc, gpointer buffer, gsize buffer_length, gsize *out_length); const char *nm_utils_hwaddr_ntoa_buf (gconstpointer addr, gsize addr_len, gboolean upper_case, char *buf, gsize buf_len); +gboolean nm_utils_is_valid_iface_name_utf8safe (const char *utf8safe_name); + GSList * _nm_utils_hash_values_to_slist (GHashTable *hash); GHashTable *_nm_utils_copy_strdict (GHashTable *strdict); diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 88cdee36e3..dbeb6601f4 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -4541,6 +4541,29 @@ _nm_utils_generate_mac_address_mask_parse (const char *value, /*****************************************************************************/ +gboolean +nm_utils_is_valid_iface_name_utf8safe (const char *utf8safe_name) +{ + gs_free gpointer bin_to_free = NULL; + gconstpointer bin; + gsize len; + + g_return_val_if_fail (utf8safe_name, FALSE); + + bin = nm_utils_buf_utf8safe_unescape (utf8safe_name, &len, &bin_to_free); + + if (bin_to_free) { + /* some unescaping happened... */ + + if (len != strlen (bin)) { + /* there are embedded NUL chars. Invalid. */ + return FALSE; + } + } + + return nm_utils_is_valid_iface_name (bin, NULL); +} + /** * nm_utils_is_valid_iface_name: * @name: Name of interface |