Skip to content

0.9.3

Choose a tag to compare

@rdmark rdmark released this 08 Feb 22:39

What is new in afpfs-ng-0.9.3, February 8, 2026

  1. Stateless client library

The stateless client library (libafpsl.so) together with the stateless client daemon (afpsld)
have been (re)introduced and thoroughly reworked to provide a more robust and efficient way
to interact with AFP servers without maintaining a persistent connection.

The stateless client daemon has gotten a unique name (afpsld) to allow it to coexist
with the FUSE client daemon (afpfsd), while removing all FUSE client specific code and dependencies
from the former.

  1. afpcmd client improvements

The afpcmd client has been reworked to use the new stateless client library and daemon,
rather than calling the midlevel API directly. This allows for better error handling and stability,
and also turns afpcmd into a reference implementation and showcase for the stateless client library.

Implemented password changing with all UAMs that support it, using the previously ineffective 'pass' command.

Two way batch file transfers from the command line.

Introduced support for password protected volumes.

Introduced verbose mode with -V or --verbose that prints detailed information about file transfers,
while adding a summary of the transfer at the end.

Removed the ineffecual 'user' command for changing the user on the fly.

Removed "synonyms" for commands (e.g. 'delete' for 'rm') to reduce the clutter and complexity of the command set.

  1. FUSE client improvements

Added support for libfuse 2.9 with older versions of macFUSE / OSXFUSE on macOS (although not fully tested).

Made the client sensitive to loglevels set by the afpfsd manager daemon.

Remapped afp_client volpass option from -V to -P to avoid overlap with the new verbose mode in afpcmd.

  1. library improvements

Fixed bug that prevented the use of 8 char passwords with the Randnum UAMs.

Scrub all passwords from memory immediately after use.

Fallback to guest (nobody) auth if no credentials are provided, and the server allows guest access.

Full implementation of Precomposed UTF8 to Decomposed UTF8 conversion.

Changed the UAM shorthand for 2-Way Randnum from '2wayrandnum' to 'randnum2'.

Removed unused GNU GMP and ncurses dependencies.

Many memory safety and reliability improvements.

What's Changed

  • pass buffer length to pascal conversion functions consistently by @rdmark in #118
  • restore workaround for netatalk UTF-8 server names by @rdmark in #119
  • Revert "Remove obsoleted daemon subdir" by @rdmark in #124
  • overhaul stateless client library and daemon, implement it in afpcmd by @rdmark in #120
  • better robustness during file transfers in both clients by @rdmark in #125
  • fix double-free bug in find_dirid_by_fullname by @rdmark in #123
  • correct log level filtering logic in the FUSE client by @rdmark in #122
  • purge superfluous dependencies from build system by @rdmark in #126
  • compatibility with older glibc, error handling and memory safety by @rdmark in #128
  • build(deps): bump actions/checkout from 6.0.1 to 6.0.2 by @dependabot[bot] in #130
  • file transfer verbose mode for afpcmd, logging improvements by @rdmark in #129
  • Memory Safety Improvements to Unicode string handling functions by @rdmark in #131
  • initialize logger structure before attempting to use in FUSE client by @rdmark in #134
  • improve logging routines in FUSE daemon and client by @rdmark in #136
  • build(deps): bump vmactions/freebsd-vm from 1.3.7 to 1.3.8 by @dependabot[bot] in #138
  • build(deps): bump vmactions/openbsd-vm from 1.3.1 to 1.3.3 by @dependabot[bot] in #139
  • build(deps): bump vmactions/netbsd-vm from 1.3.1 to 1.3.3 by @dependabot[bot] in #140
  • compatibility with libfuse v2 on macOS by @rdmark in #135
  • stateless client disconnect, afpcmd user auth refactor by @rdmark in #137
  • implementation of password changing for all UAMs and Stateless library by @rdmark in #142

Full Changelog: 0.9.2...0.9.3