1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-30 13:18:05 +03:00

Try to make our getgrouplist replacement better match the 'real' implemenations.

In particular, make sure we include the primary gid in the list.

Andrew Bartlett
(This used to be commit 0cd4b339b7)
This commit is contained in:
Andrew Bartlett 2003-02-17 12:04:09 +00:00
parent f203f1643c
commit 55da3690b7

View File

@ -39,7 +39,7 @@
static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, int *grpcnt) static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, int *grpcnt)
{ {
gid_t *gids_saved; gid_t *gids_saved;
int ret, ngrp_saved; int ret, ngrp_saved, num_gids;
if (non_root_mode()) { if (non_root_mode()) {
*grpcnt = 0; *grpcnt = 0;
@ -78,9 +78,16 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, in
set_effective_gid(gid); set_effective_gid(gid);
setgid(gid); setgid(gid);
ret = getgroups(*grpcnt, groups); num_gids = getgroups(0, NULL);
if (ret >= 0) { if (num_gids + 1 > *grpcnt) {
*grpcnt = ret; *grpcnt = num_gids + 1;
ret = -1;
} else {
ret = getgroups(*grpcnt - 1, &groups[1]);
if (ret >= 0) {
groups[0] = gid;
*grpcnt = ret + 1;
}
} }
restore_re_gid(); restore_re_gid();