# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

## Unreleased

## [1.25] - 2026-06-23

### Fixed
- A currently harmless case of undefined behavior in WSD response generation. 

### Changed
- Updated 3rd party dependencies

## [1.24] - 2026-05-14

### Added
- Official support for DragonFly BSD

### Changed
- Updated 3rd party dependencies
- Hardened HTTP and XML parsing against denial-of-service attacks. 
  This makes it a bit harder (but not impossible!) to mount DoS attacks against the server.
  Remember to never expose the server to the open internet!
- Docker image now runs under non-root account.

### Fixed
- Incorrect parsing of certain unexpected HTTP requests. In extremely rare cases this could cause
  a (non-exploitable) crash.
- Warnings when building under Xcode.
- Typos in log messages.


## [1.23] - 2026-02-13

### Changed
- Terminal output is now in color when supported by the terminal. Because it is 2026.
  `NO_COLOR` and `FORCE_COLOR` environment variables are fully supported too.
- Command line help now wraps correctly at the terminal edge
- Manpage is now generated using Asciidoctor.
- Updated 3rd party dependencies

### Fixed
- `log-level` command line flag/config setting is now working correctly again.

## [1.22] - 2025-10-19

### Added
- Support building and running on operating systems that lack either Netlink or PF_ROUTE
  mechanisms (such as for example Haiku OS). On such systems network interface changes 
  after wsddn startup are not detected.
- Automatic daemon user creation when running as root is now supported on Alpine and Illumos

