Age | Commit message (Collapse) | Author | Lines |
|
|
|
The unprivileged option allows to run the FUSE file system process
without privileges by dropping capabilities and preventing them from
being re-acquired via setuid / fscaps etc. To accomplish this,
mount.fuse sets up the `/dev/fuse` file descriptor and mount itself
and passes the file descriptor via the `/dev/fd/%u` mountpoint syntax
to the FUSE file system.
|
|
|
|
Using fuse_session_exit() followed by fuse_session_unmount() ensures
that a proper cleanup and shutdown is performed.
|
|
|
|
The bug occurs when a filesystem client reads a directory until the end,
seeks using seekdir() to some valid non-zero position and calls
readdir(). A valid 'struct dirent *' is expected, but NULL is returned
instead. Pseudocode demonstrating the bug:
DIR *dp = opendir("some_dir");
struct dirent *de = readdir(dp);
/* Get offset of the second entry */
long offset = telldir(dp);
/* Read directory until the end */
while (de)
de = readdir(de);
seekdir(dp, offset);
de = readdir(dp);
/* de must contain the second entry, but NULL is returned instead */
The reason of the bug is that when the end of directory is reached, the
kernel calls FUSE_READDIR op with an offset at the end of directory, so
the filesystem's .readdir callback never calls the filler function, and
we end up with dh->filled set to 1. After seekdir(), FUSE_READDIR is
called again with a new offset, but this time the filesystem's .readdir
callback is never called, and an empty reply is returned.
Fix by setting dh->filled to 1 only when zero offsets are given to
filler function.
|
|
Fixes: #224
|
|
Linux performs the dir loop check (rename(a, a/b/c)
or rename(a/b/c, a), etc.) in kernel. Unfortunately
other systems do not perform this check (e.g. FreeBSD).
This results in a deadlock in get_path2, because libfuse
did not expect to handle such cases.
We add a check_dir_loop function that performs the dir
loop check in user mode and enable it on systems that
need it.
|
|
|
|
|
|
Newest Meson requires Python 3.5 which isn't available in Trusty.
Pip version pin no longer necessary.
|
|
DragonFlyBSD has no "bsd" in uname, so add 'dragonfly' to conditionals.
-- e.g. uname(1) in DragonFlyBSD
[root@ ~]# uname
DragonFly
[root@ ~]# python -c "import sys; print(sys.platform)"
dragonfly5
|
|
Travis support recommends to install specific pip
version to work around problems in new environment.
|
|
|
|
|
|
|
|
This seems to be unsupported. However, me may also be
doing it wrong. I've asked on the freebsd-fs list for help.
|
|
|
|
|
|
It's just too much pain to keep it working.
|
|
That way, we run only tests that are supported by the running kernel.
|
|
|
|
The previous name didn't make much sense.
|
|
We re-introduce the functionality of invalidating the caches for an
inode specified by path by adding a new routine
fuse_invalidate_path. This is useful for network-based file systems
which use the high-level API, enabling them to notify the kernel about
external changes.
This is a revival of Miklos Szeredi's original code for the
fuse_invalidate routine.
|
|
|
|
|
|
Preserving other attributes doesn't hurt, and --preserve
is not supported under FreeBSD.
|
|
Doesn't work on FreeBSD, and not strictly necessary.
|
|
|
|
|
|
This fixes issue #191 (where the test was done by simply adding
FUSE_CAP_WRITEBACK_CACHE without adjusting the flags in the
open() call).
Fixes: #191.
|
|
|
|
Some filesystems don't track this for directories.
Fixes: #180.
|
|
There is a proper meson-mode now.
|
|
The previous code didn't actually go through the mountpoint at all.
|
|
|
|
|
|
Since RELEASE requests are asynchronous, it is possible that libfuse
still considers the file to be open when userspace has closed it, so
that a successive unlink() call from userspace actually triggers
a rename(). We avoid the resulting test failure by re-trying a few
times.
Fixes: #157.
|
|
|
|
Hopefully this helps debugging issue #157.
|
|
This should help debugging issue #157.
|
|
Slightly increases coverage of examples/passthrough_ll.c (which
supports open for reading, but not for writing).
|
|
|
|
|
|
Together with the previous commit, this fixes #156.
|
|
|
|
|
|
Since os.path.join() interprets leading slashes, we were
actually never accessing the mountpoint and doing all the
tests in the source directory.
Fixes: #139
|
|
That way, we are not drowning in messages when a test would also fail
without debugging enabled.
|
|
|