From: Yu Watanabe Date: Wed, 8 May 2019 22:14:06 +0000 (+0200) Subject: network: replace inet_pton() with in_addr_from_string() X-Git-Tag: v243-rc1~459^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=004aadcacd690c60542ea4eccdb32e3b5b4e7d79;p=thirdparty%2Fsystemd.git network: replace inet_pton() with in_addr_from_string() --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index ea4576b6abc..c175e955848 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1136,20 +1136,20 @@ static int link_push_uplink_ntp_to_dhcp_server(Link *link, sd_dhcp_server *s) { log_debug("Copying NTP server information from %s", link->ifname); STRV_FOREACH(a, link->network->ntp) { - struct in_addr ia; + union in_addr_union ia; /* Only look for IPv4 addresses */ - if (inet_pton(AF_INET, *a, &ia) <= 0) + if (in_addr_from_string(AF_INET, *a, &ia) <= 0) continue; /* Never propagate obviously borked data */ - if (in4_addr_is_null(&ia) || in4_addr_is_localhost(&ia)) + if (in4_addr_is_null(&ia.in) || in4_addr_is_localhost(&ia.in)) continue; if (!GREEDY_REALLOC(addresses, n_allocated, n_addresses + 1)) return log_oom(); - addresses[n_addresses++] = ia; + addresses[n_addresses++] = ia.in; } if (link->network->dhcp_use_ntp && link->dhcp_lease) { diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 255aeed3a65..dc1da8376bd 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -1117,7 +1117,8 @@ int config_parse_dhcp_server_dns( for (;;) { _cleanup_free_ char *w = NULL; - struct in_addr a, *m; + union in_addr_union a; + struct in_addr *m; r = extract_first_word(&p, &w, NULL, 0); if (r == -ENOMEM) @@ -1130,9 +1131,10 @@ int config_parse_dhcp_server_dns( if (r == 0) break; - if (inet_pton(AF_INET, w, &a) <= 0) { - log_syntax(unit, LOG_ERR, filename, line, 0, - "Failed to parse DNS server address, ignoring: %s", w); + r = in_addr_from_string(AF_INET, w, &a); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, + "Failed to parse DNS server address '%s', ignoring assignment: %m", w); continue; } @@ -1140,7 +1142,7 @@ int config_parse_dhcp_server_dns( if (!m) return log_oom(); - m[n->n_dhcp_server_dns++] = a; + m[n->n_dhcp_server_dns++] = a.in; n->dhcp_server_dns = m; } @@ -1277,7 +1279,8 @@ int config_parse_dhcp_server_ntp( for (;;) { _cleanup_free_ char *w = NULL; - struct in_addr a, *m; + union in_addr_union a; + struct in_addr *m; r = extract_first_word(&p, &w, NULL, 0); if (r == -ENOMEM) @@ -1290,9 +1293,10 @@ int config_parse_dhcp_server_ntp( if (r == 0) return 0; - if (inet_pton(AF_INET, w, &a) <= 0) { - log_syntax(unit, LOG_ERR, filename, line, 0, - "Failed to parse NTP server address, ignoring: %s", w); + r = in_addr_from_string(AF_INET, w, &a); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, + "Failed to parse NTP server address '%s', ignoring: %m", w); continue; } @@ -1300,7 +1304,7 @@ int config_parse_dhcp_server_ntp( if (!m) return log_oom(); - m[n->n_dhcp_server_ntp++] = a; + m[n->n_dhcp_server_ntp++] = a.in; n->dhcp_server_ntp = m; } } diff --git a/src/network/test-network.c b/src/network/test-network.c index 21ee97e84ea..561400f1724 100644 --- a/src/network/test-network.c +++ b/src/network/test-network.c @@ -15,32 +15,31 @@ static void test_deserialize_in_addr(void) { _cleanup_free_ struct in_addr *addresses = NULL; _cleanup_free_ struct in6_addr *addresses6 = NULL; - struct in_addr a, b, c; - struct in6_addr d, e, f; + union in_addr_union a, b, c, d, e, f; int size; const char *addresses_string = "192.168.0.1 0:0:0:0:0:FFFF:204.152.189.116 192.168.0.2 ::1 192.168.0.3 1:0:0:0:0:0:0:8"; - assert_se(inet_pton(AF_INET, "0:0:0:0:0:FFFF:204.152.189.116", &a) == 0); - assert_se(inet_pton(AF_INET6, "192.168.0.1", &d) == 0); + assert_se(in_addr_from_string(AF_INET, "0:0:0:0:0:FFFF:204.152.189.116", &a) < 0); + assert_se(in_addr_from_string(AF_INET6, "192.168.0.1", &d) < 0); - assert_se(inet_pton(AF_INET, "192.168.0.1", &a) == 1); - assert_se(inet_pton(AF_INET, "192.168.0.2", &b) == 1); - assert_se(inet_pton(AF_INET, "192.168.0.3", &c) == 1); - assert_se(inet_pton(AF_INET6, "0:0:0:0:0:FFFF:204.152.189.116", &d) == 1); - assert_se(inet_pton(AF_INET6, "::1", &e) == 1); - assert_se(inet_pton(AF_INET6, "1:0:0:0:0:0:0:8", &f) == 1); + assert_se(in_addr_from_string(AF_INET, "192.168.0.1", &a) >= 0); + assert_se(in_addr_from_string(AF_INET, "192.168.0.2", &b) >= 0); + assert_se(in_addr_from_string(AF_INET, "192.168.0.3", &c) >= 0); + assert_se(in_addr_from_string(AF_INET6, "0:0:0:0:0:FFFF:204.152.189.116", &d) >= 0); + assert_se(in_addr_from_string(AF_INET6, "::1", &e) >= 0); + assert_se(in_addr_from_string(AF_INET6, "1:0:0:0:0:0:0:8", &f) >= 0); assert_se((size = deserialize_in_addrs(&addresses, addresses_string)) >= 0); assert_se(size == 3); - assert_se(!memcmp(&a, &addresses[0], sizeof(struct in_addr))); - assert_se(!memcmp(&b, &addresses[1], sizeof(struct in_addr))); - assert_se(!memcmp(&c, &addresses[2], sizeof(struct in_addr))); + assert_se(in_addr_equal(AF_INET, &a, (union in_addr_union *) &addresses[0])); + assert_se(in_addr_equal(AF_INET, &b, (union in_addr_union *) &addresses[1])); + assert_se(in_addr_equal(AF_INET, &c, (union in_addr_union *) &addresses[2])); assert_se((size = deserialize_in6_addrs(&addresses6, addresses_string)) >= 0); assert_se(size == 3); - assert_se(!memcmp(&d, &addresses6[0], sizeof(struct in6_addr))); - assert_se(!memcmp(&e, &addresses6[1], sizeof(struct in6_addr))); - assert_se(!memcmp(&f, &addresses6[2], sizeof(struct in6_addr))); + assert_se(in_addr_equal(AF_INET6, &d, (union in_addr_union *) &addresses6[0])); + assert_se(in_addr_equal(AF_INET6, &e, (union in_addr_union *) &addresses6[1])); + assert_se(in_addr_equal(AF_INET6, &f, (union in_addr_union *) &addresses6[2])); } static void test_deserialize_dhcp_routes(void) { @@ -146,13 +145,13 @@ static void test_address_equality(void) { a2->family = AF_INET; assert_se(address_equal(a1, a2)); - assert_se(inet_pton(AF_INET, "192.168.3.9", &a1->in_addr.in)); + assert_se(in_addr_from_string(AF_INET, "192.168.3.9", &a1->in_addr) >= 0); assert_se(!address_equal(a1, a2)); - assert_se(inet_pton(AF_INET, "192.168.3.9", &a2->in_addr.in)); + assert_se(in_addr_from_string(AF_INET, "192.168.3.9", &a2->in_addr) >= 0); assert_se(address_equal(a1, a2)); - assert_se(inet_pton(AF_INET, "192.168.3.10", &a1->in_addr_peer.in)); + assert_se(in_addr_from_string(AF_INET, "192.168.3.10", &a1->in_addr_peer) >= 0); assert_se(address_equal(a1, a2)); - assert_se(inet_pton(AF_INET, "192.168.3.11", &a2->in_addr_peer.in)); + assert_se(in_addr_from_string(AF_INET, "192.168.3.11", &a2->in_addr_peer) >= 0); assert_se(address_equal(a1, a2)); a1->prefixlen = 10; assert_se(!address_equal(a1, a2)); @@ -163,14 +162,14 @@ static void test_address_equality(void) { assert_se(!address_equal(a1, a2)); a2->family = AF_INET6; - assert_se(inet_pton(AF_INET6, "2001:4ca0:4f01::2", &a1->in_addr.in6)); - assert_se(inet_pton(AF_INET6, "2001:4ca0:4f01::2", &a2->in_addr.in6)); + assert_se(in_addr_from_string(AF_INET6, "2001:4ca0:4f01::2", &a1->in_addr) >= 0); + assert_se(in_addr_from_string(AF_INET6, "2001:4ca0:4f01::2", &a2->in_addr) >= 0); assert_se(address_equal(a1, a2)); a2->prefixlen = 8; assert_se(address_equal(a1, a2)); - assert_se(inet_pton(AF_INET6, "2001:4ca0:4f01::1", &a2->in_addr.in6)); + assert_se(in_addr_from_string(AF_INET6, "2001:4ca0:4f01::1", &a2->in_addr) >= 0); assert_se(!address_equal(a1, a2)); }