From: Yu Watanabe Date: Wed, 7 Nov 2018 06:31:26 +0000 (+0900) Subject: in-addr-util: make in_addr_default_prefix_from_string() or friend set 0 to prefixlen... X-Git-Tag: v240~395 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c6d8bbb66eb5b033fd8809a7d89401d337a5f1c5;p=thirdparty%2Fsystemd.git in-addr-util: make in_addr_default_prefix_from_string() or friend set 0 to prefixlen when family == AF_INET6 (#10665) Follow-up for a4798d4e6d88c2be2625ce62d8326eaa9b80f2ee. Fixes #10662. --- diff --git a/src/basic/in-addr-util.c b/src/basic/in-addr-util.c index 4cf6ab6974a..6a00de2ef09 100644 --- a/src/basic/in-addr-util.c +++ b/src/basic/in-addr-util.c @@ -531,10 +531,13 @@ int in_addr_prefix_from_string_internal( r = in_addr_parse_prefixlen(family, e+1, &k); if (r < 0) return r; - } else if (family == AF_INET && use_default_prefixlen) { - r = in4_addr_default_prefixlen(&buffer.in, &k); - if (r < 0) - return r; + } else if (use_default_prefixlen) { + if (family == AF_INET) { + r = in4_addr_default_prefixlen(&buffer.in, &k); + if (r < 0) + return r; + } else + k = 0; } else k = FAMILY_ADDRESS_SIZE(family) * 8; @@ -579,10 +582,13 @@ int in_addr_prefix_from_string_auto_internal( r = in_addr_parse_prefixlen(family, e+1, &k); if (r < 0) return r; - } else if (family == AF_INET && use_default_prefixlen) { - r = in4_addr_default_prefixlen(&buffer.in, &k); - if (r < 0) - return r; + } else if (use_default_prefixlen) { + if (family == AF_INET) { + r = in4_addr_default_prefixlen(&buffer.in, &k); + if (r < 0) + return r; + } else + k = 0; } else k = FAMILY_ADDRESS_SIZE(family) * 8; diff --git a/src/network/test-networkd-conf.c b/src/network/test-networkd-conf.c index a906630b380..abef6e761a3 100644 --- a/src/network/test-networkd-conf.c +++ b/src/network/test-networkd-conf.c @@ -199,7 +199,7 @@ static void test_config_parse_address(void) { test_config_parse_address_one("", AF_INET6, 0, NULL, 0); test_config_parse_address_one("/", AF_INET6, 0, NULL, 0); test_config_parse_address_one("/8", AF_INET6, 0, NULL, 0); - test_config_parse_address_one("::1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128); + test_config_parse_address_one("::1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0); test_config_parse_address_one("::1/0", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0); test_config_parse_address_one("::1/1", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1); test_config_parse_address_one("::1/2", AF_INET6, 1, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2); diff --git a/src/test/test-in-addr-util.c b/src/test/test-in-addr-util.c index 849166391ff..75c3e305c38 100644 --- a/src/test/test-in-addr-util.c +++ b/src/test/test-in-addr-util.c @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) { test_in_addr_prefix_from_string("", AF_INET6, -EINVAL, NULL, 0, true); test_in_addr_prefix_from_string("/", AF_INET6, -EINVAL, NULL, 0, true); test_in_addr_prefix_from_string("/8", AF_INET6, -EINVAL, NULL, 0, true); - test_in_addr_prefix_from_string("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, true); + test_in_addr_prefix_from_string("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, true); test_in_addr_prefix_from_string("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, true); test_in_addr_prefix_from_string("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, true); test_in_addr_prefix_from_string("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, true);