Validate the max_uid/max_gid boundaries and entry type in pw.conf

This commit is contained in:
Baptiste Daroussin 2015-08-01 10:10:13 +00:00
parent 50698e6718
commit e5e7ef48eb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=286151

View File

@ -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))