=================================
**Enhancements**
- 68: added full FTPS (FTP over SSL/TLS) support provided by new
TLS_FTPHandler class defined in pyftpdlib.contrib.handlers module.
- 86: pyftpdlib now reports all ls and MDTM timestamps as GMT times, as
recommended in RFC-3659. A FTPHandler.use_gmt_times attributed has
been added and can be set to False in case local times are desired
instead.
- 124: pyftpdlib now accepts command line options to configure a stand alone
anonymous FTP server when running pyftpdlib with python's -m option.
- 125: logs are now provided in a standardized format parsable by log
analyzers. FTPHandler class provides two new methods to standardize
both commands and transfers logging: log_cmd() and log_transfer().
- 127: added FTPHandler.masquerade_address_map option which allows you to
define multiple 1 to 1 mappings in case you run a FTP server with
multiple private IP addresses behind a NAT firewall with multiple
public IP addresses.
- 128: files and directories owner and group names and os.readlink are now
resolved via AbstractedFS methods instead of in format_list().
- 129, 139: added 4 new callbacks to FTPHandler class:
on_incomplete_file_sent(), on_incomplete_file_received(), on_login()
and on_logout().
- 130: added UnixAuthorizer and WindowsAuthorizer classes defined in the new
pyftpdlib.contrib.authorizers module.
- 131: pyftpdlib is now able to serve both IPv4 and IPv6 at the same time by
using a single socket.
- 133: AbstractedFS constructor now accepts two argumets: root and cmd_channel
breaking compatibility with previous version. Also, root and and cwd
attributes became properties. The previous bug consisting in resetting
the root from the ftp handler after user login has been fixed to ease
the development of subclasses.
- 134: enabled TCP_NODELAY socket option for the FTP command channels
resulting in pyftpdlib being twice faster.
- 135: Python 2.3 support has been dropped.
- 137: added new pyftpdlib.contrib.filesystems module within
UnixFilesystem class which permits the client to escape its home
directory and navigate the real filesystem.
- 138: added DTPHandler.get_elapsed_time() method which returns the transfer
elapsed time in seconds.
- 144: a "username" parameter is now passed to authorizer's
terminate_impersonation() method.
- 149: ftpserver.proto_cmds dictionary refactoring and get rid of
_CommandProperty class.
**Bug fixes**
- 120: an ActiveDTP() instance is not garbage collected in case a client
issuing PORT disconnects before establishing the data connection.
- 122: a wrong variable name was used in AbstractedFS.validpath method.
- 123: PORT command doesn't bind to correct address in case an alias is
created for the local network interface.
- 140: pathnames returned in PWD response should have double-quotes '"'
escaped.
- 143: EINVAL not properly handled causes server crash on OSX.
- 146: SIZE and MDTM commands are now rejected unless the "l" permission has
been specified for the user.
- 150: path traversal bug: it is possible to move/rename a file outside of the
user home directory.