printf("\tFUSE_CAP_EXPLICIT_INVAL_DATA\n");
if(conn->capable & FUSE_CAP_EXPIRE_ONLY)
printf("\tFUSE_CAP_EXPIRE_ONLY\n");
+ if(conn->capable & FUSE_CAP_SETXATTR_EXT)
+ printf("\tFUSE_CAP_SETXATTR_EXT\n");
+ if(conn->capable & FUSE_CAP_HANDLE_KILLPRIV)
+ printf("\tFUSE_CAP_HANDLE_KILLPRIV\n");
+ if(conn->capable & FUSE_CAP_HANDLE_KILLPRIV_V2)
+ printf("\tFUSE_CAP_HANDLE_KILLPRIV_V2\n");
+ if(conn->capable & FUSE_CAP_DIRECT_IO_ALLOW_MMAP)
+ printf("\tFUSE_CAP_DIRECT_IO_ALLOW_MMAP\n");
fuse_session_exit(se);
}
*/
#define FUSE_CAP_HANDLE_KILLPRIV (1 << 20)
+/**
+ * Indicates that the filesystem is responsible for unsetting
+ * setuid and setgid bit and additionally cap (stored as xattr) when a
+ * file is written, truncated, or its owner is changed.
+ * Upon write/truncate suid/sgid is only killed if caller
+ * does not have CAP_FSETID. Additionally upon
+ * write/truncate sgid is killed only if file has group
+ * execute permission. (Same as Linux VFS behavior).
+ * KILLPRIV_V2 requires handling of
+ * - FUSE_OPEN_KILL_SUIDGID (set in struct fuse_create_in::open_flags)
+ * - FATTR_KILL_SUIDGID (set in struct fuse_setattr_in::valid)
+ * - FUSE_WRITE_KILL_SUIDGID (set in struct fuse_write_in::write_flags)
+ *
+ * This feature is disabled by default.
+ */
+#define FUSE_CAP_HANDLE_KILLPRIV_V2 (1 << 21)
+
/**
* Indicates that the kernel supports caching symlinks in its page cache.
*
se->conn.capable |= FUSE_CAP_POSIX_ACL;
if (inargflags & FUSE_HANDLE_KILLPRIV)
se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV;
+ if (inargflags & FUSE_HANDLE_KILLPRIV_V2)
+ se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV_V2;
if (inargflags & FUSE_CACHE_SYMLINKS)
se->conn.capable |= FUSE_CAP_CACHE_SYMLINKS;
if (inargflags & FUSE_NO_OPENDIR_SUPPORT)
outargflags |= FUSE_POSIX_ACL;
if (se->conn.want & FUSE_CAP_HANDLE_KILLPRIV)
outargflags |= FUSE_HANDLE_KILLPRIV;
+ if (se->conn.want & FUSE_CAP_HANDLE_KILLPRIV_V2)
+ outargflags |= FUSE_HANDLE_KILLPRIV_V2;
if (se->conn.want & FUSE_CAP_CACHE_SYMLINKS)
outargflags |= FUSE_CACHE_SYMLINKS;
if (se->conn.want & FUSE_CAP_EXPLICIT_INVAL_DATA)