libnm-core: add nm_utils_is_valid_iface_name()

Version of nm_utils_iface_valid_name() with error reporting.
This commit is contained in:
Lubomir Rintel 2016-12-23 12:52:41 +01:00
parent aef473f005
commit ac0563d784
3 changed files with 39 additions and 7 deletions

View file

@ -3737,8 +3737,11 @@ _nm_utils_generate_mac_address_mask_parse (const char *value,
/*****************************************************************************/
/**
* nm_utils_iface_valid_name:
* nm_utils_is_valid_iface_name:
* @name: Name of interface
* @error: location to store the error occurring, or %NULL to ignore
*
* Validate the network interface name.
*
* This function is a 1:1 copy of the kernel's interface validation
* function in net/core/dev.c.
@ -3746,28 +3749,54 @@ _nm_utils_generate_mac_address_mask_parse (const char *value,
* Returns: %TRUE if interface name is valid, otherwise %FALSE is returned.
*/
gboolean
nm_utils_iface_valid_name (const char *name)
nm_utils_is_valid_iface_name (const char *name, GError **error)
{
g_return_val_if_fail (name != NULL, FALSE);
if (*name == '\0')
if (*name == '\0') {
g_set_error_literal (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN,
_("interface name is too short"));
return FALSE;
}
if (strlen (name) >= 16)
if (strlen (name) >= 16) {
g_set_error_literal (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN,
_("interface name is longer than 15 characters"));
return FALSE;
}
if (!strcmp (name, ".") || !strcmp (name, ".."))
if (!strcmp (name, ".") || !strcmp (name, "..")) {
g_set_error_literal (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN,
_("interface name is reserved"));
return FALSE;
}
while (*name) {
if (*name == '/' || g_ascii_isspace (*name))
if (*name == '/' || g_ascii_isspace (*name)) {
g_set_error_literal (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN,
_("interface name contains an invalid character"));
return FALSE;
}
name++;
}
return TRUE;
}
/**
* nm_utils_iface_valid_name:
* @name: Name of interface
*
* Validate the network interface name.
*
* Returns: %TRUE if interface name is valid, otherwise %FALSE is returned.
*/
gboolean
nm_utils_iface_valid_name (const char *name)
{
return nm_utils_is_valid_iface_name (name, NULL);
}
/**
* nm_utils_is_uuid:
* @str: a string that might be a UUID

View file

@ -177,7 +177,9 @@ gboolean nm_utils_hwaddr_matches (gconstpointer hwaddr1,
char *nm_utils_bin2hexstr (gconstpointer src, gsize len, int final_len);
GBytes *nm_utils_hexstr2bin (const char *hex);
gboolean nm_utils_iface_valid_name(const char *name);
gboolean nm_utils_iface_valid_name (const char *name);
NM_AVAILABLE_IN_1_6
gboolean nm_utils_is_valid_iface_name (const char *name, GError **error);
gboolean nm_utils_is_uuid (const char *str);

View file

@ -1108,4 +1108,5 @@ global:
nm_setting_proxy_get_pac_script;
nm_utils_is_json_object;
nm_utils_version;
nm_utils_is_valid_iface_name;
} libnm_1_4_0;