summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-10-24 18:36:29 +0200
committerThomas Haller <thaller@redhat.com>2022-10-27 09:11:40 +0200
commitbdb124852f407515661033aa20a827c9a186dc7c (patch)
tree85a9e7d9f78b83f39849d4b554f34da9178aaf71
parentd5be1c706ed4f0943b6cf36d142e28e1c0216f6c (diff)
downloadNetworkManager-bdb124852f407515661033aa20a827c9a186dc7c.tar.gz
libnm: unify IPv4/IPv6 forms of DNS to GVariant helper
-rw-r--r--src/libnm-core-impl/nm-setting-ip4-config.c2
-rw-r--r--src/libnm-core-impl/nm-setting-ip6-config.c2
-rw-r--r--src/libnm-core-impl/nm-utils-private.h3
-rw-r--r--src/libnm-core-impl/nm-utils.c78
4 files changed, 31 insertions, 54 deletions
diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c
index 230425347d..ccc3760e06 100644
--- a/src/libnm-core-impl/nm-setting-ip4-config.c
+++ b/src/libnm-core-impl/nm-setting-ip4-config.c
@@ -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
diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c
index a3f4d0c9dc..a87cfb0a28 100644
--- a/src/libnm-core-impl/nm-setting-ip6-config.c
+++ b/src/libnm-core-impl/nm-setting-ip6-config.c
@@ -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
diff --git a/src/libnm-core-impl/nm-utils-private.h b/src/libnm-core-impl/nm-utils-private.h
index 1a6f29ef9b..a89a466983 100644
--- a/src/libnm-core-impl/nm-utils-private.h
+++ b/src/libnm-core-impl/nm-utils-private.h
@@ -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);
diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c
index adcd1d258b..6550dc38d3 100644
--- a/src/libnm-core-impl/nm-utils.c
+++ b/src/libnm-core-impl/nm-utils.c
@@ -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_ip4_dns_to_variant(const char *const *dns, gssize len)
+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_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);
@@ -1611,49 +1632,6 @@ nm_utils_ip4_get_default_prefix(guint32 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'
*