libutil: don't save cwd fd, use path instead

Saving the cwd fd didn't actually work well -- prior to this commit, the
following would happen:

    : ~/w/vc/nix ; doas outputs/out/bin/nix --experimental-features 'nix-command flakes' run nixpkgs#coreutils -- --coreutils-prog=pwd
    pwd: couldn't find directory entry in ‘../../../..’ with matching i-node
    : ~/w/vc/nix ; doas outputs/out/bin/nix --experimental-features 'nix-command flakes' develop -c pwd
    pwd: couldn't find directory entry in ‘../../../..’ with matching i-node
This commit is contained in:
Cole Helbling 2022-04-04 10:21:56 -07:00
parent 10b9c1b2b2
commit 56009b2639

View file

@ -1709,13 +1709,11 @@ void restoreMountNamespace()
{
#if __linux__
try {
AutoCloseFD fdSavedCwd = open("/proc/self/cwd", O_RDONLY);
if (!fdSavedCwd) {
throw SysError("saving cwd");
}
auto savedCwd = absPath(".");
if (fdSavedMountNamespace && setns(fdSavedMountNamespace.get(), CLONE_NEWNS) == -1)
throw SysError("restoring parent mount namespace");
if (fdSavedCwd && fchdir(fdSavedCwd.get()) == -1) {
if (chdir(savedCwd.c_str()) == -1) {
throw SysError("restoring cwd");
}
} catch (Error & e) {