Compare commits

...

19 Commits

Author SHA1 Message Date
Nikolaus Rath 3087690aba Released 2.6 2016-01-28 17:16:08 -08:00
Nikolaus Rath 3a60def57e Rename project from sshfs-fuse to sshfs 2016-01-28 17:15:49 -08:00
Nikolaus Rath f5b939d40c Don't attempt to download FAQ for tarball generation. 2016-01-28 17:13:05 -08:00
Nikolaus Rath 9b3fb20112 Added missing ChangeLog entries for 2.4 and 2.5 2016-01-28 17:13:05 -08:00
Nikolaus Rath d20b25cd2d Enable subdir-objects automake option
This is recommended for forward-compatibility.
2016-01-28 17:13:05 -08:00
Nikolaus Rath 055649e2fa Changed Changelog format
Up to now, the Changelog has essentially been a (manually maintained)
copy of the git commit history. This doesn't seem to have any point
other than following the GNU coding standards. I believe it's much
better to use the Changelog to summarize the release-to-release
changes that are most important for users (as was done in the NEWS
file until now).
2016-01-28 17:12:49 -08:00
Nikolaus Rath d18349da3b Removed placeholder README file and switch automake to foreign flavor.
The GNU flavor merely requires to existence of some files (including
README, but we prefer README.md), so there seems to be little point
in using it.
2016-01-28 16:52:50 -08:00
Nikolaus Rath cf10c34573 Updated credits from git. 2016-01-28 16:51:08 -08:00
Nikolaus Rath 008cf7bcf4 Renamed README to README.md for Markdown rendering on Github.
Remaining README file is just to make automake happy.
2015-12-21 19:23:10 -08:00
Miklos Szeredi e4e14109ad sshfs: Increase the maximum length of the password
read from stdin to 1024 characters.

Reported by: Mario A. Valdez-Ramirez.
2015-04-14 11:01:19 +02:00
Miklos Szeredi 48122e8043 sshfs-return-the-correct-x_ok-access
sshfs-fuse always returned 0 in access(file, X_OK) calls, causing nautilus
to prompt "Do you want to run "login.defs", or display its contents?" for
text files that were not executable.

Reported by: Alkis Georgopoulos
2014-02-10 14:09:13 +01:00
Miklos Szeredi 6b4415ada4 Released 2.5 2014-01-14 15:23:31 +01:00
Alexander Neumann 6a2d06e36f Implement asynchronous readdir
Accessing directories with many (several thousand) files over sshfs is
slow, because most SFTP server implementations only send a fixed amount
of entries per READDIR command (e.g. OpenSSH SFTP: 100 entries). This
patch implements sending several READDIR commands in parallel, in order
to speed up directory listing in these cases.

An option (sync_readdir) is also added so that users can easily switch
on the old behaviour.

The performance improvement is astonishing. Accessing a directory with
30k files in from a remote server that has a RTT of 15ms via OpenSSH
SFTP:

Synchronous readdir:
 $ ./sshfs -o sync_readdir host:/tmp /mnt/temp
 $ time "ls" -1 /mnt/temp/test | wc -l
 30000
 "ls" -1 /mnt/temp/test  0.07s user 0.01s system 1% cpu 6.928 total

Asynchronous readdir:
 $ ./sshfs host:/tmp /mnt/temp
 $ time "ls" -1 /mnt/temp/test | wc -l
 30000
 "ls" -1 /mnt/temp/test  0.07s user 0.01s system 12% cpu 0.605 total

Accessing a directory with 100k files shows even more dramatic
improvement:

Synchronous readdir:
 $ ./sshfs -o sync_readdir host:/tmp /mnt/temp
 $ time "ls" -1 /mnt/temp/test2 | wc -l
 100000
 "ls" -1 /mnt/temp/test2  0.67s user 1.22s system 0% cpu 3:31.56 total

Asynchronous readdir:
 $ ./sshfs host:/tmp /mnt/temp
 $ time "ls" -1 /mnt/temp/test2 | wc -l
 100000
 "ls" -1 /mnt/temp/test2  0.20s user 0.03s system 14% cpu 1.631 total

This can easily be reproduced by creating a directory on a server and
touching a lot of files in it:
 $ mkdir /tmp/test
 $ cd /tmp/test
 $ for i in $(seq 1 30000); do touch $i; done

Signed-off-by: Alexander Neumann <alexander@bumpern.de>
2014-01-08 16:34:52 +01:00
Miklos Szeredi 334e9e6a27 Add -o disable_hardlink option (debian bug #670926)
Reported by Louis-David Mitterrand
2014-01-08 12:31:18 +01:00
Miklos Szeredi 91c1f2ba9e Map SSH2_FX_FAILURE to ENOTEMPTY for rmdir
Reported by Ross Lagerwall
2014-01-07 18:52:51 +01:00
Miklos Szeredi c1d62f2032 fix a typo in man page 2013-04-11 17:58:21 +02:00
Alan Jenkins 61524cd1e8 fix missing newline in manual page 2013-02-18 14:36:51 +01:00
Miklos Szeredi 9f4ba56b52 Add FIXME for deadlock if $PATH contains mountpoint.
Reported by Joachim Kopp
2013-02-05 12:33:36 +01:00
Miklos Szeredi ce6753c88f When checking root directory use LSTAT not STAT
This prevents I/O error being returned after a successful mount if a symlink is
mounted.

Reported by Bart Friederichs
2012-05-14 16:18:22 +02:00
10 changed files with 295 additions and 676 deletions
+22 -1
View File
@@ -1 +1,22 @@
Miklos Szeredi <miklos@szeredi.hu>
Current Maintainer
------------------
Nikolaus Rath <Nikolaus@rath.org>
Past Maintainers
----------------
Miklos Szeredi <miklos@szeredi.hu> (until 12/2015)
Contributors (autogenerated list)
---------------------------------
Alan Jenkins <alan.christopher.jenkins@gmail.com>
Alexander Neumann <alexander@bumpern.de>
Chris Wolfe <cwolfe@chromium.org>
Mike Kelly <mike@pair.com>
Miklos Szeredi <miklos@szeredi.hu>
Nikolaus Rath <Nikolaus@rath.org>
Percy Jahn <email@percyjahn.de>
+85 -519
View File
@@ -1,573 +1,139 @@
2012-03-08 Miklos Szeredi <miklos@szeredi.hu>
Release 2.7 (2015-01-28)
------------------------
* Released 2.4
* New maintainer (Nikolaus Rath <Nikolaus@rath.org>)
2012-03-08 Miklos Szeredi <miklos@szeredi.hu>
* Make sure idmap files aren't writable by others otherwise, other
local users could change the mapping, and gain access to things
they shouldn't. Patch by Mike Kelly
Release 2.6 (2014-01-14)
------------------------
2012-02-08 Chris Wolfe <cwolfe@chromium.org>
* Some performance improvements for large directories.
* New `disable_hardlink` option.
* Various small bugfixes.
* Add -o slave. This option routes the sftp communication over stdin
and stdout, bypassing SSH and network.
Release 2.4 (2012-03-08)
------------------------
2011-12-16 Mike Kelly <mike@pair.com>
* New `slave` option.
* New `idmap`, `uidmap` and `gidmap` options.
* Various small bugfixes.
* Add -o idmap=file, -o uidmap=FILE, -o gidmap=FILE. These options
allow you to create a pair of local files, similar to /etc/passwd or
/etc/group files from the remote server, and use those to remap all
the given UIDs/GIDs.
Release 2.3 (2011-07-01)
------------------------
2011-11-25 Miklos Szeredi <miklos@szeredi.hu>
* Support hard link creation if server is OpenSSH 5.7 or later
* Small improvements and bug fixes
* Check mount point and options before connecting to ssh server
* New 'delay_connect' option
* Make chown respect the UID mapping policy. Reported and tested
by Vivenzio Pagliari
Release 2.2 (2008-10-20)
------------------------
2011-11-16 Miklos Szeredi <miklos@szeredi.hu>
* Handle numerical IPv6 addresses enclosed in square brackets
* Handle commas in usernames
* Submit max 32k reads and writes to the sftp server. Also don't
limit the kernel to 64k reads and writes, rather split into 32k
sized chunks and send them to the server all at once. This is
more efficient and less demanding from the server. Reported by
Ludovic Courtès. Fix suggested by Niels Möller
Release 2.1 (2008-07-11)
------------------------
2011-11-14 Miklos Szeredi <miklos@szeredi.hu>
* Small improvements and bug fixes
* Fix double free if reconnection races with request sending.
Patch by E. Kuemmerle
Release 2.0 (2008-04-23)
------------------------
* Add locking around modifver and connver
* Support password authentication with pam_mount
2011-10-21 Miklos Szeredi <miklos@szeredi.hu>
* Support atomic renames if server is OpenSSH 4.9 or later
* Remove "-oPreferredAuthentications" from ssh options if the
"password_stdin" option is used. Reported by E. Kuemmerle
* Support getting disk usage if server is OpenSSH 5.1 or later
2011-08-24 Miklos Szeredi <miklos@szeredi.hu>
* Small enhancements and bug fixes
* Add "-oworkaround=fstat" for SFTP servers which don't support
the FSTAT message. Patch by: Percy Jahn
What is new in 1.9
------------------
2011-07-01 Miklos Szeredi <miklos@szeredi.hu>
* Fix a serious bug, that could result in sshfs hanging, crashing, or
reporting out-of-memory
* Released 2.3
What is new in 1.8
------------------
2011-07-01 Miklos Szeredi <miklos@szeredi.hu>
* Bug fixes
* Add hard link operation. Works if the server supports the
"hardlink@openssh.com" protocol extension.
What is new in 1.7
------------------
2011-03-25 Miklos Szeredi <miklos@szeredi.hu>
* Tolerate servers which print a banner on login
* Fix possible deadlock on reconnection. Reported by Florian
Zumbiehl
* Small improvements
2011-01-25 Miklos Szeredi <miklos@szeredi.hu>
What is new in 1.6
------------------
* Fix cleanup when ssh connection is terminated. This prevents
sshfs hanging when the server is rebooted, for example.
* Workaround for missing truncate operation on old sftp servers
2010-03-16 Miklos Szeredi <miklos@szeredi.hu>
* Bug fixes
* Set FD_CLOEXEC on fuse device. This prevents deadlocks that
happen in some circumstances (bugzilla.kernel.org #12864).
Reported by Tim Connors
What is new in 1.5
------------------
2009-07-15 Miklos Szeredi <miklos@szeredi.hu>
* Improvements to read performance. Now both read and write
throughput should be very close to 'scp'
* Check mountpoint and fuse options before starting an ssh
session (debian bug #535333). This is only supported if compiled
against libfuse-2.6 or later. Reported by Greg Kochanski
* If used with FUSE 2.6.0 or later, then perform better data caching.
This should show dramatic speed improvements when a file is opened
more than once
* Check that the remote path specified refers to the same type of
file as the mountpoint, i.e. both are directories or both are
non-directories (debian bug #535343). Reported by Greg Kochanski
* Bug fixes
* Allow mounting a single non-directory from the server
What is new in 1.4
------------------
2009-07-15 Sebastian Dransfeld <sebastid@tango.flipp.net>
* Updated to version 25 of libfuse API
* Add option 'delay_connect': This will always create the sshfs mount,
even if the connection to the server can't be established.
* This means that the 'cp' of readonly file to sshfs bug is finally
solved (as long as using libfuse 2.5.0 or later *and* Linux 2.6.15
or later)
2009-01-27 Miklos Szeredi <miklos@szeredi.hu>
* Sshfs now works on FreeBSD
* Print usage information and version to stdout, not stderr.
Libfuse also needs to be fixed up. Reported by Kārlis Repsons
* Added option to "transform" absolute symbolic links
2008-10-20 Miklos Szeredi <miklos@szeredi.hu>
What is new in 1.3
------------------
* Released 2.2
* Add workaround for failure to rename to an existing file
2008-10-20 Miklos Szeredi <miklos@szeredi.hu>
* Simple user ID mapping
* Escape commas in fsname option if libfuse supports it
* Estimate disk usage of files based on size
2008-10-08 Miklos Szeredi <miklos@szeredi.hu>
* Report "infinite" disk space
* Handle numerical IPv6 addresses enclosed in square brackets.
Reported by Andre-John Mas
* Bug fixes
* Fix error if username contains a comma character. Reported by
Yang Zhang
What is new in 1.2
------------------
* Fix harmless glib assertations with "cache=no"
* Better compatibility with different sftp servers
2008-07-11 Miklos Szeredi <miklos@szeredi.hu>
* Automatic reconnect (optional)
* Released 2.1
What is new in 1.1
------------------
2008-07-11 Miklos Szeredi <miklos@szeredi.hu>
* Performance improvements:
* Fix statvfs extension to match the current protocol in
opensshfs
- directory content caching
* Check version numbers of extensions, so such changes wouldn't
cause stupid behavior
- symlink caching
2008-06-24 Miklos Szeredi <miklos@szeredi.hu>
- asynchronous writeback
* Add '-F' option to specify the ssh config file. Patch by Pat
Pascal.
- readahead
2008-05-06 Miklos Szeredi <miklos@szeredi.hu>
* Fixed '-p' option
* Fix bug in caching which could cause file corruption for append
mode writes. Reported by Jose Alonso
What is new in 1.0
------------------
2008-05-05 Miklos Szeredi <miklos@szeredi.hu>
* Fix compile on OS X. Original patch from Michael G Schwern
* Fix compile on Solaris. Reported by Jean-Jacques Sarton
2008-04-23 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.0
2008-04-23 Miklos Szeredi <miklos@szeredi.hu>
* Add manual page. Written by Bartosz Fenski
2008-04-22 Miklos Szeredi <miklos@szeredi.hu>
* Add missing ssh options: ControlMaster, ControlPath,
KbdInteractiveAuthentication, KbdInteractiveDevices, LocalCommand,
RekeyLimit (Debian bug #430225).
* Allow the '-ossh_command=CMD' command to contain parameters.
Escape charater is backslash.
* Limit write requests to 64kB.
* Support "statvfs@openssh.com" extension, which will be available
in OpenSSH 5.1.
2008-04-21 Miklos Szeredi <miklos@szeredi.hu>
* Fix incorrect disk usage reported by 'du' for files of size 4GB
or above. Reported by Christian Boltz.
2008-04-16 Miklos Szeredi <miklos@szeredi.hu>
* If debugging is enabled, print some statistics at exit about the
number of bytes transferred, etc..
2008-03-31 Miklos Szeredi <miklos@szeredi.hu>
* Support "posix-rename@openssh.com" extension available in
OpenSSH 4.9. This allows rename to be atomic even when target
file or directory exists. If available, the extension will be
used instead of the rename operation in the original protocol and
the "-oworkaround=rename" option will be ignored.
2008-03-28 Miklos Szeredi <miklos@szeredi.hu>
* Add support for password authentication with pam_mount.
Original patch and help with testing: John S. Skogtvedt
2008-03-03 Miklos Szeredi <miklos@szeredi.hu>
* Fix ssh debug only appearing if "-d" is used. Reported by
Michael Gorbach
2008-01-03 Miklos Szeredi <miklos@szeredi.hu>
* Fix condition for building of sshnodelay.so
2007-12-17 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.9
2007-12-12 Miklos Szeredi <miklos@szeredi.hu>
* Fix checking for fuse_opt_parse in configure
2007-12-11 Miklos Szeredi <miklos@szeredi.hu>
* Fill in st_ctime attribute with st_mtime, instead of leaving it
zero
* Check for OpenSSH version >= 4.4, and if found, don't build the
sshnodelay.so workaround
2007-12-10 Miklos Szeredi <miklos@szeredi.hu>
* Fix crash on writing files, caused by missing locking around
sshfs_file_get()
* Don't time requests when not debugging
* Add subtype support with libfuse >= 2.7.0
* Abort on allocation failure instead of exit
* Correctly show default of nodelaysrv workaround in help message
2007-05-16 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.8
2007-05-15 Miklos Szeredi <miklos@szeredi.hu>
* Add needed g_thread_init() to fix rare crashes. Reported by
Dimitrios Apostolou
* Fix memory leak in sshfs_open_common()
2007-04-18 Miklos Szeredi <miklos@szeredi.hu>
* Fix crash within gdb, caused by sem_wait() returning with an
error on interrupt. Reported by Dimitrios Apostolou
* Fix spurious cache entries remaining after renaming a directory
2007-02-28 Miklos Szeredi <miklos@szeredi.hu>
* Don't set DISPLAY environment variable to "", because it breaks
ssh-askpass. Make nodelaysrv_workaround default to off, because
with this change it may have security implications.
2007-02-19 Miklos Szeredi <miklos@szeredi.hu>
* OpenSSH sftp-server can read requests faster, than it processes
them, when it's buffer is full it aborts. This can happen on a
large upload to a slow server. Work around this by limiting the
total size of outstanding reqests. Debian bug #365541. Tracked
down by Thue Janus Kristensen
* Add --disable-sshnodelay configure option. The sshnodelay.so
hack shouldnt be needed with OpenSSH client versions >= 4.3
2006-12-20 Miklos Szeredi <miklos@szeredi.hu>
* Work around write performace issues due to missing TCP_NODELAY
in sshd. Reported by Justin Searle
2006-11-10 Miklos Szeredi <miklos@szeredi.hu>
* Fix bug which ommitted directory entries for symlinks with the
-ofollow_symlinks option. Bug reported by Mikael Ståldal
2006-09-29 Miklos Szeredi <miklos@szeredi.hu>
* Fix segfault if there are outstanding writes to the server after
release on the file descriptor. This only happened on FreeBSD.
Reported by Andriy Gapon
2006-08-18 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.7
2006-08-17 Miklos Szeredi <miklos@szeredi.hu>
* Cosmetics on bogus statfs numbers
2006-08-16 Miklos Szeredi <miklos@szeredi.hu>
* Add option 'follow_symlinks' to resolve symlinks on the server.
* On setups where the login shell prints a banner, the sftp
protocol was confused, and bailed out with "reply len too large:
...". So iterate over any rubbish read immediately after login
until a valid reply is found.
* Check remote directory for existence before mounting. Closes
Ubuntu bug #46633
2006-03-10 Miklos Szeredi <miklos@szeredi.hu>
* Use socketpair() instead of pipe() for communication between ssh
and sshfs. Patch from Csaba Henk
* Update to FUSE interface version 26
2006-03-09 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.6
2006-03-09 Miklos Szeredi <miklos@szeredi.hu>
* Fix segfault if remote host is down and reconnection is enabled
2006-03-08 Miklos Szeredi <miklos@szeredi.hu>
* Fix bug in symlink transformation. Reported by Ralf Hoffmann
2006-02-24 Miklos Szeredi <miklos@szeredi.hu>
* Add workaround for broken truncate on old sftp servers. Can be
enabled with '-oworkaround=truncate'. Patch from Joseph M Link
2006-02-23 Miklos Szeredi <miklos@szeredi.hu>
* Avoid double memcpy on writes. Patch by Joseph M Link
* More memory copy avoidance
2006-02-22 Miklos Szeredi <miklos@szeredi.hu>
* Add -fPIC to the comile flags of sshnodelay.so. Reported by
Anthony Kolasny
2006-02-20 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.5
2006-02-19 Miklos Szeredi <miklos@szeredi.hu>
* Fix compilation with old FUSE versions. Report by Kurt George
Gjerde
2006-02-16 Miklos Szeredi <miklos@szeredi.hu>
* Block TERM/INT/HUP/QUIT signals in sshfs reading thread, so they
will always be received by the FUSE main thread. Fixes the
"double ^C" problem seen on FreeBSD.
* Use 'auto_cache' option if available, so that file cache is not
thrown away on each open. This should make repeated reading of a
file much much faster.
2006-01-31 Miklos Szeredi <miklos@szeredi.hu>
* Fix problems with nodelay workaround on FreeBSD.
2006-01-30 Miklos Szeredi <miklos@szeredi.hu>
* Fix data consitency bug if readahead is enabled and writes are
intermixed with reads. Solution is far from optimal, since it
will prevent readahead in the above situation. If used with FUSE
>= 2.6.0 with Linux-2.6.X, readahead will be done by the kernel,
and hence there will be no performance penalty. Bug reported and
test program written by Wolfgang Köbler. Further testing on
FreeBSD by Csaba Henk
2006-01-29 Miklos Szeredi <miklos@szeredi.hu>
* Add '-olarge_read' option for Linux-2.4.*. This should
generally improve download performance
2006-01-27 Miklos Szeredi <miklos@szeredi.hu>
* Add workaround (enabled by default) for ssh clients not setting
TCP_NODELAY on the network connection. Currently this is all
known versions of openssh. This may improve download speed in
some circumstances
* Make it possible to idividually disable workarounds with a "no"
prefix
* Change '-otransform_symlinks' not to prefix with the mountpoint
(which is fragile wrt. moving/binding the mount). Rather convert
absolute symlinks to relative if possible. Does not yet work if
base path is itself relative
2006-01-25 Miklos Szeredi <miklos@szeredi.hu>
* Use TCP_NODELAY socket option for direct connection. This may
improve download speed in some circumstances
2006-01-20 Miklos Szeredi <miklos@szeredi.hu>
* Update to fuse API 2.6
* Don't do readahead in sshfs if it's done in kernel
2006-01-14 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.4
2006-01-09 Miklos Szeredi <miklos@szeredi.hu>
* Added 'transform_symlinks' option to "fix-up" absolute symlinks.
Patch by Paul Jarc
* Add option parsing implementation, so linking with older than
2.5.0 libfuse still works.
2005-12-09 Miklos Szeredi <miklos@szeredi.hu>
* Use new option parsing interface of FUSE
2005-11-28 Miklos Szeredi <miklos@szeredi.hu>
* Set statvfs::f_frsize
2005-11-23 Miklos Szeredi <miklos@szeredi.hu>
* Fix warnings on 64bit systems. Reported by D. R. Evans
2005-11-16 Miklos Szeredi <miklos@szeredi.hu>
* Replace EPROTO with the more portable EIO
* Fix bug in option parsing. Reported by Csaba Henk
2005-10-29 Miklos Szeredi <miklos@szeredi.hu>
* Use FUSE version 25 if available
* Add <sys/socket.h> include. Reported by Csaba Henk
2005-10-29 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.3
2005-10-28 Miklos Szeredi <miklos@szeredi.hu>
* Add atomic create+open and ftruncate operation. This should fix
issues with 'cp' and other programs failing with "Permission
denied". To be effective, needs FUSE version 2.5 and kernel
version 2.6.15 (just a guess, since neither of them is released
yet).
2005-10-27 Miklos Szeredi <miklos@szeredi.hu>
* Add support for SSH protocol version 1. Bug reported by Miklos
Bagi Jr.
2005-10-26 Miklos Szeredi <miklos@szeredi.hu>
* Fix typo (ConnectTimeout -> ConnectionTimeout) in ssh options.
Bug reported by Miklos Bagi Jr.
2005-10-19 Miklos Szeredi <miklos@szeredi.hu>
* GNOME Nautilus fails to copy file to sshfs filesystem, because
FUSE returns zero free space. So instead return huge (999999999
kbytes) amount of free space, yet it should be obvious that the
number is artificial. Bug report by Peter Kronheimer
2005-10-18 Miklos Szeredi <miklos@szeredi.hu>
* Add remote uid detection and translation ('idmap=user' option).
Idea and implementation details worked out by Jean-Marc Valin
2005-10-17 Miklos Szeredi <miklos@szeredi.hu>
* Add one more missing lock.
* Add workaround for failure to rename to an existing file. Based
on patch by Michael Best
2005-10-15 Miklos Szeredi <miklos@szeredi.hu>
* Protect request ID allocation with mutex. Bug report by Tvrtko
Ursulin
2005-08-17 Miklos Szeredi <miklos@szeredi.hu>
* Try to calculate approximate disk usage of files from their
size, so that 'du' returns meaningful results. Problem reported
by Bernd Amend.
2005-08-15 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.2
2005-08-13 Miklos Szeredi <miklos@szeredi.hu>
* Add 'reconnect' option, which tries to reconnect to the server
when the connection is broken. If a password is required for
connection, it is recommended that you install ssh-askpass, and
set the SSH_ASKPASS environment variable (see 'man ssh' for more
details).
2005-05-05 Miklos Szeredi <miklos@szeredi.hu>
* Work around missing truncate() support in some older sftp
servers (only works for zero size truncate). Thanks to Eduard
Czimbalmos for the bug report and help with testing
2005-04-13 Miklos Szeredi <miklos@szeredi.hu>
* Fix compilation with gcc-2.95. Reported by David A. Gershman
2005-03-08 Miklos Szeredi <miklos@szeredi.hu>
* Make it work on server version 2 (e.g. Sun_SSH_1.0.1). Report
and testing by Pieter J. Kersten
2005-03-04 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.1
2005-03-03 Miklos Szeredi <miklos@szeredi.hu>
* Slightly optimize readahead. Still not clever enough to always
keep the pipe filled.
* Add 'sshfs_debug' option
2005-02-17 Miklos Szeredi <miklos@szeredi.hu>
* Parse 'max_read' mount option and if smaller than 65536 forward
to FUSE
2005-02-16 Miklos Szeredi <miklos@szeredi.hu>
* Added simple readahead (big performance gain in case of
sequential read pattern). Can be disabled with '-o no_readahead'
2005-02-14 Miklos Szeredi <miklos@szeredi.hu>
* Added asynchronous writeback (big performance gain) and made
this the default. Can be disabled with '-o sshfs_sync'
2005-02-09 Miklos Szeredi <miklos@szeredi.hu>
* Added option to start arbitary command instead of 'ssh'
* Re-added '-p PORT' as a convenience option, also '-C' works as
in ssh.
2005-02-08 Miklos Szeredi <miklos@szeredi.hu>
* Add caching of symlinks
* Add support for many ssh options to be passed to ssh
* Port number can now actually be specified with "-o port=PORT",
bug spotted by Andrew Ukrainec
2005-02-07 Miklos Szeredi <miklos@szeredi.hu>
* Separate attribute caching to a separate layer
* Add caching of directory contents
2005-02-03 Miklos Szeredi <miklos@szeredi.hu>
Fix PKG_CONFIG_PATH setting in configure.ac (reported by Alpar
Juttner)
2005-01-09 Miklos Szeredi <miklos@szeredi.hu>
* Released 1.0
2004-12-04 Miklos Szeredi <miklos@szeredi.hu>
* Started ChangeLog
* Initial release
+1 -1
View File
@@ -11,7 +11,7 @@ sshfs_LDADD = $(SSHFS_LIBS)
sshfs_CFLAGS = $(SSHFS_CFLAGS)
sshfs_CPPFLAGS = -D_REENTRANT -DFUSE_USE_VERSION=26 -DLIBDIR=\"$(libdir)\"
EXTRA_DIST = sshnodelay.c FAQ.txt
EXTRA_DIST = sshnodelay.c
CLEANFILES = sshnodelay.so
dist_man_MANS = sshfs.1
-112
View File
@@ -1,112 +0,0 @@
What is new in 2.1, 2.2 and 2.3
-------------------------------
* Support hard link creation if server is OpenSSH 5.7 or later
* Check mount point and options before connecting to ssh server
* Handle commas in usernames
* Small improvements and bug fixes
What is new in 2.0
------------------
* Support password authentication with pam_mount
* Support atomic renames if server is OpenSSH 4.9 or later
* Support getting disk usage if server is OpenSSH 5.1 or later
* Small enhancements and bug fixes
What is new in 1.9
------------------
* Fix a serious bug, that could result in sshfs hanging, crashing, or
reporting out-of-memory
What is new in 1.8
------------------
* Bug fixes
What is new in 1.7
------------------
* Tolerate servers which print a banner on login
* Small improvements
What is new in 1.6
------------------
* Workaround for missing truncate operation on old sftp servers
* Bug fixes
What is new in 1.5
------------------
* Improvements to read performance. Now both read and write
throughput should be very close to 'scp'
* If used with FUSE 2.6.0 or later, then perform better data caching.
This should show dramatic speed improvements when a file is opened
more than once
* Bug fixes
What is new in 1.4
------------------
* Updated to version 25 of libfuse API
* This means that the 'cp' of readonly file to sshfs bug is finally
solved (as long as using libfuse 2.5.0 or later *and* Linux 2.6.15
or later)
* Sshfs now works on FreeBSD
* Added option to "transform" absolute symbolic links
What is new in 1.3
------------------
* Add workaround for failure to rename to an existing file
* Simple user ID mapping
* Estimate disk usage of files based on size
* Report "infinite" disk space
* Bug fixes
What is new in 1.2
------------------
* Better compatibility with different sftp servers
* Automatic reconnect (optional)
What is new in 1.1
------------------
* Performance improvements:
- directory content caching
- symlink caching
- asynchronous writeback
- readahead
* Fixed '-p' option
What is new in 1.0
------------------
* Initial release
+11 -13
View File
@@ -26,8 +26,7 @@ Latest version
==============
The latest version and more information can be found on
http://fuse.sourceforge.net/sshfs.html
http://github.com/libfuse/sshfs
How to mount a filesystem
@@ -35,7 +34,7 @@ How to mount a filesystem
Once sshfs is installed (see next section) running it is very simple:
sshfs hostname: mountpoint
sshfs hostname: mountpoint
Note, that it's recommended to run it as user, not as root. For this
to work the mountpoint must be owned by the user. If the username is
@@ -47,28 +46,27 @@ is the home directory.
Also many ssh options can be specified (see the manual pages for
sftp(1) and ssh_config(5)), including the remote port number
('-oport=PORT')
(`-oport=PORT`)
To unmount the filesystem:
fusermount -u moutpoint
fusermount -u moutpoint
Installing
==========
First you need to download FUSE 2.2 or later from:
http://fuse.sourceforge.net
First you need to download FUSE 2.2 or later from
http://github.com/libfuse/libfuse.
You also need to install the devel package for glib2.0. After
installing FUSE, compile sshfs the usual way:
./configure
make
make install (as root)
./configure
make
make install (as root)
And you are ready to go.
If checking out from CVS for the first time also do 'autoreconf -i'
before doing './configure'.
If checking out from git for the first time also do `autoreconf -i`
before doing `./configure`.
+1
View File
@@ -490,6 +490,7 @@ static void cache_unity_fill(struct fuse_cache_operations *oper,
cache_oper->init = oper->oper.init;
#endif
cache_oper->getattr = oper->oper.getattr;
cache_oper->access = oper->oper.access;
cache_oper->readlink = oper->oper.readlink;
cache_oper->getdir = cache_unity_getdir;
cache_oper->mknod = oper->oper.mknod;
+2 -2
View File
@@ -1,5 +1,5 @@
AC_INIT(sshfs-fuse, 2.4)
AM_INIT_AUTOMAKE
AC_INIT(sshfs, 2.6)
AM_INIT_AUTOMAKE([foreign subdir-objects])
AM_CONFIG_HEADER(config.h)
AC_PROG_CC
-11
View File
@@ -1,11 +0,0 @@
#! /bin/bash
(
echo "See http://fuse.sourceforge.net/wiki/index.php/SshfsFaq for the latest"
echo "version of this FAQ"
echo "---"
echo
lynx -nolist -dump http://fuse.sourceforge.net/wiki/index.php/SshfsFaq \
| sed -e '1,12d' -e '/____/,$d'
) > FAQ.txt
+10 -1
View File
@@ -58,6 +58,9 @@ synchronous writes
\fB\-o\fR no_readahead
synchronous reads (no speculative readahead)
.TP
\fB\-o\fR sync_readdir
synchronous readdir
.TP
\fB\-o\fR sshfs_debug
print some debugging information
.TP
@@ -138,9 +141,15 @@ path to sftp server or subsystem (default: sftp)
.TP
\fB\-o\fR directport=PORT
directly connect to PORT bypassing ssh
.TP
\fB\-o\fR slave
communicate over stdin and stdout bypassing network
.TP
\fB\-o\fR disable_hardlink
link(2) will return with errno set to ENOSYS. Hard links don't currently work
perfectly on sshfs, and this confuses some programs. If that happens try
disabling hard links with this option.
.TP
\fB\-o\fR transform_symlinks
transform absolute symlinks to relative
.TP
@@ -256,7 +265,7 @@ perform reads synchronously
\fB\-o\fR subdir=DIR
prepend this directory to all paths (mandatory)
.TP
\fB\-o\fR [no]rellinksa
\fB\-o\fR [no]rellinks
transform absolute symlinks to relative
.TP
[iconv]
+163 -16
View File
@@ -121,6 +121,12 @@
#define SSHNODELAY_SO "sshnodelay.so"
/* Asynchronous readdir parameters */
#define READDIR_START 2
#define READDIR_MAX 32
#define MAX_PASSWORD 1024
struct buffer {
uint8_t *p;
size_t len;
@@ -139,6 +145,7 @@ struct request {
unsigned int want_reply;
sem_t ready;
uint8_t reply_type;
uint32_t id;
int replied;
int error;
struct buffer reply;
@@ -203,6 +210,7 @@ struct sshfs {
int detect_uid;
int idmap;
int nomap;
int disable_hardlink;
char *uid_file;
char *gid_file;
GHashTable *uid_map;
@@ -214,6 +222,7 @@ struct sshfs {
unsigned ssh_ver;
int sync_write;
int sync_read;
int sync_readdir;
int debug;
int foreground;
int reconnect;
@@ -247,6 +256,7 @@ struct sshfs {
int ext_statvfs;
int ext_hardlink;
mode_t mnt_mode;
struct fuse_operations *op;
/* statistics */
uint64_t bytes_sent;
@@ -350,6 +360,7 @@ static struct fuse_opt sshfs_opts[] = {
SSHFS_OPT("nomap=error", nomap, NOMAP_ERROR),
SSHFS_OPT("sshfs_sync", sync_write, 1),
SSHFS_OPT("no_readahead", sync_read, 1),
SSHFS_OPT("sync_readdir", sync_readdir, 1),
SSHFS_OPT("sshfs_debug", debug, 1),
SSHFS_OPT("reconnect", reconnect, 1),
SSHFS_OPT("transform_symlinks", transform_symlinks, 1),
@@ -358,6 +369,7 @@ static struct fuse_opt sshfs_opts[] = {
SSHFS_OPT("password_stdin", password_stdin, 1),
SSHFS_OPT("delay_connect", delay_connect, 1),
SSHFS_OPT("slave", slave, 1),
SSHFS_OPT("disable_hardlink", disable_hardlink, 1),
FUSE_OPT_KEY("-p ", KEY_PORT),
FUSE_OPT_KEY("-C", KEY_COMPRESS),
@@ -1620,7 +1632,7 @@ static int sftp_check_root(const char *base_path)
buf_init(&buf, 0);
buf_add_string(&buf, remote_dir);
buf_to_iov(&buf, &iov[0]);
if (sftp_send_iov(SSH_FXP_STAT, id, iov, 1) == -1)
if (sftp_send_iov(SSH_FXP_LSTAT, id, iov, 1) == -1)
goto out;
buf_clear(&buf);
if (sftp_read(&type, &buf) == -1)
@@ -1790,6 +1802,13 @@ static int sftp_request_wait(struct request *req, uint8_t type,
err = -EIO;
break;
case SSH_FX_FAILURE:
if (type == SSH_FXP_RMDIR)
err = -ENOTEMPTY;
else
err = -EPERM;
break;
default:
err = -sftp_error_to_errno(serr);
}
@@ -1827,6 +1846,7 @@ static int sftp_request_send(uint8_t type, struct iovec *iov, size_t count,
if (begin_func)
begin_func(req);
id = sftp_get_id();
req->id = id;
err = start_processing_thread();
if (err) {
pthread_mutex_unlock(&sshfs.lock);
@@ -1915,6 +1935,22 @@ static int sshfs_getattr(const char *path, struct stat *stbuf)
return err;
}
static int sshfs_access(const char *path, int mask)
{
struct stat stbuf;
int err = 0;
if (mask & X_OK) {
err = sshfs.op->getattr(path, &stbuf);
if (!err) {
if (S_ISREG(stbuf.st_mode) &&
!(stbuf.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)))
err = -EACCES;
}
}
return err;
}
static int count_components(const char *p)
{
int ctr;
@@ -2014,6 +2050,113 @@ static int sshfs_readlink(const char *path, char *linkbuf, size_t size)
return err;
}
static int sftp_readdir_send(struct request **req, struct buffer *handle)
{
struct iovec iov;
buf_to_iov(handle, &iov);
return sftp_request_send(SSH_FXP_READDIR, &iov, 1, NULL, NULL,
SSH_FXP_NAME, NULL, req);
}
static int sshfs_req_pending(struct request *req)
{
if (g_hash_table_lookup(sshfs.reqtab, GUINT_TO_POINTER(req->id)))
return 1;
else
return 0;
}
static int sftp_readdir_async(struct buffer *handle, fuse_cache_dirh_t h,
fuse_cache_dirfil_t filler)
{
int err = 0;
int outstanding = 0;
int max = READDIR_START;
GList *list = NULL;
int done = 0;
while (!done || outstanding) {
struct request *req;
struct buffer name;
int tmperr;
while (!done && outstanding < max) {
tmperr = sftp_readdir_send(&req, handle);
if (tmperr && !done) {
err = tmperr;
done = 1;
break;
}
list = g_list_append(list, req);
outstanding++;
}
if (outstanding) {
GList *first;
/* wait for response to next request */
first = g_list_first(list);
req = first->data;
list = g_list_delete_link(list, first);
outstanding--;
if (done) {
pthread_mutex_lock(&sshfs.lock);
if (sshfs_req_pending(req))
req->want_reply = 0;
pthread_mutex_unlock(&sshfs.lock);
if (!req->want_reply)
continue;
}
tmperr = sftp_request_wait(req, SSH_FXP_READDIR,
SSH_FXP_NAME, &name);
if (tmperr && !done) {
err = tmperr;
if (err == MY_EOF)
err = 0;
done = 1;
}
if (!done) {
err = buf_get_entries(&name, h, filler);
buf_free(&name);
/* increase number of outstanding requests */
if (max < READDIR_MAX)
max++;
if (err)
done = 1;
}
}
}
assert(list == NULL);
return err;
}
static int sftp_readdir_sync(struct buffer *handle, fuse_cache_dirh_t h,
fuse_cache_dirfil_t filler)
{
int err;
do {
struct buffer name;
err = sftp_request(SSH_FXP_READDIR, handle, SSH_FXP_NAME, &name);
if (!err) {
err = buf_get_entries(&name, h, filler);
buf_free(&name);
}
} while (!err);
if (err == MY_EOF)
err = 0;
return err;
}
static int sshfs_getdir(const char *path, fuse_cache_dirh_t h,
fuse_cache_dirfil_t filler)
{
@@ -2026,16 +2169,11 @@ static int sshfs_getdir(const char *path, fuse_cache_dirh_t h,
if (!err) {
int err2;
buf_finish(&handle);
do {
struct buffer name;
err = sftp_request(SSH_FXP_READDIR, &handle, SSH_FXP_NAME, &name);
if (!err) {
err = buf_get_entries(&name, h, filler);
buf_free(&name);
}
} while (!err);
if (err == MY_EOF)
err = 0;
if (sshfs.sync_readdir)
err = sftp_readdir_sync(&handle, h, filler);
else
err = sftp_readdir_async(&handle, h, filler);
err2 = sftp_request(SSH_FXP_CLOSE, &handle, 0, NULL);
if (!err)
@@ -2192,7 +2330,7 @@ static int sshfs_link(const char *from, const char *to)
{
int err = -ENOSYS;
if (sshfs.ext_hardlink) {
if (sshfs.ext_hardlink && !sshfs.disable_hardlink) {
struct buffer buf;
buf_init(&buf, 0);
@@ -3115,6 +3253,7 @@ static struct fuse_cache_operations sshfs_oper = {
.oper = {
.init = sshfs_init,
.getattr = sshfs_getattr,
.access = sshfs_access,
.readlink = sshfs_readlink,
.mknod = sshfs_mknod,
.mkdir = sshfs_mkdir,
@@ -3162,6 +3301,7 @@ static void usage(const char *progname)
" -o delay_connect delay connection to server\n"
" -o sshfs_sync synchronous writes\n"
" -o no_readahead synchronous reads (no speculative readahead)\n"
" -o sync_readdir synchronous readdir\n"
" -o sshfs_debug print some debugging information\n"
" -o cache=BOOL enable caching {yes,no} (default: yes)\n"
" -o cache_timeout=N sets timeout for caches in seconds (default: 20)\n"
@@ -3190,6 +3330,7 @@ static void usage(const char *progname)
" -o sftp_server=SERV path to sftp server or subsystem (default: sftp)\n"
" -o directport=PORT directly connect to PORT bypassing ssh\n"
" -o slave communicate over stdin and stdout bypassing network\n"
" -o disable_hardlink link(2) will return with errno set to ENOSYS\n"
" -o transform_symlinks transform absolute symlinks to relative\n"
" -o follow_symlinks follow symlinks on the server\n"
" -o no_check_root don't check for existence of 'dir' on server\n"
@@ -3215,10 +3356,11 @@ static int is_ssh_opt(const char *arg)
static int sshfs_fuse_main(struct fuse_args *args)
{
sshfs.op = cache_init(&sshfs_oper);
#if FUSE_VERSION >= 26
return fuse_main(args->argc, args->argv, cache_init(&sshfs_oper), NULL);
return fuse_main(args->argc, args->argv, sshfs.op, NULL);
#else
return fuse_main(args->argc, args->argv, cache_init(&sshfs_oper));
return fuse_main(args->argc, args->argv, sshfs.op);
#endif
}
@@ -3342,7 +3484,7 @@ static void check_large_read(struct fuse_args *args)
static int read_password(void)
{
int size = getpagesize();
int max_password = 64;
int max_password = MIN(MAX_PASSWORD, size - 1);
int n;
sshfs.password = mmap(NULL, size, PROT_READ | PROT_WRITE,
@@ -3856,13 +3998,18 @@ int main(int argc, char *argv[])
if (res == -1)
perror("WARNING: failed to set FD_CLOEXEC on fuse device");
fuse = fuse_new(ch, &args, cache_init(&sshfs_oper),
sshfs.op = cache_init(&sshfs_oper);
fuse = fuse_new(ch, &args, sshfs.op,
sizeof(struct fuse_operations), NULL);
if (fuse == NULL) {
fuse_unmount(mountpoint, ch);
exit(1);
}
/*
* FIXME: trim $PATH so it doesn't contain anything inside the
* mountpoint, which would deadlock.
*/
res = ssh_connect();
if (res == -1) {
fuse_unmount(mountpoint, ch);