diff options
-rw-r--r-- | src/starter/confread.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/starter/confread.c b/src/starter/confread.c index 22f0b7344..883534aad 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) |