From 2dff8c2b40358383a1086dbdfbf2499380206119 Mon Sep 17 00:00:00 2001 From: Klemens Nanni Date: Sat, 11 Mar 2023 21:36:07 +0400 Subject: [PATCH 1/3] Include as per wait(4) for WIFEXITED and WEXITSTATUS Unbreak the build on OpenBSD. --- src/libexpr/primops/fetchGit.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libexpr/primops/fetchGit.cc b/src/libexpr/primops/fetchGit.cc index 90f600284..d866647f0 100644 --- a/src/libexpr/primops/fetchGit.cc +++ b/src/libexpr/primops/fetchGit.cc @@ -6,6 +6,7 @@ #include "hash.hh" #include +#include #include From fda598cfdd83a3617f1d554fc9bb720d1d079dff Mon Sep 17 00:00:00 2001 From: Klemens Nanni Date: Sat, 11 Mar 2023 21:38:44 +0400 Subject: [PATCH 2/3] Make tar invocation portable, fix OpenBSD build/test At least on OpenBSD, tar(1) reads from /dev/rst0 not stdin by default options must specififed consistently with or without dashes, not mixed. Specify standard input explicitly to not rely on implementation details. Use either option style consistently. --- src/libexpr/primops/fetchGit.cc | 2 +- tests/tarball.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libexpr/primops/fetchGit.cc b/src/libexpr/primops/fetchGit.cc index d866647f0..ca5af7492 100644 --- a/src/libexpr/primops/fetchGit.cc +++ b/src/libexpr/primops/fetchGit.cc @@ -174,7 +174,7 @@ GitInfo exportGit(ref store, const std::string & uri, Path tmpDir = createTempDir(); AutoDelete delTmpDir(tmpDir, true); - runProgram("tar", true, { "x", "-C", tmpDir }, tar); + runProgram("tar", true, { "-x", "-f", "-", "-C", tmpDir }, tar); gitInfo.storePath = store->addToStore(name, tmpDir); diff --git a/tests/tarball.sh b/tests/tarball.sh index ba534c626..b2acb9eb9 100644 --- a/tests/tarball.sh +++ b/tests/tarball.sh @@ -11,7 +11,7 @@ cp dependencies.nix $tarroot/default.nix cp config.nix dependencies.builder*.sh $tarroot/ tarball=$TEST_ROOT/tarball.tar.xz -(cd $TEST_ROOT && tar c tarball) | xz > $tarball +(cd $TEST_ROOT && tar cf - tarball) | xz > $tarball nix-env -f file://$tarball -qa --out-path | grep -q dependencies From c84e20a2968f70474d3d8fc1c3701dd2b99d5ae3 Mon Sep 17 00:00:00 2001 From: Klemens Nanni Date: Sat, 11 Mar 2023 22:23:44 +0400 Subject: [PATCH 3/3] Fix SO_PEERCRED usage on OpenBSD getsockopt(2) documents `struct sockpeercred` with `SO_PEERCRED`. (`struct ucred` does exist, but is incompatible to the Linux version.) --- src/nix-daemon/nix-daemon.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc index 7a5cb9a37..87ad4e949 100644 --- a/src/nix-daemon/nix-daemon.cc +++ b/src/nix-daemon/nix-daemon.cc @@ -901,7 +901,11 @@ static PeerInfo getPeerInfo(int remote) #if defined(SO_PEERCRED) +#if defined(__OpenBSD__) + struct sockpeercred cred; +#else ucred cred; +#endif socklen_t credLen = sizeof(cred); if (getsockopt(remote, SOL_SOCKET, SO_PEERCRED, &cred, &credLen) == -1) throw SysError("getting peer credentials");