From: Martin Willi Date: Thu, 21 Feb 2013 10:24:37 +0000 (+0100) Subject: Optionally support port ranges in leftprotoport X-Git-Tag: 5.0.3dr3~41^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0e7ef7f5221a4ce444ec77268a1b6bb16af1d824;p=thirdparty%2Fstrongswan.git Optionally support port ranges in leftprotoport --- diff --git a/src/starter/confread.c b/src/starter/confread.c index 22f0b7344b..883534aadf 100644 --- a/src/starter/confread.c +++ b/src/starter/confread.c @@ -303,7 +303,7 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token, end->from_port = 0xffff; end->to_port = 0; } - else + else if (*port) { svc = getservbyname(port, NULL); if (svc) @@ -313,12 +313,28 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token, else { p = strtol(port, &endptr, 0); - if ((*port && *endptr) || p < 0 || p > 0xffff) + if (p < 0 || p > 0xffff) + { + DBG1(DBG_APP, "# bad port: %s=%s", name, port); + goto err; + } + end->from_port = p; + if (*endptr == '-') + { + port = endptr + 1; + p = strtol(port, &endptr, 0); + if (p < 0 || p > 0xffff) + { + DBG1(DBG_APP, "# bad port: %s=%s", name, port); + goto err; + } + } + end->to_port = p; + if (*endptr) { - DBG1(DBG_APP, "# bad port: %s=%s", name, value); + DBG1(DBG_APP, "# bad port: %s=%s", name, port); goto err; } - end->from_port = end->to_port = (u_int16_t)p; } } if (sep)