From: Tobias Brunner Date: Wed, 11 Apr 2018 10:15:55 +0000 (+0200) Subject: traffic-selector: Always print protocol if either protocol or port is set X-Git-Tag: 5.6.3dr1~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a36d8097ede6900c60c1affa720c74e1bfeb6975;p=thirdparty%2Fstrongswan.git traffic-selector: Always print protocol if either protocol or port is set This helps to distinguish between port and protocol if only one of them is set. If no protocol is set it's printed as 0, if the traffic selector covers any port (0-65535) the slash that separates the two values and the port is omitted. --- diff --git a/src/libstrongswan/selectors/traffic_selector.c b/src/libstrongswan/selectors/traffic_selector.c index 12f1602241..6b85270f34 100644 --- a/src/libstrongswan/selectors/traffic_selector.c +++ b/src/libstrongswan/selectors/traffic_selector.c @@ -293,15 +293,16 @@ int traffic_selector_printf_hook(printf_hook_data_t *data, written += print_in_hook(data, "%d", this->protocol); } } - - if (has_proto && has_ports) + else { - written += print_in_hook(data, "/"); + written += print_in_hook(data, "0"); } /* build port string */ if (has_ports) { + written += print_in_hook(data, "/"); + if (this->from_port == this->to_port) { struct servent *serv; diff --git a/src/libstrongswan/tests/suites/test_traffic_selector.c b/src/libstrongswan/tests/suites/test_traffic_selector.c index 93361f9bf4..26f2f8e140 100644 --- a/src/libstrongswan/tests/suites/test_traffic_selector.c +++ b/src/libstrongswan/tests/suites/test_traffic_selector.c @@ -72,10 +72,13 @@ START_TEST(test_create_from_cidr) verify("10.1.0.1/32[udp]", "10.1.0.1/32[17]", traffic_selector_create_from_cidr("10.1.0.1/32", IPPROTO_UDP, 0, 65535)); + verify("10.1.0.1/32[0/domain]", "10.1.0.1/32[0/53]", + traffic_selector_create_from_cidr("10.1.0.1/32", 0, + 53, 53)); verify("10.1.0.1/32[udp/1234-1235]", "10.1.0.1/32[17/1234-1235]", traffic_selector_create_from_cidr("10.1.0.1/32", IPPROTO_UDP, 1234, 1235)); - verify("10.1.0.0/16[OPAQUE]", NULL, + verify("10.1.0.0/16[0/OPAQUE]", NULL, traffic_selector_create_from_cidr("10.1.0.0/16", 0, 65535, 0)); verify(NULL, NULL,