diff options
author | Thomas Haller <thaller@redhat.com> | 2022-10-24 18:36:29 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-10-27 09:11:40 +0200 |
commit | bdb124852f407515661033aa20a827c9a186dc7c (patch) | |
tree | 85a9e7d9f78b83f39849d4b554f34da9178aaf71 | |
parent | d5be1c706ed4f0943b6cf36d142e28e1c0216f6c (diff) | |
download | NetworkManager-bdb124852f407515661033aa20a827c9a186dc7c.tar.gz |
libnm: unify IPv4/IPv6 forms of DNS to GVariant helper
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip4-config.c | 2 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-setting-ip6-config.c | 2 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-utils-private.h | 3 | ||||
-rw-r--r-- | src/libnm-core-impl/nm-utils.c | 78 |
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' * |