Releases: FubarDevelopment/FtpServer
Preparation for Overhaul
Added
- Support for custom listener services #115
- LogOut for user when connection gets closed #93
- New interface
IMembershipProviderAsync
- New interface
Fixed
Changed
- Use many interfaces from ASP.NET Core 3.0
- Implicit TLS is now a core feature activated using
UseImplicitTls()
- Better decoupling of server and connection
QOL imrpovements
New
- Shell for the test FTP server
- Connection timeout configurable through the
FtpConnectionOptions
Fixed
- Issue #82
Implicit TLS and nullable reference types
New
- Support for nullable reference types
- Support for .NET Core 3.0
- Configurable maximum number of connections
- Async connection initialization
- Switch to ClaimsPrincipal
Fixed
- Implicit TLS
- EPSV ALL
Race conditions are bad
Shiny, more extension points
TL/DR:
New
- Authorization/authentication as per RFC 2228
- Account directories queryable (for an authmatic CWD to home directory)
- PAM authentication
- Unix file system support
- Usage of feature collections
- Middlewares for requests
- Middlewares for commands
- Concept of server commands
Changed
- Non-background upload for Google Drive is the default
- Big parts of the API are now obsolete in favor of the new feature collections
- Breaking API changes for:
- File system
- User information
Fixed
AUTH TLS
fails gracefully- Increased compatibility with
GnuTLS
-based applications SITE BLST
works again- Fixed deadlock in
MultiBindingTcpListener
- Thread safe increment/decrement for connection counter (fixes #68)
- The
.
directory will be returned again (fixes #56)
Future
There are plans to use the same infrastructure as ASP.NET Core 3.0 for
connection management, but this will mean that several target frameworks
will not be supported in version 4.0, like - for example - netstandard1.3
and net461
.
Detailed information
An exhaustive upgrade guide can be found in the documentation.
Quick fix
Test FTP Server Shell, fixes and finalization
Test FTP server
- Dockerfile, image availabe on Docker Hub
- Integrated shell
- Generic .NET Host
Fixes
- Issue #55 (Local port is queryable)
- Issue #56 (Better LIST output)
- File system UID/GID changes
- Fixed several causes of FTP client connection that stayed open
EPSV 2
: The2
isn't the port, it's the address family (2=IPv6)
Changed
- Completed transition to piplines/channels
- Switch to/from TLS works again
- Pausable services (FTP server, reading from network stream, etc....)
- PAM authentication module doesn't need .NET Core 3.0 any more
- It'll only work on Linux for now
Continued refactoring
Test FTP Server
- Configuration file
umask
support
Changed
- Continued restructuring
- Dispatcher for FTP commands
- Background commands are now handled the same way as foreground commands
- Non configured FTPS results in 500 instead of 421
- Data connection factory
- Transparent creation of a data connection (active or passive)
New
- Accept
AUTH SSL
, alias forAUTH TLS
- FTP command middleware
Fixes
- TELNET: "Interrupt Process" will be interpreted as "ABOR"
- TELNET: "DATA MARK" support
SYST
allowed without login
Preparation for switch to Kestrel
The code base was heavily refactored in preparation for a switch to the Kestrel server.
Many properties, methods and classes are now obsolete. The messages are giving hints so that you can fix the warnings yourself. The obsolete API will be removed with 4.0.
New
- Feature interfaces to be queried through
IFtpConnection.Features
- Lazy instantiation of FTP command handlers
- Using attributes for FTP command handlers and extensions
IFtpCommandActivator
that sets the FTP command handlers context- Quickstart sample
Fixed
- Fixed deadlock in
MultiBindingTcpListener
- MLST now returining a real list (bug introduced with v3.0.0-beta.5)
- Thread safe increment/decrement for connection counter (fixes #68)
Removed
IAccountInformation.AuthenticatedBy
: There's no reason for this
Breaking changes
Moved PromiscuousPasv
into PasvCommandOptions
The new location is a better fit.
FTP command handler not registgered in DI container
The FTP command handlers and extensions aren't registered in the service collection (for dependency injection) any more. We're now using implementations of the following DI services:
IFtpCommandHandlerScanner
which scans for types that may implement FTP command handlersIFtpCommandHandlerProvider
which returns information for all found FTP command handler types.
You can still add your FTP command handlers to the DI container, but those will be ignored from version 4.0 and up.
There are equivalent interfaces for FTP command handler extensions:
IFtpCommandHandlerExtensionScanner
IFtpCommandHandlerExtensionProvider
FTP command handlers require attributes
We're now able to write constructor-less FTP command handlers, but we now require new attributes.
FtpCommandHandlerAttribute
which gives the FTP command handler a name and defines if it needs a successful login or if it's abortableFtpCommandHandlerExtensionAttribute
is the equivalent ofFtpCommandHandlerAttribute
for FTP command handler extensions, likeOptsUtf8CommandExtension
forOPTS UTF8
FtpFeatureTextAttribute
defines the text to be returned by theFEAT
commandFtpFeatureFunctionAttribute
defines the function that returns the text to be returned by theFEAT
command
PAM authentication and UNIX file system support
New
- Unix file system
- File system root is the users home directory
- PAM authentication
- This allow authentication against Linux users
Improvements
GnuSslStream
is used for builds targeting .NET Framework 4.6.1- This avoids problems with clients using GnuTLS
Breaking changes
- The
FileSystem
property isn't part of theIUnixFileSystemEntry
interface anymore to avoid a chicken/egg problem