Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

[ Reason ]
While it's a new upstream release, it only contains a bugfix [1] and
correcting spelling mistakes.
The actual change is in lib/fuse.c and very small [2]. Other changes
are for the example and tests to keep those in sync.

[ Impact ]
Would provide a fixed and consistent working of fuse3.

[ Tests ]
Rebuilt all reverse dependencies and those are fine.

[ Risks ]
Contains an udeb and currently I don't know how to test it.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

Thanks for considering,
Laszlo/GCS
[1] 
https://github.com/libfuse/libfuse/commit/bdd2d4110fbc6d2059eb699efad2cca4a7eacccb
[2] 
https://github.com/libfuse/libfuse/commit/bdd2d4110fbc6d2059eb699efad2cca4a7eacccb#diff-0a915c0d19eddb55a580a696b995dab0574ae0f7f04f9136c60d2f3c8a90ac39
diff -Nru --exclude html fuse3-3.10.2/AUTHORS fuse3-3.10.3/AUTHORS
--- fuse3-3.10.2/AUTHORS	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/AUTHORS	2021-04-12 12:18:08.000000000 +0200
@@ -82,6 +82,7 @@
 HazelFZ <xfzf...@gmail.com>
 Heiko Becker <heire...@exherbo.org>
 Hendrik Brueckner <brueck...@linux.vnet.ibm.com>
+Hookey <hoo...@users.noreply.github.com>
 human <hu...@neet.fi>
 Ikey Doherty <michael.i.dohe...@intel.com>
 itsdeepak <deepak...@samsung.com>
@@ -163,6 +164,7 @@
 Tej Chajed <tcha...@mit.edu>
 tenzap <46226844+ten...@users.noreply.github.com>
 therealnewo...@gmail.com <therealnewo...@gmail.com>
+Tobias Nießen <tnies...@users.noreply.github.com>
 Tomasz Kulasek <34129113+tkula...@users.noreply.github.com>
 Tom Callaway <s...@fedoraproject.org>
 Tom Callaway <spo...@gmail.com>
diff -Nru --exclude html fuse3-3.10.2/ChangeLog.rst fuse3-3.10.3/ChangeLog.rst
--- fuse3-3.10.2/ChangeLog.rst	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/ChangeLog.rst	2021-04-12 12:18:08.000000000 +0200
@@ -1,3 +1,8 @@
+libfuse 3.10.3 (2021-04-12)
+===========================
+
+* Fix returning d_ino and d_type from readdir(3) in non-plus mode
+  
 libfuse 3.10.2 (2021-02-05)
 ===========================
 
diff -Nru --exclude html fuse3-3.10.2/debian/changelog fuse3-3.10.3/debian/changelog
--- fuse3-3.10.2/debian/changelog	2021-02-24 23:28:30.000000000 +0100
+++ fuse3-3.10.3/debian/changelog	2021-04-21 14:34:39.000000000 +0200
@@ -1,3 +1,12 @@
+fuse3 (3.10.3-1) unstable; urgency=medium
+
+  * New upstream release:
+    - fix returning d_ino and d_type by readdir(3) in non-plus mode,
+    - remove unused fuse_worker bufsize,
+    - fix typos.
+
+ -- Laszlo Boszormenyi (GCS) <g...@debian.org>  Wed, 21 Apr 2021 14:34:39 +0200
+
 fuse3 (3.10.2-2) unstable; urgency=medium
 
   * Mark libfuse3-dev as Multi-Arch same.
diff -Nru --exclude html fuse3-3.10.2/example/passthrough.c fuse3-3.10.3/example/passthrough.c
--- fuse3-3.10.2/example/passthrough.c	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/example/passthrough.c	2021-04-12 12:18:08.000000000 +0200
@@ -55,6 +55,8 @@
 
 #include "passthrough_helpers.h"
 
+static int fill_dir_plus = 0;
+
 static void *xmp_init(struct fuse_conn_info *conn,
 		      struct fuse_config *cfg)
 {
@@ -132,7 +134,7 @@
 		memset(&st, 0, sizeof(st));
 		st.st_ino = de->d_ino;
 		st.st_mode = de->d_type << 12;
-		if (filler(buf, de->d_name, &st, 0, FUSE_FILL_DIR_PLUS))
+		if (filler(buf, de->d_name, &st, 0, fill_dir_plus))
 			break;
 	}
 
