Version: 0.6.0 - Date: 2010-01-24¶Enhancements¶- Issue 68: added full FTPS (FTP over SSL/TLS) support.
- Issue 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.
- Issue 124: pyftpdlib now accepts command line options to configure a stand alone anonymous FTP server when running pyftpdlib with python's -m option.
- Issue 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.
- Issue 128: files and directories owner and group names and os.readlink are now resolved via AbstractedFS methods instead of in format_list().
- Issue 129: added 3 new callbacks to FTPHandler class: on_incomplete_file_sent(), on_incomplete_file_received() and on_login().
- Issue 130: added UnixAuthorizer and WindowsAuthorizer classes defined in the new pyftpdlib.contrib.authorizers module.
- Issue 131: pyftpdlib is now able to serve both IPv4 and IPv6 at the same time by using a single socket.
- Issue 133: AbstractedFS constructor now accepts two argumets: root and cmd_channel breaking compatibility with previous version. Also, root and cwd attributes became properties. The previous bug consisting in re-setting the root from the ftp handler after user login has been fixed to ease the development of subclasses.
- Issue 134: enabled TCP_NODELAY socket option for the FTP command channels resulting in pyftpdlib being twice faster.
- Issue 135: Python 2.3 support has been removed.
- Issue 137: added new pyftpdlib.contrib.filesystems module within UnixFilesystem class which permits the client to escape its home directory and navigate the real filesystem.
- Issue 138: added DTPHandler.get_elapsed_time() method which returns the transfer elapsed time in seconds.
Bugfixes¶- Issue 120: an ActiveDTP instance is not garbage collected in case a client issuing PORT disconnects before establishing the data connection.
- Issue 122: a wrong variable name was used in AbstractedFS.validpath method.
- Issue 123: PORT command doesn't bind to correct address in case an alias is created for the local network interface.
- Issue 140: pathnames returned in PWD response should have double-quotes '"' escaped.
API changes since 0.5.2¶- removed support for Python 2.3.
- all classes are now new-style classes.
- Added a new package in pyftpdlib namespace: "contrib". Modules (and classes) defined here:
- pyftpdlib.contrib.handlers.py (TLS_FTPHandler, TLS_FTPHandlerFactory)
- pyftpdlib.contrib.authorizers.py (UnixAuthorizer, WindowsAuthorizer)
- pyftpdlib.contrib.filesystems (UnixFilesystem)
- AbstractedFS class:
- __init__ method now accepts two arguments: root and cmd_channel.
- root and cwd attributes are now read-only properties.
- 3 new methods have been added:
- get_user_by_uid()
- get_group_by_gid()
- readlink()
- FTPHandler class:
- new class attributes:
- use_gmt_times
- tcp_no_delay
- masquerade_address_map
- new methods:
- on_incomplete_file_sent()
- on_incomplete_file_received()
- on_login()
- proto_cmds class attribute has been added. The FTPHandler class no longer relies on ftpserver.proto_cmds global dictionary but on ftpserver.FTPHandler.proto_cmds instead.
- FTPServer class:
- max_cons attribute defaults to 512 by default instead of 0 (unlimited).
- DummyAuthorizer class:
- ValueError exceptions are now raised instead of AuthorizerError
- DTPHandler class:
- get_elapsed_time() method has been added.
Migration notes¶Some of the changes introduced in 0.6.0 break compatibility with previous 0.5.x serie. In particular you should be careful in case you're using a customized file system class defining an __init__ method since AbstractedFS constructor now expects two arguments.
|