* Released 2.8.3

* Using --no-canonicalize with umount(8) conflicts with the race
        fix, sinceit assumes the supplied path is absolute, while the race
        fix relies on the path being relative to the current directory
This commit is contained in:
Miklos Szeredi 2010-02-01 14:52:30 +00:00
parent 054635595a
commit 0197ce4041
4 changed files with 14 additions and 25 deletions

View File

@ -1,3 +1,13 @@
2010-02-01 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.8.3
2010-02-01 Miklos Szeredi <miklos@szeredi.hu>
* Using "--no-canonicalize" with umount(8) conflicts with the race
fix, sinceit assumes the supplied path is absolute, while the race
fix relies on the path being relative to the current directory
2010-01-26 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.8.2

View File

@ -1,4 +1,4 @@
AC_INIT(fuse, 2.8.2)
AC_INIT(fuse, 2.8.3)
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE

View File

@ -35,7 +35,7 @@ libfuse_la_SOURCES = \
$(iconv_source) \
$(mount_source)
libfuse_la_LDFLAGS = @libfuse_libs@ -version-number 2:8:2 \
libfuse_la_LDFLAGS = @libfuse_libs@ -version-number 2:8:3 \
-Wl,--version-script,$(srcdir)/fuse_versionscript
libulockmgr_la_SOURCES = ulockmgr.c

View File

@ -190,7 +190,6 @@ static int exec_umount(const char *progname, const char *rel_mnt, int lazy)
int status;
sigset_t blockmask;
sigset_t oldmask;
int legacy = 0;
sigemptyset(&blockmask);
sigaddset(&blockmask, SIGCHLD);
@ -200,32 +199,16 @@ static int exec_umount(const char *progname, const char *rel_mnt, int lazy)
return -1;
}
retry_umount:
res = fork();
if (res == -1) {
fprintf(stderr, "%s: fork: %s\n", progname, strerror(errno));
goto out_restore;
}
if (res == 0) {
/*
* Hide output, because old versions don't support
* --no-canonicalize
*/
if (!legacy) {
int fd = open("/dev/null", O_RDONLY);
dup2(fd, 1);
dup2(fd, 2);
}
sigprocmask(SIG_SETMASK, &oldmask, NULL);
setuid(geteuid());
if (legacy) {
execl("/bin/umount", "/bin/umount", "-i", rel_mnt,
lazy ? "-l" : NULL, NULL);
} else {
execl("/bin/umount", "/bin/umount", "--no-canonicalize",
"-i", rel_mnt, lazy ? "-l" : NULL, NULL);
}
execl("/bin/umount", "/bin/umount", "-i", rel_mnt,
lazy ? "-l" : NULL, NULL);
fprintf(stderr, "%s: failed to execute /bin/umount: %s\n",
progname, strerror(errno));
exit(1);
@ -235,10 +218,6 @@ retry_umount:
fprintf(stderr, "%s: waitpid: %s\n", progname, strerror(errno));
if (status != 0) {
if (!legacy) {
legacy = 1;
goto retry_umount;
}
res = -1;
}