diff options
Diffstat (limited to 'usr.sbin/chkgrp')
-rw-r--r-- | usr.sbin/chkgrp/chkgrp.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/usr.sbin/chkgrp/chkgrp.c b/usr.sbin/chkgrp/chkgrp.c index ac40ed5..2dd41a8 100644 --- a/usr.sbin/chkgrp/chkgrp.c +++ b/usr.sbin/chkgrp/chkgrp.c @@ -30,7 +30,10 @@ __FBSDID("$FreeBSD$"); #include <err.h> +#include <errno.h> #include <ctype.h> +#include <limits.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -150,6 +153,18 @@ main(int argc, char *argv[]) warnx("%s: line %d: GID is not numeric", gfn, n); e++; } + + /* check the range of the group id */ + errno = 0; + unsigned long groupid = strtoul(f[2], NULL, 10); + if (errno != 0) { + warnx("%s: line %d: strtoul failed", gfn, n); + } + else if (groupid > GID_MAX) { + warnx("%s: line %d: group id is too large (> %ju)", + gfn, n, (uintmax_t)GID_MAX); + e++; + } #if 0 /* entry is correct, so print it */ |