@@ -551,6 +553,18 @@
 
 int main(int argc, char *argv[])
 {
+	enum { MAX_ARGS = 10 };
+	int i,new_argc;
+	char *new_argv[MAX_ARGS];
+
 	umask(0);
-	return fuse_main(argc, argv, &xmp_oper, NULL);
+			/* Process the "--plus" option apart */
+	for (i=0, new_argc=0; (i<argc) && (new_argc<MAX_ARGS); i++) {
+		if (!strcmp(argv[i], "--plus")) {
+			fill_dir_plus = FUSE_FILL_DIR_PLUS;
+		} else {
+			new_argv[new_argc++] = argv[i];
+		}
+	}
+	return fuse_main(new_argc, new_argv, &xmp_oper, NULL);
 }
diff -Nru --exclude html fuse3-3.10.2/include/fuse.h fuse3-3.10.3/include/fuse.h
--- fuse3-3.10.2/include/fuse.h	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/include/fuse.h	2021-04-12 12:18:08.000000000 +0200
@@ -361,14 +361,14 @@
 
 	/** Change the permission bits of a file
 	 *
-	 * `fi` will always be NULL if the file is not currenlty open, but
+	 * `fi` will always be NULL if the file is not currently open, but
 	 * may also be NULL if the file is open.
 	 */
 	int (*chmod) (const char *, mode_t, struct fuse_file_info *fi);
 
 	/** Change the owner and group of a file
 	 *
-	 * `fi` will always be NULL if the file is not currenlty open, but
+	 * `fi` will always be NULL if the file is not currently open, but
 	 * may also be NULL if the file is open.
 	 *
 	 * Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is
@@ -378,7 +378,7 @@
 
 	/** Change the size of a file
 	 *
-	 * `fi` will always be NULL if the file is not currenlty open, but
+	 * `fi` will always be NULL if the file is not currently open, but
 	 * may also be NULL if the file is open.
 	 *
 	 * Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is
@@ -648,7 +648,7 @@
 	 * This supersedes the old utime() interface.  New applications
 	 * should use this.
 	 *
-	 * `fi` will always be NULL if the file is not currenlty open, but
+	 * `fi` will always be NULL if the file is not currently open, but
 	 * may also be NULL if the file is open.
 	 *
 	 * See the utimensat(2) man page for details.
@@ -856,7 +856,7 @@
  *   4: Mounting failed
  *   5: Failed to daemonize (detach from session)
  *   6: Failed to set up signal handlers
- *   7: An error occured during the life of the file system
+ *   7: An error occurred during the life of the file system
  *
  * @param argc the argument counter passed to the main() function
  * @param argv the argument vector passed to the main() function
diff -Nru --exclude html fuse3-3.10.2/include/fuse_lowlevel.h fuse3-3.10.3/include/fuse_lowlevel.h
--- fuse3-3.10.2/include/fuse_lowlevel.h	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/include/fuse_lowlevel.h	2021-04-12 12:18:08.000000000 +0200
@@ -1253,7 +1253,7 @@
  * Possible requests:
  *   all except forget
  *
- * Whereever possible, error codes should be chosen from the list of
+ * Wherever possible, error codes should be chosen from the list of
  * documented error conditions in the corresponding system calls
  * manpage.
  *
diff -Nru --exclude html fuse3-3.10.2/lib/fuse.c fuse3-3.10.3/lib/fuse.c
--- fuse3-3.10.2/lib/fuse.c	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/lib/fuse.c	2021-04-12 12:18:08.000000000 +0200
@@ -3578,6 +3578,11 @@
 		}
 	} else {
 		e.attr.st_ino = FUSE_UNKNOWN_INO;
+		if (statp) {
+			e.attr.st_mode = statp->st_mode;
+			if (f->conf.use_ino)
+				e.attr.st_ino = statp->st_ino;
+		}
 		if (!f->conf.use_ino && f->conf.readdir_ino) {
 			e.attr.st_ino = (ino_t)
 				lookup_nodeid(f, dh->nodeid, name);
diff -Nru --exclude html fuse3-3.10.2/lib/fuse_loop_mt.c fuse3-3.10.3/lib/fuse_loop_mt.c
--- fuse3-3.10.2/lib/fuse_loop_mt.c	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/lib/fuse_loop_mt.c	2021-04-12 12:18:08.000000000 +0200
@@ -32,7 +32,6 @@
 	struct fuse_worker *prev;
 	struct fuse_worker *next;
 	pthread_t thread_id;
-	size_t bufsize;
 
 	// We need to include fuse_buf so that we can properly free
 	// it when a thread is terminated by pthread_cancel().
diff -Nru --exclude html fuse3-3.10.2/meson.build fuse3-3.10.3/meson.build
--- fuse3-3.10.2/meson.build	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/meson.build	2021-04-12 12:18:08.000000000 +0200
@@ -1,4 +1,4 @@
-project('libfuse3', ['c'], version: '3.10.2',
+project('libfuse3', ['c'], version: '3.10.3',
         meson_version: '>= 0.42',
         default_options: [ 'buildtype=debugoptimized' ])
 
diff -Nru --exclude html fuse3-3.10.2/test/readdir_inode.c fuse3-3.10.3/test/readdir_inode.c
--- fuse3-3.10.2/test/readdir_inode.c	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/test/readdir_inode.c	2021-04-12 12:18:08.000000000 +0200
@@ -1,7 +1,8 @@
 /*
- * Prints each directory entry and its inode as returned by 'readdir'.
+ * Prints each directory entry, its inode and d_type as returned by 'readdir'.
  * Skips '.' and '..' because readdir is not required to return them and
- * some of our examples don't.
+ * some of our examples don't. However if they are returned, their d_type
+ * should be valid.
  */
 
 #include <stdio.h>
