---------
Miklos Szeredi <miklos@szeredi.hu>
-
-
-Python bindings
----------------
-
-Jeff Epler <jepler@unpythonic.dhs.org>
-
-
-Perl bindings
--------------
-
-Mark Glines <mark@glines.org>
+++ /dev/null
-- It is allowed to mount a directory on a non-directory.
-
-- I want really low priority for my cached pages. Can they start out
- 'old' so they will be thrown out on the first oportunity?
-
-- File size change could cause some strange behavior WRT the page
- cache.
-
-- User can cause nasty DoS by not replying to WRITE requests and thus
- blocking writepage() indefinitely.
-2004-11-10 Miklos Szeredi <miklos@szeredi.hu>
+2004-11-11 Miklos Szeredi <miklos@szeredi.hu>
- * Merge from fuse_2_0_bugfix to fuse_2_0_merge1
+ * Check kernel interface version in fusermount to prevent
+ strangeness in case of mismatch.
2004-11-10 Miklos Szeredi <miklos@szeredi.hu>
* Separate configure for the kernel directory
+ * Don't allow write to return more than 'count'
+
+ * Extend kernel interface for future use
+
2004-11-09 Miklos Szeredi <miklos@szeredi.hu>
* Fix 'makeconf.sh' to use autoreconf if available
fuse.pc.in \
README* \
Filesystems \
- BUGS \
+ FAQ \
doc/how-fuse-works
pkgconfigdir = $(libdir)/pkgconfig
+What is new in 2.1
+
+* Bug fixes
+
+* Improved support for filesystems implementing a custom event-loop
+
+* Add 'pkg-config' support
+
+* Kernel module can be compiled separately
+
+============================================================================
+
What is new in 1.9
* Lots of bugs fixed
* Extended attributes support
+============================================================================
+
What is new in 1.3
* Thanks to user bugreports and stress testing with LTP and sfx-linux
* Other bugfixes
+============================================================================
+
What is new in 1.1
* Support for the 2.6 kernels
* Bugfixes
+============================================================================
What is new in 1.0
+++ /dev/null
-To use kbuild, you need write access to .tmp_versions/ and
-.__modpost.cmd in KERNELDIR.
-
-HINT: chmod them 1777
+++ /dev/null
-%define kernelversion %(uname -r)
-%define fusemoduledir /lib/modules/%{kernelversion}/kernel/fs/fuse
-
-%define kernelrel %(uname -r | sed -e s/-/_/g)
-%define real_release 6
-
-Name: fuse
-Version: 1.0
-Release: kernel_%{kernelrel}_%{real_release}
-Summary: Filesystem in Userspace
-Source: %{name}-%{version}.tar.gz
-Copyright: GPL
-Group: Utilities/System
-URL: http://sourceforge.net/projects/avf
-Buildroot: %{_tmppath}/%{name}-root
-Prefix: /usr
-Packager: Achim Settelmeier <fuse-rpm@sirlab.de>
-# some parts of this specfile are taken from Ian Pilcher's specfile
-
-# don't restrict to RedHat kernels but also allow compilation with
-# vanilla kernels, too.
-#Requires: kernel = %{kernelrel}, redhat-release >= 7
-#BuildRequires: kernel-source = %{kernelrel}
-
-
-%description
-FUSE (Filesystem in Userspace) is a simple interface for userspace
-programs to export a virtual filesystem to the linux kernel. FUSE
-also aims to provide a secure method for non privileged users to
-create and mount their own filesystem implementations.
-
-
-%clean
-case "$RPM_BUILD_ROOT" in *-root) rm -rf $RPM_BUILD_ROOT ;; esac
-
-%prep
-%setup
-
-%build
-# invoke configure with the --with-kernel option in case we attempt to
-# compile for a different kernel and hope the path is right :-)
-if [ "%{kernelversion}" != $(uname -r) ]; then
- for dir in /lib/modules/%{kernelversion}/build \
- /usr/src/linux-%{kernelversion} \
- /usr/local/src/linux-%{kernelversion} ; do
- if [ -d "$dir" ]; then
- WITH_KERNEL="--with-kernel=$dir"
- break
- fi
- done
-fi
-
-./configure \
- --prefix=%{prefix} \
- $WITH_KERNEL
-make
-make check
-
-## Now build the library as a shared object
-#cd lib
-#gcc -fPIC -DHAVE_CONFIG_H -I../include -Wall -W -g -O2 -c *.c
-#gcc -shared -Wl,-soname,libfuse.so.%{major_ver} -o libfuse.so.%{version} *.o
-#cd ..
-
-
-%install
-case "$RPM_BUILD_ROOT" in *-root) rm -rf $RPM_BUILD_ROOT ;; esac
-make install \
- prefix=$RPM_BUILD_ROOT%{prefix} \
- fusemoduledir=$RPM_BUILD_ROOT%{fusemoduledir}
-
-install -d $RPM_BUILD_ROOT%{prefix}/lib/fuse/example
-install -s -m 755 example/{fusexmp,hello,null} $RPM_BUILD_ROOT%{prefix}/lib/fuse/example/
-
-# remove binaries form example folder so we can include it
-# as a form of documentation into the package
-make -C example clean
-rm -rf example/.deps/
-
-%post
-/sbin/depmod -aq
-
-%preun
-/sbin/modprobe -r fuse
-
-%postun
-/sbin/depmod -aq
-
-
-
-%files
-%defattr(-,root,root)
-%doc README TODO NEWS INSTALL ChangeLog AUTHORS COPYING COPYING.LIB
-%doc example/
-%doc patch/
-
-%{fusemoduledir}
-%{prefix}/lib/libfuse.a
-%{prefix}/include/fuse.h
-%{prefix}/lib/fuse/
-
-# you want to install fusermount SUID root?
-# Then uncomment the "%attr()"-line in favour of the line after it.
-#%attr(4500,root,root) %{prefix}/bin/fusermount
-%{prefix}/bin/fusermount
-
-
-
-%changelog
-
-* Sun May 25 2003 Achim Settelmeier <fuse-rpm@sirlab.de>
-- don't add --with-kernel in case we compile for the standard kernel
-
-* Tue Mar 04 2003 Achim Settelmeier <fuse-rpm@sirlab.de>
-- "Merged" the specfile by Ian Pilcher (Ian Pilcher <pilchman@attbi.com>)
- and this specfile into one. Both are provided by fuse-1.0.tar.gz.
-
-* Mon Mar 03 2003 Achim Settelmeier <fuse-rpm@sirlab.de>
-- Updated specfile for RedHat 8.0 systems
-
majver = @majver@
VERSION = @PACKAGE_VERSION@
-DISTFILES = Makefile.in configure.ac configure config.h.in makeconf.sh \
+DISTFILES = Makefile.in configure.ac configure config.h.in ../install-sh \
dev.c dir.c file.c inode.c util.c fuse_i.h
COMPATDISTFILES = compat/parser.c compat/parser.h
LINUXDISTFILES = linux/fuse.h
AC_INIT(fuse-kernel, 2.1-pre0)
AC_CONFIG_HEADERS([config.h])
+AC_PROG_INSTALL
+
AC_MSG_CHECKING([kernel source directory])
kernelsrc=
AC_ARG_WITH(kernel,
req->out.args[0].value = &outarg;
request_send(fc, req);
res = req->out.h.error;
- if (!res)
- return outarg.size;
+ if (!res) {
+ if (outarg.size > count)
+ return -EPROTO;
+ else
+ return outarg.size;
+ }
else
return res;
}
struct fuse_open_out {
unsigned long fh;
+ unsigned int _open_flags;
};
struct fuse_release_in {
struct fuse_flush_in {
unsigned long fh;
+ unsigned int _nref;
};
struct fuse_read_in {
+++ /dev/null
-#! /bin/sh
-
-echo Running autoheader...
-autoheader
-echo Running autoconf...
-autoconf
-
-rm -f config.cache config.status
-echo "To compile run './configure', and then 'make'."
MODULE_LICENSE("GPL");
#endif
-spinlock_t fuse_lock = SPIN_LOCK_UNLOCKED;
+spinlock_t fuse_lock;
int __init fuse_init(void)
{
FUSE_VERSION,
FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
+ spin_lock_init(&fuse_lock);
res = fuse_fs_init();
if (res)
goto err;
autoconf
echo Running automake...
automake -a -c
+ (
+ echo Entering directory: kernel
+ cd kernel
+ echo Running autoheader...
+ autoheader
+ echo Running autoconf...
+ autoconf
+ )
fi
rm -f config.cache config.status
#include <sys/un.h>
#include <linux/fuse.h>
-#define FUSE_DEV "/proc/fs/fuse/dev"
-
#define FUSE_COMMFD_ENV "_FUSE_COMMFD"
const char *progname;
return res;
}
+static int check_version(void)
+{
+ int res;
+ int majorver;
+ int minorver;
+ FILE *vf = fopen(FUSE_VERSION_FILE, "r");
+ if (vf == NULL) {
+ fprintf(stderr, "%s: kernel interface too old\n", progname);
+ return -1;
+ }
+ res = fscanf(vf, "%i.%i", &majorver, &minorver);
+ fclose(vf);
+ if (res != 2) {
+ fprintf(stderr, "%s: error reading %s\n", progname, FUSE_VERSION_FILE);
+ return -1;
+ }
+ if (majorver < 3) {
+ fprintf(stderr, "%s: kernel interface too old\n", progname);
+ return -1;
+ }
+ return 0;
+}
+
static int check_perm(const char **mntp, struct stat *stbuf, int *currdir_fd)
{
int res;
return -1;
}
- res = check_perm(&real_mnt, &stbuf, &currdir_fd);
- if (res != -1)
- res = do_mount(real_mnt, type, stbuf.st_mode & S_IFMT, fd, opts,
- &fsname);
+ res = check_version();
+ if (res != -1) {
+ res = check_perm(&real_mnt, &stbuf, &currdir_fd);
+ if (res != -1)
+ res = do_mount(real_mnt, type, stbuf.st_mode & S_IFMT, fd, opts,
+ &fsname);
+ }
+
if (getuid() != 0)
restore_privs();