Fix Darwin build

Turns out getgrouplist() is not POSIX.

http://hydra.nixos.org/build/23881243
This commit is contained in:
Eelco Dolstra 2015-07-21 14:45:24 +02:00
parent 0a2bee307b
commit 1993b10d11

View file

@ -543,6 +543,7 @@ void UserLock::acquire()
throw Error(format("the Nix user should not be a member of %1%") throw Error(format("the Nix user should not be a member of %1%")
% settings.buildUsersGroup); % settings.buildUsersGroup);
#if __linux__
/* Get the list of supplementary groups of this build user. This /* Get the list of supplementary groups of this build user. This
is usually either empty or contains a group such as "kvm". */ is usually either empty or contains a group such as "kvm". */
supplementaryGIDs.resize(10); supplementaryGIDs.resize(10);
@ -553,6 +554,7 @@ void UserLock::acquire()
throw Error(format("failed to get list of supplementary groups for %1%") % pw->pw_name); throw Error(format("failed to get list of supplementary groups for %1%") % pw->pw_name);
supplementaryGIDs.resize(ngroups); supplementaryGIDs.resize(ngroups);
#endif
return; return;
} }
@ -2372,7 +2374,8 @@ void DerivationGoal::runChild()
if (buildUser.enabled()) { if (buildUser.enabled()) {
/* Preserve supplementary groups of the build user, to allow /* Preserve supplementary groups of the build user, to allow
admins to specify groups such as "kvm". */ admins to specify groups such as "kvm". */
if (setgroups(buildUser.getSupplementaryGIDs().size(), if (!buildUser.getSupplementaryGIDs().empty() &&
setgroups(buildUser.getSupplementaryGIDs().size(),
buildUser.getSupplementaryGIDs().data()) == -1) buildUser.getSupplementaryGIDs().data()) == -1)
throw SysError("cannot set supplementary groups of build user"); throw SysError("cannot set supplementary groups of build user");