Skip to content

Commit

Permalink
libstore: check additionalSandboxProfile
Browse files Browse the repository at this point in the history
Make sure that `extraSandboxProfile` is set before we check whether it's
empty or not (in the `sandbox=true` case).

Also adds a test case for this.

Co-Authored-By: Artemis Tosini <[email protected]>
  • Loading branch information
Théophane Hufschmitt and artemist committed May 6, 2024
1 parent 20445df commit 50eab74
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/libstore/unix/build/local-derivation-goal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ void LocalDerivationGoal::killSandbox(bool getStats)

void LocalDerivationGoal::tryLocalBuild()
{
#if __APPLE__
additionalSandboxProfile = parsedDrv->getStringAttr("__sandboxProfile").value_or("");
#endif

unsigned int curBuilds = worker.getNrLocalBuilds();
if (curBuilds >= settings.maxBuildJobs) {
state = &DerivationGoal::tryToBuild;
Expand Down Expand Up @@ -495,10 +499,6 @@ void LocalDerivationGoal::startBuilder()
settings.thisSystem,
concatStringsSep<StringSet>(", ", worker.store.systemFeatures));

#if __APPLE__
additionalSandboxProfile = parsedDrv->getStringAttr("__sandboxProfile").value_or("");
#endif

/* Create a temporary directory where the build will take
place. */
tmpDir = createTempDir(settings.buildDir.get().value_or(""), "nix-build-" + std::string(drvPath.name()), false, false, 0700);
Expand Down
19 changes: 19 additions & 0 deletions tests/functional/extra-sandbox-profile.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{ destFile, seed }:

with import ./config.nix;

mkDerivation {
name = "simple";
__sandboxProfile = ''
# Allow writing any file in the filesystem
(allow file*)
'';
inherit seed;
buildCommand = ''
(
set -x
touch ${destFile}
touch $out
)
'';
}
23 changes: 23 additions & 0 deletions tests/functional/extra-sandbox-profile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
source common.sh

if [[ $(uname) != Darwin ]]; then skipTest "Need Darwin"; fi

DEST_FILE="${TEST_ROOT}/foo"

testSandboxProfile () (
set -e

sandboxMode="$1"

rm -f "${DEST_FILE}"
nix-build --no-out-link ./extra-sandbox-profile.nix \
--option sandbox "$sandboxMode" \
--argstr seed "$RANDOM" \
--argstr destFile "${DEST_FILE}"

ls -l "${DEST_FILE}"
)

testSandboxProfile "false"
! testSandboxProfile "true"
testSandboxProfile "relaxed"
1 change: 1 addition & 0 deletions tests/functional/local.mk
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ nix_tests = \
nested-sandboxing.sh \
impure-env.sh \
debugger.sh \
extra-sandbox-profile.sh \
help.sh

ifeq ($(HAVE_LIBCPUID), 1)
Expand Down

0 comments on commit 50eab74

Please sign in to comment.