mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-01 22:05:45 +00:00
libnm: unify IPv4/IPv6 forms of DNS to GVariant helper
This commit is contained in:
parent
d5be1c706e
commit
bdb124852f
|
@ -391,7 +391,7 @@ ip4_dns_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil)
|
|||
if (nm_g_ptr_array_len(dns) == 0)
|
||||
return NULL;
|
||||
|
||||
return _nm_utils_ip4_dns_to_variant((const char *const *) dns->pdata, dns->len);
|
||||
return nm_utils_dns_to_variant(AF_INET, (const char *const *) dns->pdata, dns->len);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
@ -392,7 +392,7 @@ ip6_dns_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil)
|
|||
if (nm_g_ptr_array_len(dns) == 0)
|
||||
return NULL;
|
||||
|
||||
return _nm_utils_ip6_dns_to_variant((const char *const *) dns->pdata, dns->len);
|
||||
return nm_utils_dns_to_variant(AF_INET6, (const char *const *) dns->pdata, dns->len);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
@ -64,8 +64,7 @@ GVariant *_nm_team_settings_property_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS
|
|||
void _nm_team_settings_property_from_dbus_link_watchers(
|
||||
_NM_SETT_INFO_PROP_FROM_DBUS_GPROP_FCN_ARGS _nm_nil);
|
||||
|
||||
GVariant *_nm_utils_ip4_dns_to_variant(const char *const *dns, gssize len);
|
||||
GVariant *_nm_utils_ip6_dns_to_variant(const char *const *dns, gssize len);
|
||||
GVariant *nm_utils_dns_to_variant(int addr_family, const char *const *dns, gssize len);
|
||||
|
||||
const char *const *nmtst_system_encodings_for_lang(const char *lang);
|
||||
const char *const *nmtst_system_encodings_get_default(void);
|
||||
|
|
|
@ -1297,12 +1297,30 @@ nm_utils_wpa_psk_valid(const char *psk)
|
|||
GVariant *
|
||||
nm_utils_ip4_dns_to_variant(char **dns)
|
||||
{
|
||||
return _nm_utils_ip4_dns_to_variant(NM_CAST_STRV_CC(dns), -1);
|
||||
return nm_utils_dns_to_variant(AF_INET, NM_CAST_STRV_CC(dns), -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_utils_ip6_dns_to_variant:
|
||||
* @dns: (type utf8): an array of IP address strings
|
||||
*
|
||||
* Utility function to convert an array of IP address strings int a #GVariant of
|
||||
* type 'aay' representing an array of IPv6 addresses.
|
||||
*
|
||||
* If a string cannot be parsed, it will be silently ignored.
|
||||
*
|
||||
* Returns: (transfer none): a new floating #GVariant representing @dns.
|
||||
**/
|
||||
GVariant *
|
||||
nm_utils_ip6_dns_to_variant(char **dns)
|
||||
{
|
||||
return nm_utils_dns_to_variant(AF_INET6, NM_CAST_STRV_CC(dns), -1);
|
||||
}
|
||||
|
||||
GVariant *
|
||||
_nm_utils_ip4_dns_to_variant(const char *const *dns, gssize len)
|
||||
nm_utils_dns_to_variant(int addr_family, const char *const *dns, gssize len)
|
||||
{
|
||||
const int IS_IPv4 = NM_IS_IPv4(addr_family);
|
||||
GVariantBuilder builder;
|
||||
gsize l;
|
||||
gsize i;
|
||||
|
@ -1312,17 +1330,20 @@ _nm_utils_ip4_dns_to_variant(const char *const *dns, gssize len)
|
|||
else
|
||||
l = len;
|
||||
|
||||
g_variant_builder_init(&builder, G_VARIANT_TYPE("au"));
|
||||
g_variant_builder_init(&builder, IS_IPv4 ? G_VARIANT_TYPE("au") : G_VARIANT_TYPE("aay"));
|
||||
|
||||
for (i = 0; i < l; i++) {
|
||||
in_addr_t ip;
|
||||
NMIPAddr ip;
|
||||
|
||||
/* We can only represent the IP address on the legacy property "ipv4.dns".
|
||||
/* We can only represent the IP address on the legacy property "ipv[46].dns".
|
||||
* Expose what we can. */
|
||||
if (!nm_utils_dnsname_parse(AF_INET, dns[i], NULL, &ip, NULL))
|
||||
if (!nm_utils_dnsname_parse(addr_family, dns[i], NULL, &ip, NULL))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add(&builder, "u", ip);
|
||||
if (IS_IPv4)
|
||||
g_variant_builder_add(&builder, "u", ip);
|
||||
else
|
||||
g_variant_builder_add(&builder, "@ay", nm_g_variant_new_ay_in6addr(&ip.addr6));
|
||||
}
|
||||
|
||||
return g_variant_builder_end(&builder);
|
||||
|
@ -1610,49 +1631,6 @@ nm_utils_ip4_get_default_prefix(guint32 ip)
|
|||
return nm_ip4_addr_get_default_prefix(ip);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_utils_ip6_dns_to_variant:
|
||||
* @dns: (type utf8): an array of IP address strings
|
||||
*
|
||||
* Utility function to convert an array of IP address strings int a #GVariant of
|
||||
* type 'aay' representing an array of IPv6 addresses.
|
||||
*
|
||||
* If a string cannot be parsed, it will be silently ignored.
|
||||
*
|
||||
* Returns: (transfer none): a new floating #GVariant representing @dns.
|
||||
**/
|
||||
GVariant *
|
||||
nm_utils_ip6_dns_to_variant(char **dns)
|
||||
{
|
||||
return _nm_utils_ip6_dns_to_variant(NM_CAST_STRV_CC(dns), -1);
|
||||
}
|
||||
|
||||
GVariant *
|
||||
_nm_utils_ip6_dns_to_variant(const char *const *dns, gssize len)
|
||||
{
|
||||
GVariantBuilder builder;
|
||||
gsize i;
|
||||
gsize l;
|
||||
|
||||
if (len < 0)
|
||||
l = NM_PTRARRAY_LEN(dns);
|
||||
else
|
||||
l = len;
|
||||
|
||||
g_variant_builder_init(&builder, G_VARIANT_TYPE("aay"));
|
||||
for (i = 0; i < l; i++) {
|
||||
struct in6_addr ip;
|
||||
|
||||
/* We can only represent the IP address on the legacy property "ipv6.dns".
|
||||
* Expose what we can. */
|
||||
if (!nm_utils_dnsname_parse(AF_INET6, dns[i], NULL, &ip, NULL))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add(&builder, "@ay", nm_g_variant_new_ay_in6addr(&ip));
|
||||
}
|
||||
return g_variant_builder_end(&builder);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_utils_ip6_dns_from_variant:
|
||||
* @value: a #GVariant of type 'aay'
|
||||
|
|
Loading…
Reference in a new issue