summaryrefslogtreecommitdiff
path: root/sbin/pfctl
diff options
context:
space:
mode:
authorkn <kn@cvs.openbsd.org>2018-07-28 23:36:55 +0000
committerkn <kn@cvs.openbsd.org>2018-07-28 23:36:55 +0000
commit664994a0a5b993bdfde8e88fb8b55e6c54c396bb (patch)
treee01c5eab4dedcc8590d4b755f91f52a7f68d70b6 /sbin/pfctl
parent5955ef871c2e9073573d131191bbd9bf044c69ef (diff)
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
Diffstat (limited to 'sbin/pfctl')
-rw-r--r--sbin/pfctl/pfctl_parser.c11
1 files changed, 6 insertions, 5 deletions
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);