user-util: never hand out or accept invalid UIDs

libc isn't that strict, but it's a good idea if we are, to not create
confusion around invalid user ids.
This commit is contained in:
Lennart Poettering 2015-10-26 00:38:21 +01:00
parent d02608170e
commit 67c7c892b9

View file

@ -138,11 +138,19 @@ int get_user_creds(
if (!p)
return errno > 0 ? -errno : -ESRCH;
if (uid)
*uid = p->pw_uid;
if (uid) {
if (!uid_is_valid(p->pw_uid))
return -EBADMSG;
*uid = p->pw_uid;
}
if (gid) {
if (!gid_is_valid(p->pw_gid))
return -EBADMSG;
if (gid)
*gid = p->pw_gid;
}
if (home)
*home = p->pw_dir;
@ -185,8 +193,12 @@ int get_group_creds(const char **groupname, gid_t *gid) {
if (!g)
return errno > 0 ? -errno : -ESRCH;
if (gid)
if (gid) {
if (!gid_is_valid(g->gr_gid))
return -EBADMSG;
*gid = g->gr_gid;
}
return 0;
}
@ -278,6 +290,9 @@ int in_gid(gid_t gid) {
if (getegid() == gid)
return 1;
if (!gid_is_valid(gid))
return -EINVAL;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
assert(ngroups_max > 0);