From: Tobias Brunner Date: Thu, 30 Oct 2014 11:32:16 +0000 (+0100) Subject: host: Ignore spaces around - when parsing ranges X-Git-Tag: 5.2.2dr1~46^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd67cd70c842fc2dacd253ba8b07a452269526dc;p=thirdparty%2Fstrongswan.git host: Ignore spaces around - when parsing ranges --- diff --git a/src/libstrongswan/networking/host.c b/src/libstrongswan/networking/host.c index 95c7390a75..07da3ef3b2 100644 --- a/src/libstrongswan/networking/host.c +++ b/src/libstrongswan/networking/host.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2012 Tobias Brunner + * Copyright (C) 2006-2014 Tobias Brunner * Copyright (C) 2006 Daniel Roethlisberger * Copyright (C) 2005-2006 Martin Willi * Copyright (C) 2005 Jan Hutter @@ -530,19 +530,27 @@ host_t *host_create_from_chunk(int family, chunk_t address, u_int16_t port) */ bool host_create_from_range(char *string, host_t **from, host_t **to) { - char *pos; + char *sep, *pos; - pos = strchr(string, '-'); - if (!pos) + sep = strchr(string, '-'); + if (!sep) { return FALSE; } - *to = host_create_from_string(pos + 1, 0); + for (pos = sep+1; *pos && *pos == ' '; pos++) + { + /* trim spaces before to address*/ + } + *to = host_create_from_string(pos, 0); if (!*to) { return FALSE; } - pos = strndup(string, pos - string); + for (pos = sep-1; pos > string && *pos == ' '; pos--) + { + /* trim spaces behind from address */ + } + pos = strndup(string, pos - string + 1); *from = host_create_from_string_and_family(pos, (*to)->get_family(*to), 0); free(pos); if (!*from) diff --git a/src/libstrongswan/networking/host.h b/src/libstrongswan/networking/host.h index 3670768c49..26f23bc997 100644 --- a/src/libstrongswan/networking/host.h +++ b/src/libstrongswan/networking/host.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Tobias Brunner + * Copyright (C) 2006-2014 Tobias Brunner * Copyright (C) 2006 Daniel Roethlisberger * Copyright (C) 2005-2008 Martin Willi * Copyright (C) 2005 Jan Hutter diff --git a/src/libstrongswan/tests/suites/test_host.c b/src/libstrongswan/tests/suites/test_host.c index 1f97bff6e6..ec3c83f81c 100644 --- a/src/libstrongswan/tests/suites/test_host.c +++ b/src/libstrongswan/tests/suites/test_host.c @@ -438,14 +438,17 @@ START_TEST(test_create_from_range_v4) verify_range("192.168.0.1-192.168.0.1", AF_INET, addr_v4, addr_v4); verify_range("192.168.0.1-192.168.0.5", AF_INET, addr_v4, addr_v4_to); + verify_range("192.168.0.1- 192.168.0.5", AF_INET, addr_v4, addr_v4_to); + verify_range("192.168.0.1 -192.168.0.5", AF_INET, addr_v4, addr_v4_to); + verify_range("192.168.0.1 - 192.168.0.5", AF_INET, addr_v4, addr_v4_to); verify_range("192.168.0.5-192.168.0.1", AF_INET, addr_v4_to, addr_v4); verify_range("192.168.0.1", 0, chunk_empty, chunk_empty); verify_range("192.168.0.1-", 0, chunk_empty, chunk_empty); + verify_range("-192.168.0.1", 0, chunk_empty, chunk_empty); verify_range("192.168.0.1-192", 0, chunk_empty, chunk_empty); verify_range("192.168.0.1-192.168", 0, chunk_empty, chunk_empty); verify_range("192.168.0.1-192.168.0", 0, chunk_empty, chunk_empty); - verify_range("192.168.0.1 - 192.168.0.5", 0, chunk_empty, chunk_empty); verify_range("foo.b.a.r", 0, chunk_empty, chunk_empty); verify_range("foo.b.a.r-b.a.r.f", 0, chunk_empty, chunk_empty); } @@ -463,12 +466,15 @@ START_TEST(test_create_from_range_v6) verify_range("fec1::1-fec1::1", AF_INET6, addr_v6, addr_v6); verify_range("fec1::1-fec1::5", AF_INET6, addr_v6, addr_v6_to); + verify_range("fec1::1- fec1::5", AF_INET6, addr_v6, addr_v6_to); + verify_range("fec1::1 -fec1::5", AF_INET6, addr_v6, addr_v6_to); + verify_range("fec1::1 - fec1::5", AF_INET6, addr_v6, addr_v6_to); verify_range("fec1::5-fec1::1", AF_INET6, addr_v6_to, addr_v6); verify_range("fec1::1", 0, chunk_empty, chunk_empty); verify_range("fec1::1-", 0, chunk_empty, chunk_empty); + verify_range("-fec1::1", 0, chunk_empty, chunk_empty); verify_range("fec1::1-fec1", 0, chunk_empty, chunk_empty); - verify_range("fec1::1 - fec1::5", 0, chunk_empty, chunk_empty); verify_range("foo::bar", 0, chunk_empty, chunk_empty); verify_range("foo::bar-bar::foo", 0, chunk_empty, chunk_empty);