minix/lib/other/setgroups.c
Ben Gras 1116853ae9 Turn off debug in getsockname.c
allow NULL for setgroups argument
2006-02-15 14:16:06 +00:00

54 lines
826 B
C

/*
setgroups.c
*/
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <grp.h>
int setgroups(int ngroups, const gid_t *gidset)
{
if(ngroups > 1) {
/* Supplementary groups not implemented */
errno= EINVAL;
return -1;
}
if(ngroups == 1)
return setgid(gidset[0]);
return 0;
}
int initgroups(const char *name, gid_t basegid)
{
struct group *gr;
int r, found = 0;
if((r = setgid(basegid)) < 0)
return r;
setgrent();
while (!found && (gr = getgrent()) != NULL) {
char **mem;
for(mem = gr->gr_mem; mem && *mem; mem++) {
if(!strcmp(name, *mem)) {
found = 1;
break;
}
}
}
endgrent();
/* Because supplemental groups aren't implemented, this call
* should fail if the user is in any supplemental groups.
*/
if(found) {
errno = EINVAL;
return -1;
}
return 0;
}