Check nat id a bit more strictly.

This commit is contained in:
Andrey V. Elsukov 2011-06-14 13:02:26 +00:00
parent c9d658e9f7
commit 980ccceb94
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=223079

View File

@ -721,16 +721,18 @@ ipfw_config_nat(int ac, char **av)
{ {
struct cfg_nat *n; /* Nat instance configuration. */ struct cfg_nat *n; /* Nat instance configuration. */
int i, off, tok, ac1; int i, off, tok, ac1;
char *id, *buf, **av1; char *id, *buf, **av1, *end;
size_t len; size_t len;
av++; ac--; av++; ac--;
/* Nat id. */ /* Nat id. */
if (ac && isdigit(**av)) { if (ac == 0)
id = *av;
ac--; av++;
} else
errx(EX_DATAERR, "missing nat id"); errx(EX_DATAERR, "missing nat id");
id = *av;
i = (int)strtol(id, &end, 0);
if (i <= 0 || *end != '\0')
errx(EX_DATAERR, "illegal nat id: %s", id);
av++; ac--;
if (ac == 0) if (ac == 0)
errx(EX_DATAERR, "missing option"); errx(EX_DATAERR, "missing option");
@ -787,7 +789,6 @@ ipfw_config_nat(int ac, char **av)
off = sizeof(*n); off = sizeof(*n);
memset(buf, 0, len); memset(buf, 0, len);
n = (struct cfg_nat *)buf; n = (struct cfg_nat *)buf;
i = atoi(id);
n->id = i; n->id = i;
while (ac > 0) { while (ac > 0) {