mirror of
https://git.freebsd.org/src.git
synced 2026-01-16 23:02:24 +00:00
initgroups(3): Fix return value on allocation failure
We must not return ENOMEM, but rather -1 with 'errno' set to ENOMEM, as
described in the manual page and as other implementations are doing.
A malloc() failure actually already sets ENOMEM for us. Add comments
indicating which function set 'errno' each time we return.
While here, improve style and remove useless headers.
Reviewed by: kib, emaste
Fixes: 54404cfb13 ("In preparation for raising NGROUPS and NGROUPS_MAX, ...")
MFC after: 5 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D52580
This commit is contained in:
parent
696cfb27ca
commit
0b018cfd81
1 changed files with 4 additions and 7 deletions
|
|
@ -31,11 +31,7 @@
|
|||
|
||||
#include <sys/param.h>
|
||||
|
||||
#include "namespace.h"
|
||||
#include <err.h>
|
||||
#include "un-namespace.h"
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
|
@ -51,12 +47,13 @@ initgroups(const char *uname, gid_t agroup)
|
|||
* setgroups to fail and set errno.
|
||||
*/
|
||||
ngroups_max = sysconf(_SC_NGROUPS_MAX) + 2;
|
||||
if ((groups = malloc(sizeof(*groups) * ngroups_max)) == NULL)
|
||||
return (ENOMEM);
|
||||
groups = malloc(sizeof(*groups) * ngroups_max);
|
||||
if (groups == NULL)
|
||||
return (-1); /* malloc() set 'errno'. */
|
||||
|
||||
ngroups = (int)ngroups_max;
|
||||
getgrouplist(uname, agroup, groups, &ngroups);
|
||||
ret = setgroups(ngroups, groups);
|
||||
free(groups);
|
||||
return (ret);
|
||||
return (ret); /* setgroups() set 'errno'. */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue