mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-28 05:10:09 +01:00
libnm-core: add nm_utils_is_valid_iface_name()
Version of nm_utils_iface_valid_name() with error reporting.
This commit is contained in:
parent
aef473f005
commit
ac0563d784
3 changed files with 39 additions and 7 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue