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:
parent
65e57dbb52
commit
126f296044
@ -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'
|
||||
|
@ -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)
|
Loading…
Reference in New Issue
Block a user