cloud-setup: add nmcs_utils_ipaddr_normalize*() helper

This commit is contained in:
Thomas Haller 2021-01-05 16:21:56 +01:00
parent f0faf2e1a1
commit 30e1f73347
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 73 additions and 0 deletions

View file

@ -533,6 +533,59 @@ nmcs_utils_hwaddr_normalize(const char *hwaddr, gssize len)
/*****************************************************************************/
gboolean
nmcs_utils_ipaddr_normalize_bin(int addr_family,
const char *addr,
gssize len,
int * out_addr_family,
gpointer out_addr_bin)
{
gs_free char *addr_clone = NULL;
char * ad;
gsize l;
nm_assert(len >= -1);
if (len < 0) {
if (!addr)
return FALSE;
l = strlen(addr);
} else {
l = len;
if (l > 0 && addr[l - 1] == '\0') {
/* we accept one '\0' at the end of the string. */
l--;
}
if (memchr(addr, '\0', l)) {
/* but we don't accept other NUL characters in the middle. */
return FALSE;
}
}
if (l == 0)
return FALSE;
nm_assert(addr);
ad = nm_strndup_a(300, addr, l, &addr_clone);
g_strstrip(ad);
return nm_utils_parse_inaddr_bin(addr_family, ad, out_addr_family, out_addr_bin);
}
char *
nmcs_utils_ipaddr_normalize(int addr_family, const char *addr, gssize len)
{
NMIPAddr ipaddr;
if (!nmcs_utils_ipaddr_normalize_bin(addr_family, addr, len, &addr_family, &ipaddr))
return NULL;
return nm_utils_inet_ntop_dup(addr_family, &ipaddr);
}
/*****************************************************************************/
const char *
nmcs_utils_parse_memmem(GBytes *mem, const char *needle)
{

View file

@ -90,6 +90,26 @@ nmcs_utils_hwaddr_normalize_gbytes(GBytes *hwaddr)
/*****************************************************************************/
gboolean nmcs_utils_ipaddr_normalize_bin(int addr_family,
const char *addr,
gssize len,
int * out_addr_family,
gpointer out_addr_bin);
char *nmcs_utils_ipaddr_normalize(int addr_family, const char *addr, gssize len);
static inline char *
nmcs_utils_ipaddr_normalize_gbytes(int addr_family, GBytes *addr)
{
const char *str;
gsize len;
str = g_bytes_get_data(addr, &len);
return nmcs_utils_ipaddr_normalize(addr_family, str, len);
}
/*****************************************************************************/
const char *nmcs_utils_parse_memmem(GBytes *mem, const char *needle);
const char *nmcs_utils_parse_get_full_line(GBytes *mem, const char *needle);