From 664994a0a5b993bdfde8e88fb8b55e6c54c396bb Mon Sep 17 00:00:00 2001 From: kn Date: Sat, 28 Jul 2018 23:36:55 +0000 Subject: Use strtonum in host() This is simpler than checking three cases for `q' and gives nicer error messages. While here, use `v6mask' as maximum netmask instead of hardcoding it. OK sashan --- sbin/pfctl/pfctl_parser.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'sbin') diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c index 45a6faca7b3..ebc45cd9871 100644 --- a/sbin/pfctl/pfctl_parser.c +++ b/sbin/pfctl/pfctl_parser.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfctl_parser.c,v 1.323 2018/07/24 09:48:04 kn Exp $ */ +/* $OpenBSD: pfctl_parser.c,v 1.324 2018/07/28 23:36:54 kn Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -1629,7 +1629,8 @@ host(const char *s, int opts) { struct node_host *h = NULL, *n; int mask = -1, v4mask = 32, v6mask = 128, cont = 1; - char *p, *q, *r, *ps, *if_name; + char *p, *r, *ps, *if_name; + const char *errstr; if ((ps = strdup(s)) == NULL) err(1, "host: strdup"); @@ -1642,9 +1643,9 @@ host(const char *s, int opts) if ((p = strrchr(ps, '/')) != NULL) { if ((r = strdup(ps)) == NULL) err(1, "host: strdup"); - mask = strtol(p+1, &q, 0); - if (!q || *q || mask > 128 || q == (p+1)) { - fprintf(stderr, "invalid netmask '%s'\n", p); + mask = strtonum(p+1, 0, v6mask, &errstr); + if (errstr) { + fprintf(stderr, "netmask is %s: %s\n", errstr, p); free(r); free(ps); return (NULL); -- cgit v1.2.3