summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-03-24 20:36:00 +0100
committerThomas Haller <thaller@redhat.com>2019-03-27 16:23:30 +0100
commitd0727509b224554a2d53448bc6db589f361c530d (patch)
treeac4387eeee2983379d94714d3aa7b52567d0543e
parente96643a0b66cea03ca709b0ed22e57ff37f05b81 (diff)
downloadNetworkManager-d0727509b224554a2d53448bc6db589f361c530d.tar.gz
libnm: add nm_utils_is_valid_iface_name_utf8safe() util
-rw-r--r--libnm-core/nm-core-internal.h2
-rw-r--r--libnm-core/nm-utils.c23
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