svn commit: r286151 - head/usr.sbin/pw
Baptiste Daroussin
bapt at FreeBSD.org
Sat Aug 1 10:10:14 UTC 2015
Author: bapt
Date: Sat Aug 1 10:10:13 2015
New Revision: 286151
URL: https://svnweb.freebsd.org/changeset/base/286151
Log:
Validate the max_uid/max_gid boundaries and entry type in pw.conf
Modified:
head/usr.sbin/pw/pw_conf.c
Modified: head/usr.sbin/pw/pw_conf.c
==============================================================================
--- head/usr.sbin/pw/pw_conf.c Sat Aug 1 09:55:47 2015 (r286150)
+++ head/usr.sbin/pw/pw_conf.c Sat Aug 1 10:10:13 2015 (r286151)
@@ -230,6 +230,7 @@ read_userconfig(char const * file)
char *buf, *p;
size_t linecap;
ssize_t linelen;
+ const char *errstr;
buf = NULL;
linecap = 0;
@@ -323,20 +324,35 @@ read_userconfig(char const * file)
? NULL : newstr(q);
break;
case _UC_MINUID:
- if ((q = unquote(q)) != NULL && isdigit(*q))
- config.min_uid = (uid_t) atol(q);
+ if ((q = unquote(q)) != NULL) {
+ errstr = NULL;
+ config.min_uid = strtounum(q, 0, UID_MAX, &errstr);
+ if (errstr)
+ warnx("Invalid min_uid: '%s', ignoring", q);
+ }
break;
case _UC_MAXUID:
- if ((q = unquote(q)) != NULL && isdigit(*q))
- config.max_uid = (uid_t) atol(q);
+ if ((q = unquote(q)) != NULL) {
+ errstr = NULL;
+ config.max_uid = strtounum(q, 0, UID_MAX, &errstr);
+ if (errstr)
+ warnx("Invalid max_uid: '%s', ignoring", q);
+ }
break;
case _UC_MINGID:
if ((q = unquote(q)) != NULL && isdigit(*q))
- config.min_gid = (gid_t) atol(q);
+ errstr = NULL;
+ config.min_gid = strtounum(q, 0, GID_MAX, &errstr);
+ if (errstr)
+ warnx("Invalid min_gid: '%s', ignoring", q);
break;
case _UC_MAXGID:
- if ((q = unquote(q)) != NULL && isdigit(*q))
- config.max_gid = (gid_t) atol(q);
+ if ((q = unquote(q)) != NULL) {
+ errstr = NULL;
+ config.max_gid = strtounum(q, 0, GID_MAX, &errstr);
+ if (errstr)
+ warnx("Invalid max_gid: '%s', ignoring", q);
+ }
break;
case _UC_EXPIRE:
if ((q = unquote(q)) != NULL && isdigit(*q))
More information about the svn-src-all
mailing list