From: Yu Watanabe Date: Wed, 8 Dec 2021 20:50:01 +0000 (+0900) Subject: network: refuse empty or numeric route table names X-Git-Tag: v250-rc1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2d602f4b4c1614c35000dd6a5c351c482902ee4;p=thirdparty%2Fsystemd.git network: refuse empty or numeric route table names --- diff --git a/src/network/networkd-route-util.c b/src/network/networkd-route-util.c index f5b502f4644..c202078f07d 100644 --- a/src/network/networkd-route-util.c +++ b/src/network/networkd-route-util.c @@ -360,9 +360,19 @@ int config_parse_route_table_names( *num++ = '\0'; + if (isempty(name)) { + log_syntax(unit, LOG_WARNING, filename, line, 0, + "Route table name cannot be empty. Ignoring assignment: %s:%s", name, num); + continue; + } + if (in_charset(name, DIGITS)) { + log_syntax(unit, LOG_WARNING, filename, line, 0, + "Route table name cannot be numeric. Ignoring assignment: %s:%s", name, num); + continue; + } if (STR_IN_SET(name, "default", "main", "local")) { log_syntax(unit, LOG_WARNING, filename, line, 0, - "Route table name %s already predefined. Ignoring assignment: %s:%s", name, name, num); + "Route table name %s is already predefined. Ignoring assignment: %s:%s", name, name, num); continue; } diff --git a/src/network/test-network.c b/src/network/test-network.c index 90262072658..4409a47cfba 100644 --- a/src/network/test-network.c +++ b/src/network/test-network.c @@ -146,6 +146,12 @@ static void test_route_tables(Manager *manager) { assert_se(!manager->route_table_names_by_number); assert_se(!manager->route_table_numbers_by_name); + /* Invalid pairs */ + assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "main:123 default:333 local:999", manager, manager) >= 0); + assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "1234:321 :567 hoge:foo aaa:-888", manager, manager) >= 0); + assert_se(!manager->route_table_names_by_number); + assert_se(!manager->route_table_numbers_by_name); + test_route_tables_one(manager, "default", 253); test_route_tables_one(manager, "main", 254); test_route_tables_one(manager, "local", 255);