summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-01-05 16:32:04 +0100
committerThomas Haller <thaller@redhat.com>2021-01-08 16:32:49 +0100
commitfc8315cd9416cab19577e81c0af2d999b0c9b227 (patch)
treede63fdd6d65ad733f5926283a01f2e0893672881
parent288b38e7190a03a52279429c9ba5331e1b70d2aa (diff)
downloadNetworkManager-fc8315cd9416cab19577e81c0af2d999b0c9b227.tar.gz
cloud-setup: use nmcs_utils_ipaddr_normalize_bin() in Azure provider
-rw-r--r--clients/cloud-setup/nmcs-provider-azure.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c
index b2490b87f9..da7cf54084 100644
--- a/clients/cloud-setup/nmcs-provider-azure.c
+++ b/clients/cloud-setup/nmcs-provider-azure.c
@@ -118,8 +118,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client,
gs_unref_bytes GBytes *response = NULL;
gs_free_error GError *error = NULL;
const char * fip_str = NULL;
- in_addr_t tmp_addr;
- int tmp_prefix;
+ gsize fip_len;
nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error);
@@ -131,32 +130,42 @@ _get_config_fetch_done_cb(NMHttpClient * http_client,
if (error)
goto out_done;
- fip_str = g_bytes_get_data(response, NULL);
+ fip_str = g_bytes_get_data(response, &fip_len);
+ nm_assert(fip_str[fip_len] == '\0');
+
iface_data->iface_get_config =
g_hash_table_lookup(get_config_data->result_dict, iface_data->hwaddr);
iface_get_config = iface_data->iface_get_config;
if (is_ipv4) {
- if (!nm_utils_parse_inaddr_bin(AF_INET, fip_str, NULL, &tmp_addr)) {
+ char tmp_addr_str[NM_UTILS_INET_ADDRSTRLEN];
+ in_addr_t tmp_addr;
+
+ if (!nmcs_utils_ipaddr_normalize_bin(AF_INET, fip_str, fip_len, NULL, &tmp_addr)) {
error =
nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN, "ip is not a valid private ip address");
goto out_done;
}
_LOGD("interface[%" G_GSSIZE_FORMAT "]: adding private ip %s",
iface_data->iface_idx,
- fip_str);
+ _nm_utils_inet4_ntop(tmp_addr, tmp_addr_str));
iface_get_config->ipv4s_arr[iface_get_config->ipv4s_len] = tmp_addr;
iface_get_config->has_ipv4s = TRUE;
iface_get_config->ipv4s_len++;
} else {
- tmp_prefix = (_nm_utils_ascii_str_to_int64(fip_str, 10, 0, 32, -1));
+ int tmp_prefix = -1;
+
+ if (fip_len > 0 && memchr(fip_str, '\0', fip_len - 1)) {
+ /* we have an embedded "\0" inside the string (except trailing). That is not
+ * allowed*/
+ } else
+ tmp_prefix = _nm_utils_ascii_str_to_int64(fip_str, 10, 0, 32, -1);
if (tmp_prefix == -1) {
- _LOGD("interface[%" G_GSSIZE_FORMAT "]: invalid prefix %d",
- iface_data->iface_idx,
- tmp_prefix);
+ _LOGD("interface[%" G_GSSIZE_FORMAT "]: invalid prefix", iface_data->iface_idx);
goto out_done;
}
+
_LOGD("interface[%" G_GSSIZE_FORMAT "]: adding prefix %d",
iface_data->iface_idx,
tmp_prefix);