Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8059e2ce63 | |||
| 9e01ffd161 | |||
| de0504e45b | |||
| 6625146af9 | |||
| 76ffb37444 | |||
| a96e521474 | |||
| 11df8874dc |
@@ -13,18 +13,21 @@ Miklos Szeredi <miklos@szeredi.hu> (until 12/2015)
|
||||
Contributors (autogenerated list)
|
||||
---------------------------------
|
||||
|
||||
|
||||
Alan Jenkins <alan.christopher.jenkins@gmail.com>
|
||||
Alexander Neumann <alexander@bumpern.de>
|
||||
Anatol Pomozov <anatol.pomozov@gmail.com>
|
||||
Benjamin Fleischer <fleiben@gmail.com>
|
||||
Berserker <berserker.troll@yandex.com>
|
||||
Bill Zissimopoulos <billziss@navimatics.com>
|
||||
bjoe2k4 <bjoe2k4@users.noreply.github.com>
|
||||
Brandon Carter <b-carter@users.noreply.github.com>
|
||||
Chris Wolfe <cwolfe@chromium.org>
|
||||
Clayton G. Hobbs <clay@lakeserv.net>
|
||||
Daniel Lublin <daniel@lublin.se>
|
||||
Dominique Martinet <asmadeus@codewreck.org>
|
||||
DrDaveD <2129743+DrDaveD@users.noreply.github.com>
|
||||
Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
gala <gala132@users.noreply.github.com>
|
||||
Galen Getsov <4815620+ggetsov@users.noreply.github.com>
|
||||
George Vlahavas <vlahavas@gmail.com>
|
||||
@@ -35,6 +38,8 @@ jeg139 <54814784+jeg139@users.noreply.github.com>
|
||||
Josh Triplett <josh@joshtriplett.org>
|
||||
Julio Merino <jmmv@google.com>
|
||||
Julio Merino <jmmv@meroh.net>
|
||||
Junichi Uekawa <dancerj@gmail.com>
|
||||
Junichi Uekawa <dancer@netfort.gr.jp>
|
||||
kalvdans <github@kalvdans.no-ip.org>
|
||||
Michael Forney <mforney@mforney.org>
|
||||
Mike Kelly <mike@pair.com>
|
||||
@@ -51,6 +56,7 @@ Rian Hunter <rian@alum.mit.edu>
|
||||
Rian Hunter <rianhunter@users.noreply.github.com>
|
||||
Samuel Murray <samuel.murray@outlook.com>
|
||||
S. D. Cloudt <s.d.cloudt@student.tue.nl>
|
||||
Simon Arlott <70171+nomis@users.noreply.github.com>
|
||||
smheidrich <smheidrich@weltenfunktion.de>
|
||||
sunwire <50745572+sunwire@users.noreply.github.com>
|
||||
Tim Harder <radhermit@gmail.com>
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
Release 3.7.1 (2020-11-09)
|
||||
--------------------------
|
||||
|
||||
* Minor bugfixes.
|
||||
|
||||
|
||||
Release 3.7.0 (2020-01-03)
|
||||
--------------------------
|
||||
|
||||
|
||||
@@ -98,11 +98,3 @@ https://lists.sourceforge.net/lists/listinfo/fuse-sshfs).
|
||||
|
||||
Please report any bugs on the GitHub issue tracker at
|
||||
https://github.com/libfuse/libfuse/issues.
|
||||
|
||||
|
||||
Professional Support
|
||||
--------------------
|
||||
|
||||
Professional support is offered via `Rath Consulting`_.
|
||||
|
||||
.. _`Rath Consulting`: http://www.rath-consulting.biz
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
project('sshfs', 'c', version: '3.7.0',
|
||||
project('sshfs', 'c', version: '3.7.1',
|
||||
meson_version: '>= 0.40',
|
||||
default_options: [ 'buildtype=debugoptimized' ])
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ struct sshfs {
|
||||
int foreground;
|
||||
int reconnect;
|
||||
int delay_connect;
|
||||
int slave;
|
||||
int passive;
|
||||
char *host;
|
||||
char *base_path;
|
||||
GHashTable *reqtab;
|
||||
@@ -351,7 +351,7 @@ struct sshfs {
|
||||
int max_conns;
|
||||
struct conn *conns;
|
||||
int ptyfd;
|
||||
int ptyslavefd;
|
||||
int ptypassivefd;
|
||||
int connvers;
|
||||
int server_version;
|
||||
unsigned remote_uid;
|
||||
@@ -497,7 +497,8 @@ static struct fuse_opt sshfs_opts[] = {
|
||||
SSHFS_OPT("no_check_root", no_check_root, 1),
|
||||
SSHFS_OPT("password_stdin", password_stdin, 1),
|
||||
SSHFS_OPT("delay_connect", delay_connect, 1),
|
||||
SSHFS_OPT("slave", slave, 1),
|
||||
SSHFS_OPT("slave", passive, 1),
|
||||
SSHFS_OPT("passive", passive, 1),
|
||||
SSHFS_OPT("disable_hardlink", disable_hardlink, 1),
|
||||
SSHFS_OPT("dir_cache=yes", dir_cache, 1),
|
||||
SSHFS_OPT("dir_cache=no", dir_cache, 0),
|
||||
@@ -1068,6 +1069,7 @@ static struct conn* get_conn(const struct sshfs_file *sf,
|
||||
const char *path)
|
||||
{
|
||||
struct conntab_entry *ce;
|
||||
int i;
|
||||
|
||||
if (sshfs.max_conns == 1)
|
||||
return &sshfs.conns[0];
|
||||
@@ -1089,7 +1091,7 @@ static struct conn* get_conn(const struct sshfs_file *sf,
|
||||
|
||||
int best_index = 0;
|
||||
uint64_t best_score = ~0ULL; /* smaller is better */
|
||||
for (int i = 0; i < sshfs.max_conns; i++) {
|
||||
for (i = 0; i < sshfs.max_conns; i++) {
|
||||
uint64_t score = ((uint64_t) sshfs.conns[i].req_count << 43) +
|
||||
((uint64_t) sshfs.conns[i].dir_count << 22) +
|
||||
((uint64_t) sshfs.conns[i].file_count << 1) +
|
||||
@@ -1146,8 +1148,8 @@ static int start_ssh(struct conn *conn)
|
||||
if (sshfs.ptyfd == -1)
|
||||
return -1;
|
||||
|
||||
sshfs.ptyslavefd = open(ptyname, O_RDWR | O_NOCTTY);
|
||||
if (sshfs.ptyslavefd == -1)
|
||||
sshfs.ptypassivefd = open(ptyname, O_RDWR | O_NOCTTY);
|
||||
if (sshfs.ptypassivefd == -1)
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1189,6 +1191,12 @@ static int start_ssh(struct conn *conn)
|
||||
_exit(0);
|
||||
}
|
||||
chdir("/");
|
||||
/*
|
||||
* Avoid processes hanging trying to stat() OLDPWD if it is in
|
||||
* the mount point. This can be removed if sshfs opens the
|
||||
* mount point after establishing the ssh connection.
|
||||
*/
|
||||
unsetenv("OLDPWD");
|
||||
|
||||
if (sshfs.password_stdin) {
|
||||
int sfd;
|
||||
@@ -1200,7 +1208,7 @@ static int start_ssh(struct conn *conn)
|
||||
_exit(1);
|
||||
}
|
||||
close(sfd);
|
||||
close(sshfs.ptyslavefd);
|
||||
close(sshfs.ptypassivefd);
|
||||
close(sshfs.ptyfd);
|
||||
}
|
||||
|
||||
@@ -1224,7 +1232,7 @@ static int start_ssh(struct conn *conn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int connect_slave(struct conn *conn)
|
||||
static int connect_passive(struct conn *conn)
|
||||
{
|
||||
conn->rfd = STDIN_FILENO;
|
||||
conn->wfd = STDOUT_FILENO;
|
||||
@@ -1531,9 +1539,9 @@ static void close_conn(struct conn *conn)
|
||||
close(sshfs.ptyfd);
|
||||
sshfs.ptyfd = -1;
|
||||
}
|
||||
if (sshfs.ptyslavefd != -1) {
|
||||
close(sshfs.ptyslavefd);
|
||||
sshfs.ptyslavefd = -1;
|
||||
if (sshfs.ptypassivefd != -1) {
|
||||
close(sshfs.ptypassivefd);
|
||||
sshfs.ptypassivefd = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1824,8 +1832,8 @@ static int connect_remote(struct conn *conn)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (sshfs.slave)
|
||||
err = connect_slave(conn);
|
||||
if (sshfs.passive)
|
||||
err = connect_passive(conn);
|
||||
else if (sshfs.directport)
|
||||
err = connect_to(conn, sshfs.host, sshfs.directport);
|
||||
else
|
||||
@@ -3629,7 +3637,7 @@ static void usage(const char *progname)
|
||||
" -o ssh_protocol=N ssh protocol to use (default: 2)\n"
|
||||
" -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 passive 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"
|
||||
@@ -4182,9 +4190,9 @@ int main(int argc, char *argv[])
|
||||
sshfs.show_version = 0;
|
||||
sshfs.singlethread = 0;
|
||||
sshfs.foreground = 0;
|
||||
sshfs.ptyslavefd = -1;
|
||||
sshfs.ptypassivefd = -1;
|
||||
sshfs.delay_connect = 0;
|
||||
sshfs.slave = 0;
|
||||
sshfs.passive = 0;
|
||||
sshfs.detect_uid = 0;
|
||||
if (strcmp(IDMAP_DEFAULT, "none") == 0) {
|
||||
sshfs.idmap = IDMAP_NONE;
|
||||
@@ -4250,12 +4258,12 @@ int main(int argc, char *argv[])
|
||||
DEBUG("SSHFS version %s\n", PACKAGE_VERSION);
|
||||
|
||||
/* Force sshfs to the foreground when using stdin+stdout */
|
||||
if (sshfs.slave)
|
||||
if (sshfs.passive)
|
||||
sshfs.foreground = 1;
|
||||
|
||||
|
||||
if (sshfs.slave && sshfs.password_stdin) {
|
||||
fprintf(stderr, "the password_stdin and slave options cannot both be specified\n");
|
||||
if (sshfs.passive && sshfs.password_stdin) {
|
||||
fprintf(stderr, "the password_stdin and passive options cannot both be specified\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -4287,8 +4295,8 @@ int main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sshfs.slave) {
|
||||
fprintf(stderr, "slave option cannot be specified with parallel connections\n");
|
||||
if (sshfs.passive) {
|
||||
fprintf(stderr, "passive option cannot be specified with parallel connections\n");
|
||||
exit(1);
|
||||
}
|
||||
} else if (sshfs.max_conns <= 0) {
|
||||
|
||||
@@ -37,7 +37,7 @@ credentials that were used to connect to the server. If this is undesired, local
|
||||
permission checking can be enabled with ``-o default_permissions``.
|
||||
|
||||
By default, only the mounting user will be able to access the filesystem. Access for other
|
||||
users can be enabled by passing ``-o allow_others``. In this case you most likely also
|
||||
users can be enabled by passing ``-o allow_other``. In this case you most likely also
|
||||
want to use ``-o default_permissions``.
|
||||
|
||||
It is recommended to run SSHFS as regular user (not as root). For this to work the
|
||||
@@ -156,8 +156,11 @@ Options
|
||||
-o directport=PORT
|
||||
directly connect to PORT bypassing ssh
|
||||
|
||||
-o slave
|
||||
communicate over stdin and stdout bypassing network
|
||||
-o passive
|
||||
communicate over stdin and stdout bypassing network. Useful for
|
||||
mounting local filesystem on the remote side. An example using
|
||||
dpipe command would be ``dpipe /usr/lib/openssh/sftp-server = ssh
|
||||
RemoteHostname sshfs :/directory/to/be/shared ~/mnt/src -o passive``
|
||||
|
||||
-o disable_hardlink
|
||||
With this option set, attempts to call `link(2)` will fail with
|
||||
@@ -223,8 +226,8 @@ Options
|
||||
to use. Each connection is established with a separate SSH process.
|
||||
The primary purpose of this feature is to improve the responsiveness of the
|
||||
file system during large file transfers. When using more than once
|
||||
connection, the *password_stdin* and *slave* options can not be
|
||||
used, and the *buflimit* workaround is not supported/
|
||||
connection, the *password_stdin* and *passive* options can not be
|
||||
used, and the *buflimit* workaround is not supported.
|
||||
|
||||
In addition, SSHFS accepts several options common to all FUSE file
|
||||
systems. These are described in the `mount.fuse` manpage (look
|
||||
|
||||
Reference in New Issue
Block a user