Netatalk Client v0.9.5
Note: With this release version onwards, this project is now called Netatalk Client.
The names of tools and libraries are unchanged from afpfs-ng to signal continuity and (partial) compatibility.
AFP Client Library Improvements
- Support for the SRP UAM (Secure Remote Password), which is the most modern and secure password-based authentication method in the AFP protocol: supported by Mac OS X 10.7 Lion, Netatalk 4.5 and later
- Harden and bugfix libafpclient UAM handling code
- We now detect 2000s era Mac OS X servers, Time Capsules, and Windows (SFM, PCMacLan) servers
- Improved compatibility with modern Apple AFP servers and Time Capsule, including FinderInfo and ResourceFork handling,
Time Capsule-friendly file creation and fork writes, and support for AFP file exchange operations used by safe-save workflows. - AFP connection attempts now respect a timeout instead of blocking indefinitely, with a longer default timeout for Time
Capsule servers to tolerate disk spin-up. - Disable TCP Nagle on AFP connections for more responsive interactive and metadata-heavy workloads.
Stateless Client Library Improvements
- Allow library consumers to register a persistent logging callback with context and syslog severity. Local libafpsl
diagnostics and structured logs returned by every afpsld command use the same callback. - Add reusable metadata replacement and transfer helpers to libafpsl, with auto, filesystem-xattr,
macOS AppleDouble, and Netatalk AppleDouble storage modes and non-fatal warning flags for non-interactive consumers. - Add stateless APIs for generic extended attributes, FinderInfo, and ResourceFork metadata.
- Bind stateless volume operations to authenticated sessions and add explicit session resume support for long-lived
clients such as KIO workers.
afpcmd Client Improvements
- Pagination of long directory listings where we previously truncated the output at 256 entries.
- Preserve FinderInfo, ResourceFork, and generic extended attributes when transferring files, with selectable local
metadata storage modes. - Add xattr, finderinfo, and resourcefork commands for inspecting and modifying AFP metadata interactively.
- Add per-command recursive mode for interactive get, put, cp, chmod, and rm commands.
- Recover interactive sessions more reliably after idle server disconnects.
- Escape control characters in path output so unusual server-side filenames cannot corrupt terminal output.
FUSE Client Improvements
- Better macOS Finder compatibility through ResourceFork, FinderInfo, and generic extended attribute operations in
macFUSE. - Support Darwin rename and exchange callbacks, including safer Finder-style save operations that preserve stable file
IDs where the server supports AFP file exchange. - Restore reconnection after afp_client suspend and afp_client resume; suspended mounts now stay suspended until an
explicit resume command. - Avoid daemon termination during FUSE wakeups and unmount handling on platforms where SIGPIPE could otherwise arrive
before libfuse installs its own handler.
What's Changed
- touch up codefm.sh script with return code and stderr redirection by @rdmark in #172
- remove some unreachable code in the FUSE client by @rdmark in #184
- restructure UAM code into separate files by @rdmark in #194
- retry read/select on EINTR in FUSE client/daemon socket I/O by @rdmark in #197
- add SRP User Authentication Method by @rdmark in #196
- reduce log verbosity by guarding afp_main_loop debug logs with DEBUG macros by @rdmark in #201
- fix use-after-free in afp_unmount_volume by detaching after FUSE unmount by @rdmark in #202
- detect 2000s era Macs and Time Capsule machine types by @rdmark in #203
- libafpclient: detect Windows hosts by machine name by @rdmark in #210
- rebrand project to Netatalk Client by @rdmark in #223
- refactor afp_client.1 man page for clarity by @rdmark in #224
- replace commented out code with FIXMEs by @rdmark in #208
- fuse: bound client response string appends by @rdmark in #225
- bump libafpclient soversion to v1 by @rdmark in #227
- declare soversion v1 for libafpsl shared library by @rdmark in #236
- fix: add bounds check before memcpy in server.c by @orbisai0security in #233
- lib: harden AFP reply block parsing by @rdmark in #237
- handle SRP UAM login failed error by @rdmark in #238
- remove redundant afpcmd internal URL parsing self tests by @rdmark in #242
- compatibility with modern Apple AFP servers by @rdmark in #226
- route Apple xattrs through fork metadata by @rdmark in #243
- unified cleanup routine in appledouble_open to avoid memory leaks by @rdmark in #244
- fuse: harden secrets management in the client mount helper by @rdmark in #245
- introduce a global text sanitizer utility function by @rdmark in #246
- fuse: harden manager IPC validation by @rdmark in #247
- afpcmd: add per-command recursive operations by @rdmark in #248
- fuse: safe status message construction by @rdmark in #249
- full-featured logging interface over IPC for the Stateless library by @rdmark in #250
- libafpsl: add reusable metadata transfer helpers by @rdmark in #254
- bring protocol definitions up to date with AFP 3.4 by @rdmark in #256
- harden client logging format handling by @rdmark in #264
- introduce compatibility macro for unused attribute by @rdmark in #266
- bind stateless operations to authenticated sessions by @rdmark in #267
- introduce auto metadata mode that aligns with Netatalk by @rdmark in #268
- lib/afp.c: Disable TCP Nagle by @andylemin in #269
- escape control characters in afpcmd path output by @rdmark in #270
- recover afpcmd sessions after idle disconnects by @rdmark in #272
- bound xattr user prefix stripping by @rdmark in #275
- handle astyle errors granulary in codefm.sh script by @rdmark in #274
- update straggler references to the old project name by @rdmark in #276
- refactor AFP server type snapshots by @rdmark in #277
- normalize copyright headers across codebase by @rdmark in #278
- better client handling of server connection timeouts by @rdmark in #282
- restore FUSE reconnection after suspend and resume by @rdmark in #283
- afpcmd: pagination for long directory listings by @rdmark in #286
- consistent AFP nomenclature in help text and man pages by @rdmark in #284
- update changelog for v0.9.5 by @rdmark in #285
New Contributors
- @orbisai0security made their first contribution in #233
- @andylemin made their first contribution in #269
Full Changelog: 0.9.4...0.9.5