Skip to content

libunftp v0.22.0

Choose a tag to compare

@hannesdejager hannesdejager released this 08 Feb 18:37
· 16 commits to master since this release

Changes in this release:

  • #550 Split Authenticators from the Subject Resolving (UserDetail
    Providing) concern:
    • BREAKING: Refactored Authenticator trait to be non-generic and return Principal instead of a generic
      User
      type. This decouples authentication (verifying credentials) from user detail retrieval (obtaining full user
      information).
    • Introduced Principal struct representing an authenticated user's identity (username). This is the minimal
      information returned by authentication.
    • Introduced UserDetailProvider trait to convert a Principal into a full UserDetail implementation. This
      allows
      authentication and user detail lookup to be separated.
    • Introduced AuthenticationPipeline struct that combines an Authenticator and a UserDetailProvider to provide
      a
      complete authentication flow.
    • Added DefaultUserDetailProvider implementation that returns DefaultUser for convenience.
    • BREAKING: Updated all unftp-auth-* crates (unftp-auth-jsonfile, unftp-auth-pam, unftp-auth-rest) to
      use
      the new non-generic Authenticator trait.
    • Updated all examples and tests to use the new authentication pattern.
  • #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::new and Server::with_authenticator methods. The ServerBuilder
    struct should be used instead.