summaryrefslogtreecommitdiffstats
path: root/configd
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-08-27 09:32:30 +0000
committerArne Juul <arnej@verizonmedia.com>2021-08-27 09:32:30 +0000
commit76fcd9e5cf0b9f51f990915b0f92be36814d085c (patch)
treebc99725d8cebccdac9d4660dcec7bb9fe9fa017d /configd
parented7ac16c28a16a9c7cf01877275ed44860cd9def (diff)
use getgrouplist and also change supplementary groups
Diffstat (limited to 'configd')
-rw-r--r--configd/src/apps/su/main.cpp10
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;