From 3a6ea06efab29198ba664945cec8296b7e1e356e Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Thu, 11 Nov 2004 10:33:58 +0000 Subject: merge from 2_0_merge1 to 2_0_merge2 --- AUTHORS | 12 ------ BUGS | 10 ----- ChangeLog | 9 +++- Makefile.am | 2 +- NEWS | 17 ++++++++ README-2.6 | 4 -- fuse.spec | 120 ---------------------------------------------------- kernel/Makefile.in | 2 +- kernel/configure.ac | 2 + kernel/file.c | 8 +++- kernel/linux/fuse.h | 2 + kernel/makeconf.sh | 9 ---- kernel/util.c | 3 +- makeconf.sh | 8 ++++ util/fusermount.c | 37 +++++++++++++--- 15 files changed, 77 insertions(+), 168 deletions(-) delete mode 100644 BUGS delete mode 100644 README-2.6 delete mode 100644 fuse.spec delete mode 100755 kernel/makeconf.sh diff --git a/AUTHORS b/AUTHORS index 978027e..cfdba8e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -2,15 +2,3 @@ FUSE core --------- Miklos Szeredi - - -Python bindings ---------------- - -Jeff Epler - - -Perl bindings -------------- - -Mark Glines diff --git a/BUGS b/BUGS deleted file mode 100644 index 5fdce02..0000000 --- a/BUGS +++ /dev/null @@ -1,10 +0,0 @@ -- 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. diff --git a/ChangeLog b/ChangeLog index da6bcdf..8134ae7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,16 @@ -2004-11-10 Miklos Szeredi +2004-11-11 Miklos Szeredi - * 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 * 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 * Fix 'makeconf.sh' to use autoreconf if available diff --git a/Makefile.am b/Makefile.am index aaf5098..28f5b32 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,7 +6,7 @@ EXTRA_DIST = \ fuse.pc.in \ README* \ Filesystems \ - BUGS \ + FAQ \ doc/how-fuse-works pkgconfigdir = $(libdir)/pkgconfig diff --git a/NEWS b/NEWS index 13a84e1..512ccbc 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +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 @@ -20,6 +32,8 @@ What is new in 1.9 * Extended attributes support +============================================================================ + What is new in 1.3 * Thanks to user bugreports and stress testing with LTP and sfx-linux @@ -35,6 +49,8 @@ What is new in 1.2 * Other bugfixes +============================================================================ + What is new in 1.1 * Support for the 2.6 kernels @@ -50,6 +66,7 @@ What is new in 1.1 * Bugfixes +============================================================================ What is new in 1.0 diff --git a/README-2.6 b/README-2.6 deleted file mode 100644 index 8cc4fa1..0000000 --- a/README-2.6 +++ /dev/null @@ -1,4 +0,0 @@ -To use kbuild, you need write access to .tmp_versions/ and -.__modpost.cmd in KERNELDIR. - -HINT: chmod them 1777 diff --git a/fuse.spec b/fuse.spec deleted file mode 100644 index 375b13d..0000000 --- a/fuse.spec +++ /dev/null @@ -1,120 +0,0 @@ -%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 -# 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 -- don't add --with-kernel in case we compile for the standard kernel - -* Tue Mar 04 2003 Achim Settelmeier -- "Merged" the specfile by Ian Pilcher (Ian Pilcher ) - and this specfile into one. Both are provided by fuse-1.0.tar.gz. - -* Mon Mar 03 2003 Achim Settelmeier -- Updated specfile for RedHat 8.0 systems - diff --git a/kernel/Makefile.in b/kernel/Makefile.in index 2f7b74b..42d1807 100644 --- a/kernel/Makefile.in +++ b/kernel/Makefile.in @@ -6,7 +6,7 @@ mkdir_p = mkdir -p 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 diff --git a/kernel/configure.ac b/kernel/configure.ac index 8dce5bd..0dad9cb 100644 --- a/kernel/configure.ac +++ b/kernel/configure.ac @@ -1,6 +1,8 @@ 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, diff --git a/kernel/file.c b/kernel/file.c index aa9dba3..a08d236 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -618,8 +618,12 @@ static ssize_t fuse_send_write(struct fuse_req *req, int writepage, 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; } diff --git a/kernel/linux/fuse.h b/kernel/linux/fuse.h index e5f9a6c..55af4d9 100644 --- a/kernel/linux/fuse.h +++ b/kernel/linux/fuse.h @@ -146,6 +146,7 @@ struct fuse_open_in { struct fuse_open_out { unsigned long fh; + unsigned int _open_flags; }; struct fuse_release_in { @@ -155,6 +156,7 @@ struct fuse_release_in { struct fuse_flush_in { unsigned long fh; + unsigned int _nref; }; struct fuse_read_in { diff --git a/kernel/makeconf.sh b/kernel/makeconf.sh deleted file mode 100755 index d9d6fe1..0000000 --- a/kernel/makeconf.sh +++ /dev/null @@ -1,9 +0,0 @@ -#! /bin/sh - -echo Running autoheader... -autoheader -echo Running autoconf... -autoconf - -rm -f config.cache config.status -echo "To compile run './configure', and then 'make'." diff --git a/kernel/util.c b/kernel/util.c index 13f3fe5..ac6455d 100644 --- a/kernel/util.c +++ b/kernel/util.c @@ -17,7 +17,7 @@ MODULE_DESCRIPTION("Filesystem in Userspace"); MODULE_LICENSE("GPL"); #endif -spinlock_t fuse_lock = SPIN_LOCK_UNLOCKED; +spinlock_t fuse_lock; int __init fuse_init(void) { @@ -27,6 +27,7 @@ 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; diff --git a/makeconf.sh b/makeconf.sh index 67357e3..34090e9 100755 --- a/makeconf.sh +++ b/makeconf.sh @@ -15,6 +15,14 @@ else 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 diff --git a/util/fusermount.c b/util/fusermount.c index 1e218cd..e9e195d 100644 --- a/util/fusermount.c +++ b/util/fusermount.c @@ -35,8 +35,6 @@ #include #include -#define FUSE_DEV "/proc/fs/fuse/dev" - #define FUSE_COMMFD_ENV "_FUSE_COMMFD" const char *progname; @@ -375,6 +373,29 @@ static int do_mount(const char *mnt, const char *type, mode_t rootmode, 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; @@ -475,10 +496,14 @@ static int mount_fuse(const char *mnt, const char *opts) 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(); -- cgit v1.2.3