From: Yu Watanabe Date: Thu, 28 Feb 2019 01:37:58 +0000 (+0900) Subject: network: do not override previously specified family X-Git-Tag: v242-rc1~229^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=01d4e7323cda652dffd2783ea65e14c5a535bb96;p=thirdparty%2Fsystemd.git network: do not override previously specified family --- diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 232abc843fc..26fcae9cf29 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -704,18 +704,20 @@ int config_parse_gateway( r = route_new_static(network, NULL, 0, &n); } else r = route_new_static(network, filename, section_line, &n); - if (r < 0) return r; - r = in_addr_from_string_auto(rvalue, &n->family, &n->gw); + if (n->family == AF_UNSPEC) + r = in_addr_from_string_auto(rvalue, &n->family, &n->gw); + else + r = in_addr_from_string(n->family, rvalue, &n->gw); if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Route is invalid, ignoring assignment: %s", rvalue); + log_syntax(unit, LOG_ERR, filename, line, r, + "Invalid %s='%s', ignoring assignment: %m", lvalue, rvalue); return 0; } TAKE_PTR(n); - return 0; } @@ -745,15 +747,17 @@ int config_parse_preferred_src( if (r < 0) return r; - r = in_addr_from_string_auto(rvalue, &n->family, &n->prefsrc); + if (n->family == AF_UNSPEC) + r = in_addr_from_string_auto(rvalue, &n->family, &n->prefsrc); + else + r = in_addr_from_string(n->family, rvalue, &n->prefsrc); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Preferred source is invalid, ignoring assignment: %s", rvalue); + "Invalid %s='%s', ignoring assignment: %m", lvalue, rvalue); return 0; } TAKE_PTR(n); - return 0; } @@ -794,11 +798,13 @@ int config_parse_destination( } else assert_not_reached(lvalue); - r = in_addr_prefix_from_string_auto(rvalue, &n->family, buffer, prefixlen); + if (n->family == AF_UNSPEC) + r = in_addr_prefix_from_string_auto(rvalue, &n->family, buffer, prefixlen); + else + r = in_addr_prefix_from_string(rvalue, n->family, buffer, prefixlen); if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, - "Route %s= prefix is invalid, ignoring assignment: %s", - lvalue, rvalue); + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Invalid %s='%s', ignoring assignment: %m", lvalue, rvalue); return 0; }