aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2021-08-31 08:21:50 +0200
committerGitHub <noreply@github.com>2021-08-31 08:21:50 +0200
commitd14d32e58b3d4e1ec5e98c85d65282ba62d622f9 (patch)
tree47563c0636085665e16a7f957b48717195ed7026
parent243e03113abd14ef2b6fcab0c05ae1397b59d743 (diff)
parent62bcc067edffe1a6e711b496cfb8d0000d67ce01 (diff)
Merge pull request #18880 from vespa-engine/arnej/also-set-supplementary-groups
use getgrouplist and also change supplementary groups
-rw-r--r--configd/src/apps/su/main.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/configd/src/apps/su/main.cpp b/configd/src/apps/su/main.cpp
index 095bbdb6844..f61faf01fee 100644
--- a/configd/src/apps/su/main.cpp
+++ b/configd/src/apps/su/main.cpp
@@ -28,6 +28,23 @@ 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;
+#ifdef __APPLE__
+ int mac_gid = g;
+ int mac_groups[256];
+ int ggl = getgrouplist(username, mac_gid, mac_groups, &group_arr_sz);
+ if (ggl < 0) {
+ group_arr_sz = 0;
+ } else {
+ for (int i = 0; i < group_arr_sz; ++i) {
+ grouplist[i] = (gid_t) mac_groups[i];
+ }
+ }
+#else
+ int ggl = getgrouplist(username, g, grouplist, &group_arr_sz);
+#endif
+
gid_t oldg = getgid();
uid_t oldu = getuid();
@@ -36,7 +53,11 @@ int main(int argc, char** argv)
return 1;
}
size_t listsize = 1;
- gid_t grouplist[1] = { g };
+ if (ggl >= 0 && group_arr_sz > 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;