@@ -30,7 +31,18 @@
     dent = readdir(dirp);
     while (dent != NULL) {
         if (strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0) {
-            printf("%llu %s\n", (unsigned long long)dent->d_ino, dent->d_name);
+            printf("%llu %d %s\n", (unsigned long long)dent->d_ino,
+			(int)dent->d_type, dent->d_name);
+            if ((long long)dent->d_ino < 0)
+               fprintf(stderr,"%s : bad d_ino %llu\n",
+                        dent->d_name, (unsigned long long)dent->d_ino);
+            if ((dent->d_type < 1) || (dent->d_type > 15))
+               fprintf(stderr,"%s : bad d_type %d\n",
+                        dent->d_name, (int)dent->d_type);
+        } else {
+            if (dent->d_type != DT_DIR)
+               fprintf(stderr,"%s : bad d_type %d\n",
+                        dent->d_name, (int)dent->d_type);
         }
         dent = readdir(dirp);
     }
diff -Nru --exclude html fuse3-3.10.2/test/test_examples.py fuse3-3.10.3/test/test_examples.py
--- fuse3-3.10.2/test/test_examples.py	2021-02-05 10:07:28.000000000 +0100
+++ fuse3-3.10.3/test/test_examples.py	2021-04-12 12:18:08.000000000 +0200
@@ -109,7 +109,8 @@
         umount(mount_process, mnt_dir)
 
 @pytest.mark.parametrize("writeback", (False, True))
-@pytest.mark.parametrize("name", ('passthrough', 'passthrough_fh', 'passthrough_ll'))
+@pytest.mark.parametrize("name", ('passthrough', 'passthrough_plus',
+                           'passthrough_fh', 'passthrough_ll'))
 @pytest.mark.parametrize("debug", (False, True))
 def test_passthrough(short_tmpdir, name, debug, output_checker, writeback):
     # Avoid false positives from libfuse debug messages
@@ -124,9 +125,14 @@
     mnt_dir = str(short_tmpdir.mkdir('mnt'))
     src_dir = str(short_tmpdir.mkdir('src'))
 
-    cmdline = base_cmdline + \
-              [ pjoin(basename, 'example', name),
-                '-f', mnt_dir ]
+    if name == 'passthrough_plus':
+        cmdline = base_cmdline + \
+                  [ pjoin(basename, 'example', 'passthrough'),
+                    '--plus', '-f', mnt_dir ]
+    else:
+        cmdline = base_cmdline + \
+                  [ pjoin(basename, 'example', name),
+                    '-f', mnt_dir ]
     if debug:
         cmdline.append('-d')
 

Reply via email to