Allow overriding the path of various /sbin helpers at build time

ntfs-3g uses several external programs at runtime:
- /sbin/mount
- /sbin/umount
- /sbin/modprobe

Allow overriding the paths to these binaries at build time instead of
requiring their presence at these specific expected paths. The default
values keep being their (most common) /sbin location.
pull/39/head
Pierre Bourdon 2022-05-26 15:42:45 +02:00
parent 31d73a11ee
commit b44a5070d4
No known key found for this signature in database
GPG Key ID: 6FB80DCD84DA0F1C
4 changed files with 33 additions and 9 deletions

View File

@ -185,6 +185,30 @@ AC_ARG_ENABLE(
]
)
AC_ARG_WITH(
[mount-helper],
[AS_HELP_STRING([--with-mount-helper=BIN],[use the specified binary as mount helper @<:@default=/sbin/mount@:>@])],
[mount_helper="$withval"],
[mount_helper="/sbin/mount"]
)
AC_DEFINE_UNQUOTED([MOUNT_HELPER], ["$mount_helper"], [Binary used as mount helper.])
AC_ARG_WITH(
[umount-helper],
[AS_HELP_STRING([--with-umount-helper=BIN],[use the specified binary as umount helper @<:@default=/sbin/umount@:>@])],
[umount_helper="$withval"],
[umount_helper="/sbin/umount"]
)
AC_DEFINE_UNQUOTED([UMOUNT_HELPER], ["$umount_helper"], [Binary used as umount helper.])
AC_ARG_WITH(
[modprobe-helper],
[AS_HELP_STRING([--with-modprobe-helper=BIN],[use the specified binary as modprobe helper @<:@default=/sbin/modprobe@:>@])],
[modprobe_helper="$withval"],
[modprobe_helper="/sbin/modprobe"]
)
AC_DEFINE_UNQUOTED([MODPROBE_HELPER], ["$modprobe_helper"], [Binary used as modprobe helper.])
# pthread_rwlock_t requires _GNU_SOURCE
AC_GNU_SOURCE

View File

@ -89,10 +89,10 @@ int fuse_mnt_add_mount(const char *progname, const char *fsname,
exit(1);
}
rmdir(tmp);
execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts,
execle(MOUNT_HELPER, MOUNT_HELPER, "-F", type, "-o", opts,
fsname, mnt, NULL, &env);
fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname,
strerror(errno));
fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
MOUNT_HELPER, strerror(errno));
exit(1);
}
res = waitpid(res, &status, 0);
@ -126,14 +126,14 @@ int fuse_mnt_umount(const char *progname, const char *mnt, int lazy)
setuid(geteuid());
if (lazy) {
execle("/sbin/umount", "/sbin/umount", mnt,
execle(UMOUNT_HELPER, UMOUNT_HELPER, mnt,
NULL, &env);
} else {
execle("/sbin/umount", "/sbin/umount", "-f", mnt,
execle(UMOUNT_HELPER, UMOUNT_HELPER, "-f", mnt,
NULL, &env);
}
fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname,
strerror(errno));
fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
UMOUNT_HELPER, strerror(errno));
exit(1);
}
res = waitpid(res, &status, 0);

View File

@ -4463,7 +4463,7 @@ static fuse_fstype load_fuse_module(void)
int i;
struct stat st;
pid_t pid;
const char *cmd = "/sbin/modprobe";
const char *cmd = MODPROBE_HELPER;
char *env = (char*)NULL;
struct timespec req = { 0, 100000000 }; /* 100 msec */
fuse_fstype fstype;

View File

@ -4171,7 +4171,7 @@ static fuse_fstype load_fuse_module(void)
int i;
struct stat st;
pid_t pid;
const char *cmd = "/sbin/modprobe";
const char *cmd = MODPROBE_HELPER;
char *env = (char*)NULL;
struct timespec req = { 0, 100000000 }; /* 100 msec */
fuse_fstype fstype;