FUSE extends macOS by adding support for user space file systems
OTHER License
Bot releases are visible (Hide)
Published by bfleischer over 5 years ago
Starting with this release, FUSE for macOS will be notarized by Apple and the release disk image signed, in addition to the installer itself.
The hardened runtime is enabled for all binaries shipping with FUSE for macOS. Please make sure to disable third party library validation when enabling the hardened runtime for your file system binary, if you are using any FUSE libraries or frameworks.
Add support for mount option noautonotify
. If the mount option noautonotify
is present, FUSE will not post file system change notifications automatically, in case remote changes are detected.
Invalidate file attributes after renaming files. An invalidate is required because the file's atime
changes due to the rename. Without invalidating, stat(2)
calls might return a wrong atime
. For details see osxfuse/osxfuse#568 and osxfuse/kext#12.
Drop Bridge Support for the FUSE framework.
Published by bfleischer almost 6 years ago
Add support for reusing a vnode after renaming the corresponding file system object by updating the original vnode's parent and name after the rename is completed successfully. For details see osxfuse/osxfuse#466, osxfuse/osxfuse#553, and osxfuse/kext#11.
Work around a bug in ls
when the volicon module is used. ls
prints garbage data in case the extended attribute com.apple.FinderInfo
is associated with the volume's root directory.
Fix bug in the build script to generate an autoinstaller rule for macOS 10.14
Published by bfleischer over 6 years ago
Add support for macOS 10.14 Beta 2
Minor code cleanup of kernel extension
Published by bfleischer over 6 years ago
Add experimental support for macOS 10.14
Add support for Xcode 10
Perform user space directory loop check. This fixes a hang when renaming directory loops. For details see osxfuse/osxfuse#495.
Workaround for NULL
context in getattr
vnode operation. Third party kernel extensions might call getattr
with a NULL
context. As a workaround the kernel extension falls back to the current thread's context. For details see osxfuse/osxfuse#510.
Fix bug when closing an already removed file. Open file handles need to be closed even if the corresponding vnode has already been revoked, otherwise the user space file system daemon will leak files. For details see osxfuse/osxfuse#488.
Published by bfleischer over 6 years ago
Add support for DEBUG
and DEVELOPMENT
kernels. Previous versions of the FUSE kernel extension did only support RELEASE
kernels.
Add support for O_APPEND
flag of open(2)
when running in direct_io
mode
Add high-level support for invalidating files
To invalidate caches for a specific path and posting a file system event notifying subscribed processes, e.g. Finder, of remote file changes, call one of the following functions:
fuse_invalidate_path()
for high-level FUSE file systems-[GMUserFileSystem invalidateItemAtPath:error:]
for Objective-C or Swift file systemsFix file handle bug in exchangedata(2)
. Relying on vnode_update_identity()
resulted in open file handles pointing to the wrong file after calling exchangedata(2)
.
Fix "vnode reclaim in progress" kernel panic.
Do not post unnecessary file system events because they might trigger file system operations. Especially expensive readdir(3)
calls should be avoided.
readdir(3)
loop when using the high level volicon
module. Addresses osxfuse/osxfuse#434.Purge vnode from namecache when a FUSE_NOTIFY_DELETE
notification is received by the kernel extension and the file has been deleted and re-created in the meantime.
Always use standard system font for about text in FUSE preference pane.
Published by bfleischer about 7 years ago
Fix a bug in the high-level C API that resulted in the file system size being reported as 0 bytes when using file system modules. For details see osxfuse/osxfuse#414.
Add support for building the mount helper with Xcode 9. For details see osxfuse/support#5.
Add support for building the "Complete installation" installer plugin with Xcode 9. For details see osxfuse/support#5.
Published by bfleischer about 7 years ago
Add support for file systems with more than UINT32_MAX
blocks
By default struct statvfs
is used to query file system statistics. Block counts are stored in struct statvfs
as 32 bit integer values. Starting with this release struct statfs
, which supports 64 bit block counts, can be used instead.
fuse_reply_statfs_x()
instead of fuse_reply_statfs()
to finish statfs()
callbacks.statfs_x()
callback instead of statfs()
.For details see osxfuse/osxfuse#396.
Add support for posting file system events on OS X 10.11 and later
Shared file systems need to notify the kernel about external changes. Starting with this release file system events will be posted, so that subscribed user-space applications, like Finder, can reflect remote changes instantly.
FUSE_NOTIFY_INVAL_INODE
, FUSE_NOTIFY_INVAL_ENTRY
, or FUSE_NOTIFY_DELETE
Add support for FUSE_NOTIFY_DELETE
notifications
File systems using the low-level API can call fuse_lowlevel_notify_delete()
to inform the kernel that a file or directory has been deleted remotely. The kernel will then invalidate the parent's attributes and delete the corresponding directory entry. See fuse/fuse_lowlevel.h
for details.
Fix kernel panic when processing FUSE_NOTIFY_INVAL_INODE
notifications
Acquiring a look on a kernel thread and then unlocking it on a different thread can cause a kernel panic on macOS 10.13 when running a debug or development kernel.
Minor code cleanup of kernel extension
Published by bfleischer over 7 years ago
Fix volume icon fallback for file systems using the low-level FUSE API
Modules are unsupported for low-level file systems, therefore falling back to the default volume icon resulted in unknown option iconpath=...
errors. For details see osxfuse/osxfuse#394.
Published by bfleischer over 7 years ago
Add support for macOS 10.13 beta 3
KextManagerLoadKextWithURL()
now returns kOSKextReturnSystemPolicy
instead of kOSKextReturnNotLoadable
when trying to load a kernel extension that has not yet been allowed by the user.
Minor cleanup of build scripts
Published by bfleischer over 7 years ago
Fix a bug that prevented not-yet-alive volumes from being unmounted by calling fuse_unmount()
. For details see osxfuse/osxfuse#332.
Fix FUSE device leak when serving multiple volumes from a single process by making sure FUSE device handles are being closed in case a volume is unmounted externally. For details see osxfuse/osxfuse#385.
Drop set-user-ID of mount helper before mounting a FUSE volume.
Add "Complete installation" installer section on macOS 10.13
On macOS 10.13 users need to explicitly consent before new kernel extensions can be loaded. The installer plugin guides users through the steps required to allow loading the FUSE system extension before completing the installation.
Display an alert in case loading the FUSE system extension has not been allowed, yet.
FUSE will display an alert containing instructions to allow the system extension and will post a notification letting the file system server know that the kernel extension could not be loaded.
Move volume icon to file system bundle
FUSE will fall back to the default icon in case no volume icon was specified, when mounting the volume. In previous releases the fallback mechanism was only available to file systems linking against the FUSE framework.
Add retina version of logo in the FUSE Preference Pane. For details see osxfuse/osxfuse#388.
Published by bfleischer over 7 years ago
Add experimental support for macOS 10.13. This fixes osxfuse/osxfuse#380.
Add experimental support for Xcode 9.0
Add experimental support for utime_omit_ok
when building FUSE using the macOS 10.13 SDK. utime_omit_ok
support is disabled in this release.
Fix an issue that can cause network file systems to be unmounted in case a file is removed and then re-created remotely.
If a file disappears "behind our back" the corresponding vnode is soft-revoked. If a new file appears with the same inode number we need to make sure not to reuse the revoked vnode. For details see osxfuse/kext#7.
Starting with version 3.6.0 official FUSE for macOS releases will be signed with the OpenPGP key 0x135F164B411BAA1F4A4BCD37617A3461802608A1.
After importing the key you can verify downloaded release files using the following commands:
$ gpg2 --verify osxfuse-3.6.0.sha256.sig
gpg: assuming signed data in 'osxfuse-3.6.0.sha256'
gpg: Signature made Tue Jun 13 00:14:24 2017 CEST
gpg: using RSA key 135F164B411BAA1F4A4BCD37617A3461802608A1
gpg: Good signature from "Benjamin Fleischer <[email protected]>"
$ shasum -a 256 -c osxfuse-3.6.0.sha256
osxfuse-3.6.0.dmg: OK
osxfuse-3.6.0-debug.tbz: OK
This addresses osxfuse/osxfuse#376.
Minor code cleanup
Published by bfleischer over 7 years ago
_PC_CASE_SENSITIVE
pathconf(2)
selector. Previous releases returned true
even if the file system is case insensitive.Published by bfleischer over 7 years ago
Add support for _PC_FILESIZEBITS
pathconf(2)
selector and NSURL's NSURLVolumeMaximumFileSizeKey
resource key. For more information see osxfuse/osxfuse#369.
Improve compatibility with Core Services. Do not block calls from coreservicesd (which is running as root) even if allow_root
and allow_other
are not set. For more information see osxfuse/osxfuse#369.
Fix macOS version check when installing FUSE for macOS. Fall back to deployment target when building "distribution" target without additional parameters.
Published by bfleischer over 7 years ago
Fix race condition when using auto_xattr
causing setxattr(2)
to fail
The kernel's fallback mechanism for managing extended attributes is not thread-safe. To address the issue FUSE will no longer set the O_EXCL
flag when creating Apple Double files. See osxfuse/osxfuse#354 for details.
Fix unresponsive 32 bit file systems on 64 bit Macs
FUSE uses a socket pair to pass the FUSE device file descriptor to the file system process. Control messages created using the CMSG
macros in the Mac OS X 10.5 SDK are not properly aligned. This resulted in 32 bit file systems being unresponsive on 64 bit Macs.
Add support for preferences URL scheme. See osxfuse/prefpane#4 for details.
Fix macOS version check when installing FUSE for macOS
Published by bfleischer over 7 years ago
Add support for nanosecond time resolution. Creation, modification, … times of files can now be specified with nanosecond time resolution. This addresses osxfuse/osxfuse#346.
Improve compatibility with Finder. Do not block open(2)
calls from syspolicyd (which is running as root) even if allow_root
and allow_other
are not set.
Improve compatibility with Finder. Do not block listxattr(2)
calls by root even if allow_root
and allow_other
are not set.
Add support for building "release" target on macOS 10.12
Published by bfleischer almost 8 years ago
Fix bug in FUSE kernel extension that can trigger a kernel panic
Release biglock in fuse_vnop_write()
before calling uiomove()
. Not doing so can trigger a kernel panic when using the direct_io
mount-time option. For details see osxfuse/osxfuse#330.
Fix rare file system deadlock when mounting a FUSE volume
In rare cases mount(2)
performs file system operations. Calling mount_osxfuse
synchronously from libosxfuse could result file system deadlocks.
Fall back to the setattr_x()
callback if the file system does not implement the fsetattr_x()
callback.
Published by bfleischer about 8 years ago
Fix volume icon support on macOS 10.12
Fixes an incompatibility on macOS 10.12, resulting in the volume icon not being displayed in Finder, when using mount-time options volicon
, local
, and extended_security
at the same time.
Shorten preference pane name from "FUSE for macOS" to "FUSE". Addresses osxfuse/osxfuse#317 and osxfuse/osxfuse#319.
Fix error when building the kernel extension loader with legacy SDKs
Starting with the Mac OS X 10.6 SDK libkern/OSKextLib.h
tries to include System/libkern/OSReturn.h
, which does not exist in the SDK. Apple fixed the issue in the OS X 10.11 SDK.
Fix generation of BridgeSupport files for Objective-C FUSE framework on Mac OS X 10.6. Addresses osxfuse/osxfuse#321.
Fix error when building FUSE mounter on Mac OS X 10.6. Addresses osxfuse/osxfuse#318.
Rename distribution package symlink
Append .pkg file extension to distribution package symlink in release disk image. This fixes osxfuse/osxfuse#322.
Improve readability of release disk image background
Published by bfleischer about 8 years ago
Published by bfleischer about 8 years ago
Let mount_osxfuse
load the FUSE kernel extension
When mounting a FUSE volume, libosxfuse
used to be responsible for loading the kernel extension by calling load_osxfuse
. Starting with this release mount_osxfuse
will call load_osxfuse
. This allows us to further decouple libosxfuse
from the FUSE kernel extension.
Improve kernel extension loader error handling
libosxfuse
is no longer linked against CoreFoundation.framework
Published by bfleischer about 8 years ago
Improve macOS 10.12 support by creating nonexistent mount points
In macOS 10.12 the permissions of the root-owned /Volumes
directory have changed from 1777 (rwxrwxrwt) to 1755 (rwxr-xr-t). As a result admin privileges are required to create mount points in /Volumes
.
In order to allow non-admin users to mount FUSE volumes in /Volumes
FUSE will create non-existent mount points automatically.
Deprecate non-portable libosxfuse functions
File system binaries using these functions, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release. The following functions have been deprecated:
fuse_os_version_major_np()
fuse_device_fd_np()
fuse_mountpoint_for_fs_np()
Revise mount status detection in Objective-C FUSE framework to remove dependency on the deprecated function fuse_device_fd_np()
Pass open flags to Objective-C FUSE framework based file systems
The GMUserFileSystemOperations
delegate method createFileAtPath:attributes:userData:error:
has been deprecated in favor of the new method createFileAtPath:attributes:flags:userData:error:
, that allows passing open flags to the file system delegate. See open(2)
for details.
File systems implementing the old delegate method, will continue to work with FUSE for macOS 3.x. However, support will be dropped in the next major release.
Add support for querying file system operation context information for Objective-C FUSE framework based file systems
The context of the current file system operation is only valid during a file system delegate callback. The NSDictionary
returned by +[GMUserFileSystem currentContext]
contains the following keys:
kGMUserFileSystemContextUserIDKey
kGMUserFileSystemContextGroupIDKey
kGMUserFileSystemContextProcessIDKey
See GMUserFileSystem.h
for details.
Update Objective-C FUSE framework availability macros
File system binaries built with version 3.5 of the Objective-C FUSE framework are not compatible with previous framework versions unless the following preprocessor macro is defined before importing the framework header.
#define GM_VERSION_MIN_REQUIRED GM_OSXFUSE_2
Minor optimizations and code cleanup