#pragma once #include "types.hh" #include namespace nix { struct UserLock { virtual ~UserLock() { } /* Get the first and last UID. */ virtual std::pair getUIDRange() = 0; /* Get the first UID. */ uid_t getUID() { return getUIDRange().first; } uid_t getUIDCount() { return getUIDRange().second - getUIDRange().first + 1; } virtual gid_t getGID() = 0; virtual std::vector getSupplementaryGIDs() = 0; /* Kill any processes currently executing as this user. */ virtual void kill() = 0; virtual std::optional getCgroup() { return {}; }; }; /* Acquire a user lock. Note that this may return nullptr if no user is available. */ std::unique_ptr acquireUserLock(); bool useBuildUsers(); }