From c45c5c37a49de31c65cbf96038bc5db73a8fdb09 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 20 Feb 2023 15:58:20 +0100 Subject: [PATCH] libnm: accept ipv[46].dhcp-iaid as hexstr dhclient exports the currently used IAID in the environment as hex string. We expose this environment in our API, so this is also the format that NetworkManager uses. Accept setting the ipv[46].dhcp-iaid as hex string, so that the same format is accepted on the profile. While at it, also accept a hex number (0x) because it is also convenient, and this change already introduces the precedent that the IAID string is not unique/normalized. (cherry picked from commit e5dc48919721bb41c8acd49e95bc5f174907971a) (cherry picked from commit 0b4446e252e3a686478d7c080265d0f0e7001cc6) --- src/libnm-core-impl/nm-utils.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index 1c6d36c20b..1ff8ada11c 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -5592,7 +5592,8 @@ _nm_utils_bridge_vlan_verify_list(GPtrArray *vlans, gboolean _nm_utils_iaid_verify(const char *str, gint64 *out_value) { - gint64 iaid; + gint64 i64; + guint32 u32; NM_SET_OUT(out_value, -1); @@ -5602,10 +5603,16 @@ _nm_utils_iaid_verify(const char *str, gint64 *out_value) if (NM_IAID_IS_SPECIAL(str)) return TRUE; - if (NM_STRCHAR_ALL(str, ch, ch >= '0' && ch <= '9') && (str[0] != '0' || str[1] == '\0') - && (iaid = _nm_utils_ascii_str_to_int64(str, 10, 0, G_MAXUINT32, -1)) != -1) { - NM_SET_OUT(out_value, iaid); - return TRUE; + if (NM_STRCHAR_ALL(str, ch, g_ascii_isxdigit(ch) || NM_IN_SET(ch, 'x', ':'))) { + if ((i64 = _nm_utils_ascii_str_to_int64(str, 0, 0, G_MAXUINT32, -1)) != -1) { + NM_SET_OUT(out_value, i64); + return TRUE; + } + + if (nm_dhcp_iaid_from_hexstr(str, &u32)) { + NM_SET_OUT(out_value, u32); + return TRUE; + } } return FALSE;