### Fixed
- Binary packages no longer declare conflict with `wsdd` ([#23](https://github.com/gershnik/wsdd-native/issues/23))
- Man pages now correctly describe default log destinations
- Miscellaneous fixes around automatic daemon user creation when running as root:
  - Security hardening around invoking OS user creation commands
  - Better user defaults to align with conventions on known platforms

### Changed
- Updated 3rd party dependencies
- Made log messages more uniform and informative.
- Replaced single WSDDN_PREFER_SYSTEM CMake setting with per-dependency WSDDN_PREFER_SYSTEM_&lt;UPPERCASE_DEP_NAME&gt; ones

## [1.21] - 2025-08-04

### Added
- A binary package is now available for OpenBSD. Look for `wsddn-x.y-OpenBSD-amd64.tgz` under Releases
- Configuration file samples for OpenBSD have been provided under `config/openbsd` (h/t Ron Taylor)

### Fixed
- Samba config detection now works properly when `samba` tool is not present. Detection is also
  no longer depends on `whereis` tool. This is particularly an issue on OpenBSD but can be a problem 
  on other platforms too ([#17](https://github.com/gershnik/wsdd-native/issues/17)) 
- OpenBSD: UDP writes blocked by firewall no longer stop all processing on an 
  interface ([#18](https://github.com/gershnik/wsdd-native/issues/18))
- OpenBSD and potentially other less common BSD variants: `wsddn` now properly handles
  older BSD behavior where reading from multicast IPv4 sockets surfaces packets sent to
  all interfaces, not the one the socket is restricted to ([#19](https://github.com/gershnik/wsdd-native/issues/19))
- OpenBSD and NetBSD: automatic daemon user creation now works properly. The default expected daemon user name
  is now "_wsddn" on both systems.
- OpenSUSE: RPM package now installs cleanly without warning about missing `firewalld-filesystem` dependency
- CMake build: build is now correctly reconfigures itself when `sys_config.h.in` changes 

### Changed
- To optimize network traffic `wsddn` now sends resolving address directly in the WSD Hello message
  rather than waiting for a call from Windows. This is similar to what `wsdd` does. There appears to
  be no real security benefit in not doing so and it reduces startup traffic significantly.
- FreeBSD config files now live under `config/freebsd` instead of `config/bsd` (all BSDs are not the
  same unfortunately)
- Arch AUR: package build no longer requires network access during build step

## [1.20] - 2025-07-19

### Fixed
- CMake build break when building a clean tree

## [1.19] - 2025-06-28

### Changed
- Updated 3rd party dependencies

## [1.18] - 2025-03-27

### Fixed
- macOS: "Allow in the background" settings now show "wsdd-native" rather than the author name ([#16](https://github.com/gershnik/wsdd-native/issues/16))

### Changed
- Updated 3rd party dependencies

## [1.17] - 2025-03-09

### Changed
- `libuuid` dependency has been replaced with `modern-uuid`
- Updated 3rd party dependencies

## [1.16] - 2025-01-12

### Added
- `--source-port` command line argument and `source-port` config file option to set the source port for 
  multicast messages for better firewall interoperability.
- Configuration files for `firewalld`. These are now also delivered and used in RPM binary packages.

### Changed
- Updated 3rd party dependencies
- Firewall configuration files now live under `config/firewalls`

## [1.15] - 2024-10-03

### Changed
- Updated 3rd party dependencies

## [1.14] - 2024-05-29

### Fixed
- Removed superfluous/misleading warning log messages ([#10](https://github.com/gershnik/wsdd-native/issues/10))

## [1.13] - 2024-05-16

### Added
- On Linux KSMBD configuration is now auto-detected if Samba configuration is not present.
- Binary packages are now available for Arch Linux and Alpine

### Fixed
- Daemon Pidfile now has correct owner

## [1.12] - 2024-05-06

### Added
- Debian binary packages no longer require `systemd` presence. They can now be used on non-`systemd` based distributions as well as Docker. SysVInit scripts are now provided and "do the right thing" on `systemd` and non-`systemd` systems.
- Support for NetBSD
- Support for illumos

## [1.10] - 2024-04-30

### Added
- Ability to supply custom metadata to Windows. This allows exposing the computer running **wsdd-native** as something other than an SMB server in Windows Explorer. For more details see [this page](config/metadata/README.md)
- Support for Alpine Linux and musl libc
- Support for OpenBSD

### Fixed
- Crash when looking up Samba configuration and `whereis` tool is not present on the host

## [1.6] - 2023-07-29

### Added
- Added application profile for UFW on Debian/Ubuntu distribution
- Added `armhf` distribution for Debian/Ubuntu

### Changed
- Updated 3rd party dependencies

## [1.5] - 2023-07-21

### Fixed:
- macOS: Hopefully final fix for [#4](https://github.com/gershnik/wsdd-native/issues/4): `_wsddn` user is reassigned to staff group on OS update 

### Changed:
- Replaced ad-hoc calls to various Posix-y APIs with [ptl](https://github.com/gershnik/ptl)

## [1.4] - 2023-06-16

### Fixed:
- macOS: Corrected `_wsddn` group definition so it is no longer removed from `_wsddn` user on macOS upgrade and no longer shown as available user group in Settings.
- macOS: Made the macOS warning about startup software say "wsddn.app" rather than "Eugene Gershnik" (my developer account name).

## [1.3] - 2023-05-27

### Added
- macOS: Macports distribution is now available

### Fixed
- macOS: child process now logs with correct subsystem and category

### Changed
- macOS: logging to OS log is now the default behavior
- macOS: bundle identifier is now configurable at build time

## [1.2] - 2023-05-21

### Fixed
- APT installer no longer creates bogus `/debian` directory
- Mac `.pkg` installer now correctly includes both x64 and arm64 architectures.

### Changed
- Updated `{fmt}` library dependency 
- It is now possible to specify version externally when building `wsddn` by setting `WSDDN_VERSION` CMake variable.

## [1.1] - 2023-05-19

### Added
- macOS: Allow logging to system log instead of log file. See `--log-os-log` command line option and `log-os-log` config file setting.

### Changed
- Updated all dependencies to latest versions as of 2023-05-18

### Fixed
- All platforms: `wsddn --version` always reporting "0.1"
- macOS: application info dictionary version always set to "0.1"
- Fixed errors when compiling under GCC 13


## [1.0] - 2022-07-25
### Added 
- First official release

## [0.6] - 2022-07-24
### Added
- Initial version


[0.6]: https://github.com/gershnik/wsdd-native/releases/v0.6
[1.0]: https://github.com/gershnik/wsdd-native/releases/v1.0
[1.1]: https://github.com/gershnik/wsdd-native/releases/v1.1
[1.2]: https://github.com/gershnik/wsdd-native/releases/v1.2
[1.3]: https://github.com/gershnik/wsdd-native/releases/v1.3
[1.4]: https://github.com/gershnik/wsdd-native/releases/v1.4
[1.5]: https://github.com/gershnik/wsdd-native/releases/v1.5
[1.6]: https://github.com/gershnik/wsdd-native/releases/v1.6
[1.7]: https://github.com/gershnik/wsdd-native/releases/v1.7
[1.8]: https://github.com/gershnik/wsdd-native/releases/v1.8
[1.9]: https://github.com/gershnik/wsdd-native/releases/v1.9
[1.10]: https://github.com/gershnik/wsdd-native/releases/v1.10
[1.12]: https://github.com/gershnik/wsdd-native/releases/v1.12
[1.13]: https://github.com/gershnik/wsdd-native/releases/v1.13
[1.14]: https://github.com/gershnik/wsdd-native/releases/v1.14
[1.15]: https://github.com/gershnik/wsdd-native/releases/v1.15
[1.16]: https://github.com/gershnik/wsdd-native/releases/v1.16
[1.17]: https://github.com/gershnik/wsdd-native/releases/v1.17
[1.18]: https://github.com/gershnik/wsdd-native/releases/v1.18
[1.19]: https://github.com/gershnik/wsdd-native/releases/v1.19
[1.20]: https://github.com/gershnik/wsdd-native/releases/v1.20
[1.21]: https://github.com/gershnik/wsdd-native/releases/v1.21
[1.22]: https://github.com/gershnik/wsdd-native/releases/v1.22
[1.23]: https://github.com/gershnik/wsdd-native/releases/v1.23
[1.24]: https://github.com/gershnik/wsdd-native/releases/v1.24
[1.25]: https://github.com/gershnik/wsdd-native/releases/v1.25
