Hello community,
here is the log from the commit of package sshfs for openSUSE:Factory checked in at 2019-04-18 09:56:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sshfs (Old)
and /work/SRC/openSUSE:Factory/.sshfs.new.17052 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sshfs"
Thu Apr 18 09:56:41 2019 rev:32 rq:695102 version:3.5.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/sshfs/sshfs.changes 2019-03-20 13:19:20.185343189 +0100
+++ /work/SRC/openSUSE:Factory/.sshfs.new.17052/sshfs.changes 2019-04-18 09:56:43.825352837 +0200
@@ -1,0 +2,8 @@
+Wed Apr 17 07:52:42 UTC 2019 - Paolo Stivanin
+
+- Update to 3.5.2
+ * Fixed "-o idmap=user" to map both UID and GID on all OSs.
+ * Fixed improper handling of sequential spaces spaces in
+ "ssh_command" option
+
+-------------------------------------------------------------------
Old:
----
sshfs-3.5.1.tar.xz
sshfs-3.5.1.tar.xz.asc
New:
----
sshfs-3.5.2.tar.xz
sshfs-3.5.2.tar.xz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sshfs.spec ++++++
--- /var/tmp/diff_new_pack.2cRPAk/_old 2019-04-18 09:56:44.593353321 +0200
+++ /var/tmp/diff_new_pack.2cRPAk/_new 2019-04-18 09:56:44.597353323 +0200
@@ -12,12 +12,12 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via https://bugs.opensuse.org/
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: sshfs
-Version: 3.5.1
+Version: 3.5.2
Release: 0
Summary: Filesystem client based on SSH file transfer protocol
License: GPL-2.0-or-later
++++++ sshfs-3.5.1.tar.xz -> sshfs-3.5.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sshfs-3.5.1/AUTHORS new/sshfs-3.5.2/AUTHORS
--- old/sshfs-3.5.1/AUTHORS 2018-12-22 15:33:52.000000000 +0100
+++ new/sshfs-3.5.2/AUTHORS 2019-04-13 10:25:45.000000000 +0200
@@ -13,7 +13,6 @@
Contributors (autogenerated list)
---------------------------------
-
Alan Jenkins
Alexander Neumann
Anatol Pomozov
@@ -22,7 +21,9 @@
Bill Zissimopoulos
Brandon Carter
Chris Wolfe
+Clayton G. Hobbs
Daniel Lublin
+DrDaveD <2129743+DrDaveD@users.noreply.github.com>
gala
George Vlahavas
G.raud Meyer
@@ -34,6 +35,7 @@
Mike Kelly
Miklos Szeredi
Miklos Szeredi
+mssalvatore
Nikolaus Rath
Percy Jahn
Qais Patankar
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sshfs-3.5.1/ChangeLog.rst new/sshfs-3.5.2/ChangeLog.rst
--- old/sshfs-3.5.1/ChangeLog.rst 2018-12-22 15:33:52.000000000 +0100
+++ new/sshfs-3.5.2/ChangeLog.rst 2019-04-13 10:25:45.000000000 +0200
@@ -1,3 +1,9 @@
+Release 3.5.2 (2019-04-13)
+--------------------------
+
+* Fixed "-o idmap=user" to map both UID and GID on all OSs.
+* Fixed improper handling of sequential spaces spaces in "ssh_command" option
+
Release 3.5.1 (2018-12-22)
--------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sshfs-3.5.1/meson.build new/sshfs-3.5.2/meson.build
--- old/sshfs-3.5.1/meson.build 2018-12-22 15:33:52.000000000 +0100
+++ new/sshfs-3.5.2/meson.build 2019-04-13 10:25:45.000000000 +0200
@@ -1,5 +1,5 @@
-project('sshfs', 'c', version: '3.5.1',
- meson_version: '>= 0.38',
+project('sshfs', 'c', version: '3.5.2',
+ meson_version: '>= 0.40',
default_options: [ 'buildtype=debugoptimized' ])
add_global_arguments('-D_REENTRANT', '-DHAVE_CONFIG_H',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sshfs-3.5.1/sshfs.c new/sshfs-3.5.2/sshfs.c
--- old/sshfs-3.5.1/sshfs.c 2018-12-22 15:33:52.000000000 +0100
+++ new/sshfs-3.5.2/sshfs.c 2019-04-13 10:25:45.000000000 +0200
@@ -264,10 +264,8 @@
int server_version;
unsigned remote_uid;
unsigned local_uid;
-#ifdef __APPLE__
unsigned remote_gid;
unsigned local_gid;
-#endif
int remote_uid_detected;
unsigned blksize;
char *progname;
@@ -789,17 +787,12 @@
}
}
-#ifdef __APPLE__
if (sshfs.remote_uid_detected) {
if (uid == sshfs.remote_uid)
uid = sshfs.local_uid;
if (gid == sshfs.remote_gid)
gid = sshfs.local_gid;
}
-#else /* !__APPLE__ */
- if (sshfs.remote_uid_detected && uid == sshfs.remote_uid)
- uid = sshfs.local_uid;
-#endif /* __APPLE__ */
if (sshfs.idmap == IDMAP_FILE && sshfs.uid_map)
if (translate_id(&uid, sshfs.uid_map) == -1)
return -EPERM;
@@ -1296,9 +1289,10 @@
pthread_mutex_unlock(&sshfs.lock);
}
-static int clean_req(void *key_, struct request *req)
+static int clean_req(void *key_, struct request *req, gpointer user_data_)
{
(void) key_;
+ (void) user_data_;
req->error = -EIO;
if (req->want_reply)
@@ -1600,10 +1594,8 @@
sshfs.remote_uid = stbuf.st_uid;
sshfs.local_uid = getuid();
-#ifdef __APPLE__
sshfs.remote_gid = stbuf.st_gid;
sshfs.local_gid = getgid();
-#endif
sshfs.remote_uid_detected = 1;
DEBUG("remote_uid = %i\n", sshfs.remote_uid);
@@ -2424,17 +2416,12 @@
return -EIO;
}
-#ifdef __APPLE__
if (sshfs.remote_uid_detected) {
if (uid == sshfs.local_uid)
uid = sshfs.remote_uid;
if (gid == sshfs.local_gid)
gid = sshfs.remote_gid;
}
-#else /* !__APPLE__ */
- if (sshfs.remote_uid_detected && uid == sshfs.local_uid)
- uid = sshfs.remote_uid;
-#endif /* __APPLE__ */
if (sshfs.idmap == IDMAP_FILE && sshfs.r_uid_map)
if(translate_id(&uid, sshfs.r_uid_map) == -1)
return -EPERM;
@@ -3484,7 +3471,19 @@
}
}
#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",
@@ -3597,40 +3596,60 @@
return 0;
}
-static void set_ssh_command(void)
+// Behaves similarly to strtok(), but allows for the ' ' delimiter to be escaped
+// by '\ '.
+static char *tokenize_on_space(char *str)
{
- char *s;
- char *d;
- int i = 0;
- int end = 0;
+ static char *pos = NULL;
+ char *start = NULL;
- d = sshfs.ssh_command;
- s = sshfs.ssh_command;
- while (!end) {
- switch (*s) {
- case '\0':
- end = 1;
- case ' ':
- *d = '\0';
- if (i == 0) {
- replace_arg(&sshfs.ssh_args.argv[0],
- sshfs.ssh_command);
- } else {
- if (fuse_opt_insert_arg(&sshfs.ssh_args, i,
- sshfs.ssh_command) == -1)
- _exit(1);
- }
- i++;
- d = sshfs.ssh_command;
+ if (str)
+ pos = str;
+
+ if (!pos)
+ return NULL;
+
+ // trim any leading spaces
+ while (*pos == ' ')
+ pos++;
+
+ start = pos;
+
+ while (pos && *pos != '\0') {
+ // break on space, but not on '\ '
+ if (*pos == ' ' && *(pos - 1) != '\\') {
break;
+ }
+ pos++;
+ }
- case '\\':
- if (s[1])
- s++;
- default:
- *d++ = *s;
+ if (*pos == '\0') {
+ pos = NULL;
+ }
+ else {
+ *pos = '\0';
+ pos++;
+ }
+
+ return start;
+}
+
+static void set_ssh_command(void)
+{
+ char *token = NULL;
+ int i = 0;
+
+ token = tokenize_on_space(sshfs.ssh_command);
+ while (token != NULL) {
+ if (i == 0) {
+ replace_arg(&sshfs.ssh_args.argv[0], token);
+ } else {
+ if (fuse_opt_insert_arg(&sshfs.ssh_args, i, token) == -1)
+ _exit(1);
}
- s++;
+ i++;
+
+ token = tokenize_on_space(NULL);
}
}