Netatalk 4.4.0 is available!
The Netatalk team is proud to announce the first version in the Netatalk 4.4 release series.
In this release, we introduce sophisticated directory cache optimization which drastically reduces file system I/O by properly using the pre-existing caching architecture. The default behavior is largely unchanged.
Newly introduced afp.conf options:
dircache validation freq
dircache metadata window
dircache metadata threshold
dircache files
In addition, a bug with the dircachesize option parsing has been fixed where if you used the maximum setting of 131072 it was ignored and used the default fallback.
See the Configuration chapter in the Netatalk manual for a thorough explanation of the directory cache logic and configuration options.
Early adopters are encouraged to try out this new version. We are looking forward to hearing your feedback!
Other Notable Changes
The sqlite CNID backend is no longer flagged as experimental. We now ship support for SQLite in the production container for netatalk. However, the dbd backend (Berkeley DB) is still the default and recommended for most deployments.
A sample SELinux policy for netatalk can be found under distrib/selinux. Please note that it is meant as starting point and may need adjustments for production use.
The tool formerly known as ad is now called nad and has been thoroughly improved. All subcommands should work properly cross-platform now for safe file operations on AFP shared volumes on the local host.
Both mysql and sqlite CNID backends now support cnid_find() which is used primarily by nad find.
We generate developer documentation with Doxygen now, while code documentation comments got a major overhaul. The meson build system will look for Doxygen, and if found will generate and install html documentation.
The -Dwith-manual-install-dir meson option has been removed, and -Dwith-docs-install-dir introduced in its stead. The new option applies to all types of documentation, including the new developer documentation.
Dockerfiles have been moved from the repository root to distrib/docker.
How to Install
This is a source-only release. To build:
# Extract the source
tar -xf netatalk-4.4.0.tar.xz
cd netatalk-4.4.0
# Configure and build
meson setup build
meson compile -C build
# Install
sudo meson install -C build
What’s Changed
- ad: make buffer size detection more portable in ad cp by @rdmark in https://github.com/Netatalk/netatalk/pull/2413
- getzones: defensively release memory in optarg function by @rdmark in https://github.com/Netatalk/netatalk/pull/2421
- meson: Solaris compatible check for iconv parameters by @rdmark in https://github.com/Netatalk/netatalk/pull/2415
- testsuite: Bugfixes for lantest.c, file system cleanup after tests by @andylemin in https://github.com/Netatalk/netatalk/pull/2424
- atalkd: NULL check before accessing struct member in rtmp_packet() by @rdmark in https://github.com/Netatalk/netatalk/pull/2426
- testsuite: refactor libafptest with a testhelper module by @rdmark in https://github.com/Netatalk/netatalk/pull/2425
- Consider the sqlite CNID backend stable by @rdmark in https://github.com/Netatalk/netatalk/pull/2432
- afpd: protect against bad parameters and buffer overflow in dtfile() by @rdmark in https://github.com/Netatalk/netatalk/pull/2436
- testsuite: Clean test volumes between each spectest test execution by @rdmark in https://github.com/Netatalk/netatalk/pull/2437
- afpd: introduce runtime option for valid shellcheck by @rdmark in https://github.com/Netatalk/netatalk/pull/2439
- testsuite: enhanced ‘dircache statistics:’ log output and added log support to afp_lantest by @andylemin in https://github.com/Netatalk/netatalk/pull/2433
- afpd: check that username is a string before assigning in log_dircache_stat() by @rdmark in https://github.com/Netatalk/netatalk/pull/2442
- getzones: protect against potential memory leak when exiting in optarg by @rdmark in https://github.com/Netatalk/netatalk/pull/2441
- meson: error out if no writable CNID backend selected for compilation by @rdmark in https://github.com/Netatalk/netatalk/pull/2450
- testsuite: refactor headers and declarations for internal consistency by @rdmark in https://github.com/Netatalk/netatalk/pull/2443
- Create SELinux policy for netatalk daemons by @rdmark in https://github.com/Netatalk/netatalk/pull/2248
- rename the ad binary to nad and improve code quality by @rdmark in https://github.com/Netatalk/netatalk/pull/2440
- dircache: Add probabilistic validation for dramatic I/O reduction by @andylemin in https://github.com/Netatalk/netatalk/pull/2447
- webmin: support newly added dircache tuning options by @rdmark in https://github.com/Netatalk/netatalk/pull/2462
- docker: build the sqlite CNID backend in the Alpine production container by @rdmark in https://github.com/Netatalk/netatalk/pull/2458
- docs: for testsuite man pages, list -l option separately in synopsis by @rdmark in https://github.com/Netatalk/netatalk/pull/2460
- nad: remove limits to operate on shared volumes using any CNID backend by @rdmark in https://github.com/Netatalk/netatalk/pull/2461
- cnid: implement cnid_find() in the sqlite backend by @rdmark in https://github.com/Netatalk/netatalk/pull/2464
- webmin: correct description of fce ignore names format by @rdmark in https://github.com/Netatalk/netatalk/pull/2465
- docs: generate dynamic developer documentation with Doxygen by @rdmark in https://github.com/Netatalk/netatalk/pull/2467
- docs: improve AppleTalk network layer diagram by @rdmark in https://github.com/Netatalk/netatalk/pull/2469
- docs: clarify the cipher used by UAMs in the Configuration chapter by @rdmark in https://github.com/Netatalk/netatalk/pull/2477
- Create a Netatalk Code of Conduct by @rdmark in https://github.com/Netatalk/netatalk/pull/2476
- meson: refactor the docs installation dir logic by @rdmark in https://github.com/Netatalk/netatalk/pull/2471
- docs: create a chapter in the developer docs for DDP / AppleTalk by @rdmark in https://github.com/Netatalk/netatalk/pull/2473
- Create Contributing Guidelines document by @rdmark in https://github.com/Netatalk/netatalk/pull/2483
- docs: custom header and footer in doxygen docs by @rdmark in https://github.com/Netatalk/netatalk/pull/2484
- docs: tweak doxygen settings for better and more reliable output by @rdmark in https://github.com/Netatalk/netatalk/pull/2486
- improve code documentation and remove dead code by @rdmark in https://github.com/Netatalk/netatalk/pull/2485
- docker: restructure containerization support files into distrib/docker by @rdmark in https://github.com/Netatalk/netatalk/pull/2482
- libatalk: purge bitrotted code in adouble and netddp modules by @rdmark in https://github.com/Netatalk/netatalk/pull/2489
- Reduce the usage of preprocessor macros to enable platform code by @rdmark in https://github.com/Netatalk/netatalk/pull/2488
- Update copyright notice in desktop.c by @rdmark in https://github.com/Netatalk/netatalk/pull/2494
- Update copyright information in catsearch.c by @rdmark in https://github.com/Netatalk/netatalk/pull/2493
- libatalk: refactor vfs module with explicit function definitions by @rdmark in https://github.com/Netatalk/netatalk/pull/2491
- testsuite: use the global afp.h interface for AFP commands by @rdmark in https://github.com/Netatalk/netatalk/pull/2495
- Revise error checking and logging section in the developer readme by @rdmark in https://github.com/Netatalk/netatalk/pull/2497
- Apply code documentation markup across codebase by @rdmark in https://github.com/Netatalk/netatalk/pull/2492
- Update bstring to version 1.0.3 by @rdmark in https://github.com/Netatalk/netatalk/pull/2501
- afpd: afpstats init error handling; don’t build on macOS by @rdmark in https://github.com/Netatalk/netatalk/pull/2448
- Make the nad commands work more reliably on any OS by @rdmark in https://github.com/Netatalk/netatalk/pull/2506
- libatalk: implement the find function for the mysql CNID backend by @rdmark in https://github.com/Netatalk/netatalk/pull/2508
- libatalk: Simplify error logging on parameter error in cnid_mysql_find() by @rdmark in https://github.com/Netatalk/netatalk/pull/2515
- libatalk: create utility function convert_utf8_to_mac() by @rdmark in https://github.com/Netatalk/netatalk/pull/2507
- docs: split up developer docs per topic and make improvements by @rdmark in https://github.com/Netatalk/netatalk/pull/2525
- docker: expose dircache settings in production container by @rdmark in https://github.com/Netatalk/netatalk/pull/2523
- docs: add algorithm prefix to integritry hash for Mermaid script by @rdmark in https://github.com/Netatalk/netatalk/pull/2544
- docs: better descriptions and examples of classic Mac / A2 options by @rdmark in https://github.com/Netatalk/netatalk/pull/2551
- use explicit_bzero to clear out sensitive data from memory by @rdmark in https://github.com/Netatalk/netatalk/pull/2562
- nad: protect against potential memory leak in xgetcwd() by @rdmark in https://github.com/Netatalk/netatalk/pull/2563
- docs: adapt libatalk DSI readme to the developer docs by @rdmark in https://github.com/Netatalk/netatalk/pull/2570
- Restore historical changelogs from the ASUN fork to v1.5 by @rdmark in https://github.com/Netatalk/netatalk/pull/2579
- config: overhaul daemon configuration file comments by @rdmark in https://github.com/Netatalk/netatalk/pull/2580
- Create git configuration file for bypassing git blame by @rdmark in https://github.com/Netatalk/netatalk/pull/2534
- webmin: fallback to section name when volume name not set by @rdmark in https://github.com/Netatalk/netatalk/pull/2586
- Optimistic Cache Validation Fixes, Security, Enhancements, and new Test by @andylemin in https://github.com/Netatalk/netatalk/pull/2577
- Fix invalid file descriptor check before close() in ad_flush.c by @andylemin in https://github.com/Netatalk/netatalk/pull/2590
- testsuite: cleanup of DSI struct pointers in test functions by @rdmark in https://github.com/Netatalk/netatalk/pull/2592
- testsuite: flag immutable pointers as const in test functions by @rdmark in https://github.com/Netatalk/netatalk/pull/2595
- webmin: consistently refer to Netatalk as an AFP File Server by @rdmark in https://github.com/Netatalk/netatalk/pull/2587
- docs: improve verbiage in the afp_spectest man page by @rdmark in https://github.com/Netatalk/netatalk/pull/2591
Full Changelog: https://github.com/Netatalk/netatalk/compare/netatalk-4-3-2…netatalk-4-4-0
Footnotes
Release published on 2026-01-04
Generated from GitHub Release Notes