diff options
author | ae <ae@FreeBSD.org> | 2011-06-14 13:02:26 +0000 |
---|---|---|
committer | ae <ae@FreeBSD.org> | 2011-06-14 13:02:26 +0000 |
commit | 7b7c6f4e74ea94ae75d0f52366eaf6a8ccd0022e (patch) | |
tree | c628e85711a1edf224273dd7a8f665b893fc0e41 /sbin/ipfw/nat.c | |
parent | 7cd78b912e49a7054d596bcc33452dd4e104da5a (diff) | |
download | FreeBSD-src-7b7c6f4e74ea94ae75d0f52366eaf6a8ccd0022e.zip FreeBSD-src-7b7c6f4e74ea94ae75d0f52366eaf6a8ccd0022e.tar.gz |
Check nat id a bit more strictly.
Diffstat (limited to 'sbin/ipfw/nat.c')
-rw-r--r-- | sbin/ipfw/nat.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sbin/ipfw/nat.c b/sbin/ipfw/nat.c index 0331d383..e91c6ec 100644 --- a/sbin/ipfw/nat.c +++ b/sbin/ipfw/nat.c @@ -721,16 +721,18 @@ ipfw_config_nat(int ac, char **av) { struct cfg_nat *n; /* Nat instance configuration. */ int i, off, tok, ac1; - char *id, *buf, **av1; + char *id, *buf, **av1, *end; size_t len; av++; ac--; /* Nat id. */ - if (ac && isdigit(**av)) { - id = *av; - ac--; av++; - } else + if (ac == 0) 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) errx(EX_DATAERR, "missing option"); @@ -787,7 +789,6 @@ ipfw_config_nat(int ac, char **av) off = sizeof(*n); memset(buf, 0, len); n = (struct cfg_nat *)buf; - i = atoi(id); n->id = i; while (ac > 0) { |