Repository navigation
Releases: Cloudinvoke/libunftp
Release list
unftp-sbe-gcs v0.3.1
Changes in this release:
- #592 Require patched
rustls-webpki0.103.16 or later to reject compromised eMudhra intermediate CA keys (RUSTSEC-2026-0382). - #601 Upgrade
base64to 0.23.1 and other dependencies.
Published to crates.io: https://crates.io/crates/unftp-sbe-gcs/0.3.1
unftp-auth-rest v0.3.1
Changes in this release:
- #592 Require patched
rustls-webpki0.103.16 or later to reject compromised eMudhra intermediate CA keys (RUSTSEC-2026-0382). - Upgrade dependencies, including
regex1.13.1.
libunftp 0.24.0
Changes in this release:
- #583 Document custom
SITEcommands in the README,
listunftp-site-hashas an extension, and recommend theunftp-site-*prefix for extension crates. - #592 Require patched
rustls-webpki0.103.16 or later in
libunftp to reject compromised eMudhra intermediate CA keys
(RUSTSEC-2026-0382). - #582 End a PROXY protocol header read with an
unexpected EOF error when the peer closes before sending a complete header, avoiding an endless
read loop. - BREAKING: #569 Include the FTP working directory in
DataEvent::Got(RETR) andDataEvent::Put(STORandAPPE) paths. For example, uploading
photo.jpgin/uploadsnow reports/uploads/photo.jpginstead ofphoto.jpg; at the FTP root
it reports/photo.jpg. Listeners that compare paths or construct storage keys from them must
handle paths rooted at the user's FTP root rather than raw command arguments. These paths are
not backend filesystem paths or object URLs, and are not canonicalized. Delete, rename, and
directory events already use this convention. - #578 and
#594 Preserve leading, embedded, and trailing
whitespace inLISTpathnames, including after options and--. - #601 Upgrade
nixto 0.31.3.
libunftp 0.23.1
libunftp 0.23.1
This release adds application-defined FTP SITE subcommands and fixes control-channel reply handling and pooled listener address handling.
New functionality
#571: Register custom subcommands with ServerBuilder::site_command and implement libunftp::options::SiteCommandHandler. Handlers receive arguments, authenticated user details, the storage backend, and the session logger through SiteCommandContext, and return a Reply.
#576: Subcommand names are case-insensitive. Invalid or duplicate registrations and attempts to override built-in SITE MD5 are rejected by build(). When using user_detail_provider, call it before registering SITE handlers.
Fixes and maintenance
- #573: Prevent a panic on blank lines in multiline FTP replies.
- #568: Use the accepted control connection's local address in pooled listener mode, including wildcard bindings.
- Update dependencies, including #567 and #574, and improve tests and documentation (#571).
Compatibility notes
The unftp-core API is unchanged and remains at 0.1.0. Unknown SITE subcommands now return 502 instead of 500.
Consumers pinning async-trait below 0.1.92 must update that pin to resolve dependencies. The unFTP smoke test used an updated pin and the filesystem backend with anonymous authentication.
Full changes: libunftp-0.23.0...libunftp-0.23.1
libunftp v0.23.0, unftp-auth-jsonfile v0.4.0, unftp-auth-pam v0.3.0, unftp-auth-rest v0.3.0, unftp-sbe-fs v0.4.0, unftp-sbe-gcs v0.3.0
Changes in this release:
- BREAKING: Introduced
unftp-coreand moved backend-facing auth/storage traits and types there.
Backends now depend onunftp-coredirectly andlibunftpdepends on this core crate. Backends
depending onlibunftpwill no longer compile. For those, updating Cargo.toml to useunftp-coreshould be
sufficient though, as no other code level breaking changes were introduced. - BREAKING: Updated backend crates in this repository to use
unftp-coreand removed theServerExt
helpers in theunftp-sbe-*crates. Examples now useServerBuilderdirectly. This was needed to avoid
these back-ends to depend onlibunftp. - Bump versions for
unftp-auth-*andunftp-sbe-*crates to reflect the API split.
unftp-core v0.1.0
This is a new crate that defines the interfaces for storage an authentication back-ends or extensions. Previously all back-ends would depend on libunftp causing all sorts of problems like release churn for back-ends even though nothing changed for back-ends but rather something in the server implementation. Thus, this is really a split of libunftp into the server implementation part and the back-end APIs.
See #562 for more details.
libunftp v0.22.0
Changes in this release:
- #550 Split Authenticators from the Subject Resolving (UserDetail
Providing) concern:- BREAKING: Refactored
Authenticatortrait to be non-generic and returnPrincipalinstead of a generic
User
type. This decouples authentication (verifying credentials) from user detail retrieval (obtaining full user
information). - Introduced
Principalstruct representing an authenticated user's identity (username). This is the minimal
information returned by authentication. - Introduced
UserDetailProvidertrait to convert aPrincipalinto a fullUserDetailimplementation. This
allows
authentication and user detail lookup to be separated. - Introduced
AuthenticationPipelinestruct that combines anAuthenticatorand aUserDetailProviderto provide
a
complete authentication flow. - Added
DefaultUserDetailProviderimplementation that returnsDefaultUserfor convenience. - BREAKING: Updated all
unftp-auth-*crates (unftp-auth-jsonfile,unftp-auth-pam,unftp-auth-rest) to
use
the new non-genericAuthenticatortrait. - Updated all examples and tests to use the new authentication pattern.
- BREAKING: Refactored
- #551 Let authenticators know the FTP Command channel TLS state
- #553 Introduced a new "pooled listener" mode
(.pooled_listener_mode()) for high-traffic servers.- This mode improves passive connection performance and security by pre-binding all passive ports.
- Fixed a memory leak in the passive port Switchboard (used by Pooled and Proxy modes). A new scavenger task now
cleans up expired and orphaned port reservations. - Fixed the PORT command (Active Mode) so that it now works correctly in all listener modes.
- Fixed that the EPSV command is now correctly disabled in Proxy Protocol mode where it is not (yet) supported.
- BREAKING: Removed the deprecated
Server::newandServer::with_authenticatormethods. TheServerBuilder
struct should be used instead.
libunftp v0.21.1
Changes in this release
- Compile against Rust 1.92.0 in CI
- #547 Put metrics and proxy-protocol functionality behind features (
prometheusandproxy_protocol). - #548 Fix error message typos
- #541 Initial MLSD (Machine List Directory) command implementation (RFC 3659)
- #541 Fix MLST output formatting
- #541 Fix MLSx facts must have a terminating semicolon according to RFC 3659 section 7.2
- #541 Fix wrong use of metadata.uid() instead of metadata.gid()
- #540 Fix build with "ring" instead of "aws_lc_rs" feature
- Implement 550 error code for RNFR command
- Bump dependencies
New Contributors
- @Javex made their first contribution in #539
- @procr1337 made their first contribution in #540
Full Changelog: libunftp-0.21.0...libunftp-0.21.1
unftp-sbe-gcs v0.2.9
Changes in this release:
- Upgrade to libunftp v0.21.0
- Upgrade dependencies
unftp-sbe-fs-0.3.0
Changes in this release
- Upgrade to libunftp v0.21.0
- Breaking: Don't panic during Filesystem::new
- Upgrade dependencies