diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-08-27 09:32:30 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-08-27 09:32:30 +0000 |
commit | 76fcd9e5cf0b9f51f990915b0f92be36814d085c (patch) | |
tree | bc99725d8cebccdac9d4660dcec7bb9fe9fa017d /configd | |
parent | ed7ac16c28a16a9c7cf01877275ed44860cd9def (diff) |
use getgrouplist and also change supplementary groups
Diffstat (limited to 'configd')
-rw-r--r-- | configd/src/apps/su/main.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/configd/src/apps/su/main.cpp b/configd/src/apps/su/main.cpp index 095bbdb6844..09bac09ff01 100644 --- a/configd/src/apps/su/main.cpp +++ b/configd/src/apps/su/main.cpp @@ -28,6 +28,10 @@ int main(int argc, char** argv) gid_t g = p->pw_gid; uid_t u = p->pw_uid; + gid_t grouplist[256]; + int group_arr_sz = 256; + int ggl = getgrouplist(username, g, grouplist, &group_arr_sz); + gid_t oldg = getgid(); uid_t oldu = getuid(); @@ -36,7 +40,11 @@ int main(int argc, char** argv) return 1; } size_t listsize = 1; - gid_t grouplist[1] = { g }; + if (ggl > 0) { + listsize = group_arr_sz; + } else { + grouplist[0] = g; + } if ((g != oldg || u != oldu) && setgroups(listsize, grouplist) != 0) { perror("FATAL error: could not setgroups"); return 1; |