aboutsummaryrefslogtreecommitdiff
path: root/sshfs.c
diff options
context:
space:
mode:
authorDrDaveD <2129743+DrDaveD@users.noreply.github.com>2019-03-31 03:57:21 -0500
committerNikolaus Rath <Nikolaus@rath.org>2019-03-31 04:57:21 -0400
commit1dbc89f95909672d01e1decb349a31373ed029bc (patch)
tree00cfe2bb360c21b25db6401837a32271db9e5f3e /sshfs.c
parentd299217510330fb5fb85a28f5f1d9eae732be2db (diff)
downloadsshfs-1dbc89f95909672d01e1decb349a31373ed029bc.tar
sshfs-1dbc89f95909672d01e1decb349a31373ed029bc.tar.gz
sshfs-1dbc89f95909672d01e1decb349a31373ed029bc.tar.bz2
sshfs-1dbc89f95909672d01e1decb349a31373ed029bc.zip
allow /dev/fd/N as a mountpoint (#166)
Diffstat (limited to 'sshfs.c')
-rw-r--r--sshfs.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sshfs.c b/sshfs.c
index 1016b97..6919515 100644
--- a/sshfs.c
+++ b/sshfs.c
@@ -3471,7 +3471,19 @@ static int sshfs_opt_proc(void *data, const char *arg, int key,
}
}
#else
- sshfs.mountpoint = realpath(arg, NULL);
+ int fd, len;
+ if (sscanf(arg, "/dev/fd/%u%n", &fd, &len) == 1 &&
+ len == strlen(arg)) {
+ /*
+ * Allow /dev/fd/N unchanged; it can be
+ * use for pre-mounting a generic fuse
+ * mountpoint to later be completely
+ * unprivileged with libfuse >= 3.3.0.
+ */
+ sshfs.mountpoint = arg;
+ } else {
+ sshfs.mountpoint = realpath(arg, NULL);
+ }
#endif
if (!sshfs.mountpoint) {
fprintf(stderr, "sshfs: bad mount point `%s': %s\n",