diff --git a/src/libstore/unix/build/derivation-builder.cc b/src/libstore/unix/build/derivation-builder.cc index 1d25cb479b3..504063da097 100644 --- a/src/libstore/unix/build/derivation-builder.cc +++ b/src/libstore/unix/build/derivation-builder.cc @@ -270,7 +270,7 @@ class DerivationBuilderImpl : public DerivationBuilder, public DerivationBuilder */ virtual std::unique_ptr getBuildUser() { - return acquireUserLock(localSettings, 1, false); + return acquireUserLock(settings.nixStateDir, localSettings, 1, false); } /** diff --git a/src/libstore/unix/build/linux-derivation-builder.cc b/src/libstore/unix/build/linux-derivation-builder.cc index 7f4621c573b..0ffcf0ccb65 100644 --- a/src/libstore/unix/build/linux-derivation-builder.cc +++ b/src/libstore/unix/build/linux-derivation-builder.cc @@ -222,7 +222,8 @@ struct ChrootLinuxDerivationBuilder : ChrootDerivationBuilder, LinuxDerivationBu std::unique_ptr getBuildUser() override { - return acquireUserLock(store.config->getLocalSettings(), drvOptions.useUidRange(drv) ? 65536 : 1, true); + return acquireUserLock( + settings.nixStateDir, store.config->getLocalSettings(), drvOptions.useUidRange(drv) ? 65536 : 1, true); } void prepareUser() override diff --git a/src/libstore/unix/include/nix/store/user-lock.hh b/src/libstore/unix/include/nix/store/user-lock.hh index 707c7c38a9b..0c10906f59a 100644 --- a/src/libstore/unix/include/nix/store/user-lock.hh +++ b/src/libstore/unix/include/nix/store/user-lock.hh @@ -1,6 +1,7 @@ #pragma once ///@file +#include #include #include #include @@ -38,7 +39,8 @@ struct UserLock * Acquire a user lock for a UID range of size `nrIds`. Note that this * may return nullptr if no user is available. */ -std::unique_ptr acquireUserLock(const LocalSettings & localSettings, uid_t nrIds, bool useUserNamespace); +std::unique_ptr acquireUserLock( + const std::filesystem::path & stateDir, const LocalSettings & localSettings, uid_t nrIds, bool useUserNamespace); bool useBuildUsers(const LocalSettings &); diff --git a/src/libstore/unix/user-lock.cc b/src/libstore/unix/user-lock.cc index e2f2372742f..c9abdddcea8 100644 --- a/src/libstore/unix/user-lock.cc +++ b/src/libstore/unix/user-lock.cc @@ -214,14 +214,15 @@ struct AutoUserLock : UserLock } }; -std::unique_ptr acquireUserLock(const LocalSettings & localSettings, uid_t nrIds, bool useUserNamespace) +std::unique_ptr acquireUserLock( + const std::filesystem::path & stateDir, const LocalSettings & localSettings, uid_t nrIds, bool useUserNamespace) { if (auto * uidSettings = localSettings.getAutoAllocateUidSettings()) { - auto userPoolDir = settings.nixStateDir / "userpool2"; + auto userPoolDir = stateDir / "userpool2"; createDirs(userPoolDir); return AutoUserLock::acquire(userPoolDir, localSettings.buildUsersGroup, nrIds, useUserNamespace, *uidSettings); } else { - auto userPoolDir = settings.nixStateDir / "userpool"; + auto userPoolDir = stateDir / "userpool"; createDirs(userPoolDir); return SimpleUserLock::acquire(userPoolDir, localSettings.buildUsersGroup); }