mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-04 23:30:28 +01:00
keyfile: cleanup mac_address_parser()
This commit is contained in:
parent
304fabf381
commit
12c2aacea7
2 changed files with 30 additions and 55 deletions
|
|
@ -4033,8 +4033,6 @@ nm_utils_hwaddr_aton (const char *asc, gpointer buffer, gsize length)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* nm_utils_bin2hexstr:
|
||||
* @src: (type guint8) (array length=len): an array of bytes
|
||||
|
|
|
|||
|
|
@ -934,13 +934,19 @@ ip6_addr_gen_mode_parser (KeyfileReaderInfo *info, NMSetting *setting, const cha
|
|||
}
|
||||
|
||||
static void
|
||||
mac_address_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key, gsize enforce_length, gboolean cloned_mac_addr)
|
||||
mac_address_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key, gsize addr_len, gboolean cloned_mac_addr)
|
||||
{
|
||||
const char *setting_name = nm_setting_get_name (setting);
|
||||
char addr_str[NM_UTILS_HWADDR_LEN_MAX * 3];
|
||||
guint8 addr_bin[NM_UTILS_HWADDR_LEN_MAX];
|
||||
gs_free char *tmp_string = NULL;
|
||||
const char *p, *mac_str;
|
||||
gs_free guint8 *buf_arr = NULL;
|
||||
guint buf_len = 0;
|
||||
gs_free int *int_list = NULL;
|
||||
const char *mac_str;
|
||||
gsize int_list_len;
|
||||
gsize i;
|
||||
|
||||
nm_assert (addr_len > 0);
|
||||
nm_assert (addr_len <= NM_UTILS_HWADDR_LEN_MAX);
|
||||
|
||||
tmp_string = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, key, NULL);
|
||||
|
||||
|
|
@ -950,60 +956,31 @@ mac_address_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (tmp_string && tmp_string[0]) {
|
||||
/* Look for enough ':' characters to signify a MAC address */
|
||||
guint i = 0;
|
||||
if ( tmp_string
|
||||
&& nm_utils_hwaddr_aton (tmp_string, addr_bin, addr_len))
|
||||
goto good_addr_bin;
|
||||
|
||||
p = tmp_string;
|
||||
while (*p) {
|
||||
if (*p == ':')
|
||||
i++;
|
||||
p++;
|
||||
}
|
||||
|
||||
if (enforce_length == 0 || enforce_length == i+1) {
|
||||
/* If we found enough it's probably a string-format MAC address */
|
||||
buf_len = i + 1;
|
||||
buf_arr = g_new (guint8, buf_len);
|
||||
if (!nm_utils_hwaddr_aton (tmp_string, buf_arr, buf_len))
|
||||
nm_clear_g_free (&buf_arr);
|
||||
}
|
||||
}
|
||||
nm_clear_g_free (&tmp_string);
|
||||
|
||||
if (!buf_arr) {
|
||||
gs_free int *tmp_list = NULL;
|
||||
gsize length;
|
||||
|
||||
/* Old format; list of ints */
|
||||
tmp_list = nm_keyfile_plugin_kf_get_integer_list (info->keyfile, setting_name, key, &length, NULL);
|
||||
if (length > 0 && (enforce_length == 0 || enforce_length == length)) {
|
||||
gsize i;
|
||||
|
||||
buf_len = length;
|
||||
buf_arr = g_new (guint8, buf_len);
|
||||
for (i = 0; i < length; i++) {
|
||||
int val = tmp_list[i];
|
||||
|
||||
if (val < 0 || val > 255) {
|
||||
handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
|
||||
_("ignoring invalid byte element '%d' (not between 0 and 255 inclusive)"),
|
||||
val);
|
||||
return;
|
||||
}
|
||||
buf_arr[i] = (guint8) val;
|
||||
}
|
||||
/* Old format; list of ints */
|
||||
int_list = nm_keyfile_plugin_kf_get_integer_list (info->keyfile, setting_name, key, &int_list_len, NULL);
|
||||
if (int_list_len == addr_len) {
|
||||
for (i = 0; i < addr_len; i++) {
|
||||
const int val = int_list[i];
|
||||
|
||||
if (val < 0 || val > 255)
|
||||
break;
|
||||
addr_bin[i] = (guint8) val;
|
||||
}
|
||||
if (i == addr_len)
|
||||
goto good_addr_bin;
|
||||
}
|
||||
|
||||
if (!buf_arr) {
|
||||
handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
|
||||
_("ignoring invalid MAC address"));
|
||||
return;
|
||||
}
|
||||
handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
|
||||
_("ignoring invalid MAC address"));
|
||||
return;
|
||||
|
||||
tmp_string = nm_utils_hwaddr_ntoa (buf_arr, buf_len);
|
||||
mac_str = tmp_string;
|
||||
good_addr_bin:
|
||||
nm_utils_bin2hexstr_full (addr_bin, addr_len, ':', TRUE, addr_str);
|
||||
mac_str = addr_str;
|
||||
|
||||
out:
|
||||
g_object_set (setting, key, mac_str, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue