mirror of git://git.musl-libc.org/musl
implement getgrouplist (for initgroups), formerly dummied-out
This commit is contained in:
parent
3f44f298e4
commit
91e836fda7
|
@ -1,11 +1,23 @@
|
|||
#include <grp.h>
|
||||
|
||||
/* FIXME */
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups)
|
||||
{
|
||||
size_t n, i;
|
||||
struct group *gr;
|
||||
if (*ngroups<1) return -1;
|
||||
*groups = gid;
|
||||
n = *ngroups;
|
||||
*groups++ = gid;
|
||||
*ngroups = 1;
|
||||
return 0;
|
||||
|
||||
setgrent();
|
||||
while ((gr = getgrent()) && *ngroups < INT_MAX) {
|
||||
for (i=0; gr->gr_mem[i] && strcmp(user, gr->gr_mem[i]); i++);
|
||||
if (!gr->gr_mem[i]) continue;
|
||||
if (++*ngroups <= n) *groups++ = gr->gr_gid;
|
||||
}
|
||||
endgrent();
|
||||
|
||||
return *ngroups > n ? -1 : *ngroups;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue