tup: patch tup to find setuid fusermount

Patching C sources to find programs out of PATH is discouraged
but Tup otherwise tracks changes to PATH and should not be slowed
down by a wrapper script.

Original fix from Sheena Artrip.

Fix #107516
This commit is contained in:
Emery Hemingway 2022-04-29 13:24:38 -05:00 committed by ehmry
parent 65e57dbb52
commit 126f296044
2 changed files with 33 additions and 0 deletions

View file

@ -17,6 +17,8 @@ in stdenv.mkDerivation rec {
nativeBuildInputs = [ pkg-config ];
buildInputs = [ fuse pcre ];
patches = [ ./fusermount-setuid.patch ];
configurePhase = ''
substituteInPlace src/tup/link.sh --replace '`git describe' '`echo ${version}'
substituteInPlace Tuprules.tup --replace 'pcre-config' 'pkg-config libpcre'

View file

@ -0,0 +1,31 @@
# Tup needs a setuid fusermount which may be outside $PATH.
diff --git a/src/tup/server/fuse_server.c b/src/tup/server/fuse_server.c
index d4ab648d..2dc9294b 100644
--- a/src/tup/server/fuse_server.c
+++ b/src/tup/server/fuse_server.c
@@ -105,16 +105,21 @@ static void *fuse_thread(void *arg)
#if defined(__linux__)
static int os_unmount(void)
{
- int rc;
#ifdef FUSE3
- rc = system("fusermount3 -u -z " TUP_MNT);
+#define FUSERMOUNT "fusermount3"
#else
- rc = system("fusermount -u -z " TUP_MNT);
+#define FUSERMOUNT "fusermount"
#endif
+ int rc;
+ const char *cmd = (access("/run/wrappers/bin/" FUSERMOUNT, X_OK) == 0)
+ ? "/run/wrappers/bin/" FUSERMOUNT " -u -z " TUP_MNT
+ : FUSERMOUNT " -u -z " TUP_MNT;
+ rc = system(cmd);
if(rc == -1) {
perror("system");
}
return rc;
+#undef FUSERMOUNT
}
#elif defined(__APPLE__)
static int os_unmount(void)