summaryrefslogtreecommitdiff
path: root/uidswap.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2009-01-21 16:04:24 +1100
committerDamien Miller <djm@mindrot.org>2009-01-21 16:04:24 +1100
commit1598d6bc559b766e1fde83d9d9e4929d2694b090 (patch)
tree7cce63a04a7ccac621e44312c5d22af26b507949 /uidswap.c
parent2676791c38e16497c3d078d86c0a7608c4d946f1 (diff)
downloadopenssh-git-1598d6bc559b766e1fde83d9d9e4929d2694b090.tar.gz
- (djm) [uidswap.c] bz#1412: Support >16 supplemental groups in OS X.
Patch based on one from vgiffin AT apple.com; ok dtucker@
Diffstat (limited to 'uidswap.c')
-rw-r--r--uidswap.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/uidswap.c b/uidswap.c
index 91d878c3..83764839 100644
--- a/uidswap.c
+++ b/uidswap.c
@@ -233,6 +233,16 @@ permanently_set_uid(struct passwd *pw)
fatal("setgid %u: %.100s", (u_int)pw->pw_gid, strerror(errno));
#endif
+#ifdef __APPLE__
+ /*
+ * OS X requires initgroups after setgid to opt back into
+ * memberd support for >16 supplemental groups.
+ */
+ if (initgroups(pw->pw_name, pw->pw_gid) < 0)
+ fatal("initgroups %.100s %u: %.100s",
+ pw->pw_name, (u_int)pw->pw_gid, strerror(errno));
+#endif
+
#if defined(HAVE_SETRESUID) && !defined(BROKEN_SETRESUID)
if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) < 0)
fatal("setresuid %u: %.100s", (u_int)pw->pw_uid, strerror(errno));