mirror of
https://github.com/systemd/systemd.git
synced 2025-01-12 13:18:14 +03:00
network: replace inet_pton() with in_addr_from_string()
This commit is contained in:
parent
57e447078d
commit
004aadcacd
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user