diff options
Diffstat (limited to 'source3/lib/system_smbd.c')
-rw-r--r-- | source3/lib/system_smbd.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c index 3ae0a6395e..0cd3086945 100644 --- a/source3/lib/system_smbd.c +++ b/source3/lib/system_smbd.c @@ -39,7 +39,7 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, int *grpcnt) { gid_t *gids_saved; - int ret, ngrp_saved, num_gids; + int ret, ngrp_saved; if (non_root_mode()) { *grpcnt = 0; @@ -78,16 +78,9 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, in set_effective_gid(gid); setgid(gid); - num_gids = getgroups(0, NULL); - if (num_gids + 1 > *grpcnt) { - *grpcnt = num_gids + 1; - ret = -1; - } else { - ret = getgroups(*grpcnt - 1, &groups[1]); - if (ret >= 0) { - groups[0] = gid; - *grpcnt = ret + 1; - } + ret = getgroups(*grpcnt, groups); + if (ret >= 0) { + *grpcnt = ret; } restore_re_gid(); |