merge from 2_0_merge1 to 2_0_merge2

This commit is contained in:
Miklos Szeredi 2004-11-11 10:33:58 +00:00
parent 0761361962
commit 3a6ea06efa
15 changed files with 77 additions and 168 deletions

12
AUTHORS
View File

@ -2,15 +2,3 @@ FUSE core
---------
Miklos Szeredi <miklos@szeredi.hu>
Python bindings
---------------
Jeff Epler <jepler@unpythonic.dhs.org>
Perl bindings
-------------
Mark Glines <mark@glines.org>

10
BUGS
View File

@ -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.

View File

@ -1,11 +1,16 @@
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

View File

@ -6,7 +6,7 @@ EXTRA_DIST = \
fuse.pc.in \
README* \
Filesystems \
BUGS \
FAQ \
doc/how-fuse-works
pkgconfigdir = $(libdir)/pkgconfig

17
NEWS
View File

@ -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

View File

@ -1,4 +0,0 @@
To use kbuild, you need write access to .tmp_versions/ and
.__modpost.cmd in KERNELDIR.
HINT: chmod them 1777

120
fuse.spec
View File

@ -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 <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

View File

@ -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

View File

@ -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,

View File

@ -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;
}

View File

@ -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 {

View File

@ -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'."

View File

@ -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;

View File

@ -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

View File

@ -35,8 +35,6 @@
#include <sys/un.h>
#include <linux/fuse.h>
#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();