[Python-modules-commits] [python-pyftpdlib] 06/11: Import python-pyftpdlib_1.4.0.orig.tar.gz

Wolfgang Borgert debacle at moszumanska.debian.org
Sun Nov 22 17:51:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

debacle pushed a commit to branch master
in repository python-pyftpdlib.

commit da5dc2d853b22a412fdba704a9b61bce1ed2ea80
Author: W. Martin Borgert <debacle at debian.org>
Date:   Sun Nov 22 17:29:17 2015 +0100

    Import python-pyftpdlib_1.4.0.orig.tar.gz
---
 .travis.yml                                   |  20 +
 CREDITS                                       |  20 +-
 HISTORY                                       | 720 --------------------
 HISTORY.rst                                   | 766 +++++++++++++++++++++
 INSTALL                                       |   4 -
 MANIFEST.in                                   |   2 +
 Makefile                                      |  71 ++
 PKG-INFO                                      |  33 -
 README                                        |  12 -
 README.rst                                    | 255 +++++++
 demo/anti_flood_ftpd.py                       |   6 +-
 demo/basic_ftpd.py                            |   7 +-
 demo/md5_ftpd.py                              |   3 +-
 demo/multi_proc_ftp.py                        |   3 +-
 demo/multi_thread_ftp.py                      |   3 +-
 demo/throttled_ftpd.py                        |   3 +-
 demo/tls_ftpd.py                              |   9 +-
 demo/unix_daemon.py                           |  40 +-
 demo/unix_ftpd.py                             |   6 +-
 demo/winnt_ftpd.py                            |   6 +-
 docs/Makefile                                 | 177 +++++
 docs/README.rst                               |  15 +
 docs/_static/copybutton.js                    |  57 ++
 docs/_static/favicon.ico                      | Bin 0 -> 15086 bytes
 docs/_static/logo.png                         | Bin 0 -> 13008 bytes
 docs/_static/sidebar.js                       | 161 +++++
 docs/_template/globaltoc.html                 |  12 +
 docs/_template/indexcontent.html              |   4 +
 docs/_template/indexsidebar.html              |   8 +
 docs/_template/page.html                      |  66 ++
 docs/_themes/pydoctheme/static/pydoctheme.css | 187 +++++
 docs/_themes/pydoctheme/theme.conf            |  23 +
 docs/adoptions.rst                            | 340 ++++++++++
 docs/api.rst                                  | 615 +++++++++++++++++
 docs/benchmarks.rst                           | 274 ++++++++
 docs/conf.py                                  | 262 +++++++
 docs/faqs.rst                                 | 385 +++++++++++
 docs/index.rst                                |  27 +
 docs/install.rst                              |  43 ++
 docs/make.bat                                 | 242 +++++++
 docs/rfc-compliance.rst                       | 296 ++++++++
 docs/tutorial.rst                             | 536 +++++++++++++++
 make.bat                                      |  82 +++
 pyftpdlib/__init__.py                         |  17 +-
 pyftpdlib/__main__.py                         |  13 +-
 pyftpdlib/_compat.py                          |  19 +-
 pyftpdlib/authorizers.py                      | 121 ++--
 pyftpdlib/contrib/authorizers.py              |   9 +-
 pyftpdlib/contrib/filesystems.py              |   5 +-
 pyftpdlib/contrib/handlers.py                 |   6 +-
 pyftpdlib/filesystems.py                      |  92 +--
 pyftpdlib/ftpserver.py                        |  28 +-
 pyftpdlib/handlers.py                         | 528 ++++++++-------
 pyftpdlib/ioloop.py                           | 126 ++--
 pyftpdlib/log.py                              |  26 +-
 pyftpdlib/servers.py                          |  58 +-
 setup.cfg                                     |   5 -
 setup.py                                      | 182 ++---
 test/bench.py                                 | 146 ++--
 test/test_contrib.py                          | 575 +++++++++-------
 test/test_ftpd.py                             | 937 ++++++++++++--------------
 tox.ini                                       |  29 +
 62 files changed, 6612 insertions(+), 2111 deletions(-)

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..544db06
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,20 @@
+language: python
+python:
+    - 2.6
+    - 2.7
+    - 3.2
+    - 3.3
+    - 3.4
+    - pypy
+install:
+    - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then pip install unittest2; fi
+script:
+    - pip install flake8
+    - python setup.py install
+    - python test/test_ftpd.py
+    - python test/test_contrib.py
+    - make flake8
+os:
+    - linux
+    - osx
+
diff --git a/CREDITS b/CREDITS
index a65d16c..34fdfeb 100644
--- a/CREDITS
+++ b/CREDITS
@@ -129,7 +129,7 @@ D: Bug report #104 (socket.accept() might return None instead of a valid address
 N: Ben Timby
 E: btimby at gmail.com
 C: USA
-D: issues 127, 229
+D: issues 127, 229, 265
 
 N: Bernd Deichmann
 W: http://deichmann-edv.de/
@@ -160,5 +160,21 @@ N: Arfrever Frehtes Taifersar Arahesis
 E: arfrever.fta at gmail.com
 D: issue 239
 
-N tlockert
+N: tlockert
 D: issue 238
+
+N: Juan J. Martinez
+E: juan at memset.com
+D: issue 263
+
+N: Michael Ross
+E: michaelross757 at gmail.com
+D: issue 273
+
+E: dn at devicenull.org
+D: issue 280
+
+N: Dmitry Panov
+C: UK
+E: dop251 at gmail.com
+D: issue 262
diff --git a/HISTORY b/HISTORY
deleted file mode 100644
index 8c994e0..0000000
--- a/HISTORY
+++ /dev/null
@@ -1,720 +0,0 @@
-Bug tracker at http://code.google.com/p/pyftpdlib/issues/list
-
-
-History
-=======
-
-Version: 1.2.0 - Date: 2013-04-22
----------------------------------
-
-ENHANCEMENTS
-
- * 250: added FTPServer's backlog argument controlling the queue of accepted
-        connections.
- * 251: IOLoop.fileno() method for epoll() and kqueue() pollers.
- * 252: FTPServer 'address' parameter can also be an existent socket object.
-
-BUG FIXES
-
- * #245: ThreadedFTPServer hogs all CPU resources after a client connects.
-
-
-Version: 1.1.0 - Date: 2013-04-09
----------------------------------
-
-ENHANCEMENTS
-
- * #240: enabled "python -m pyftpdlib" cmdline syntax and got rid of
-         "python -m pyftpdlib.ftpserver" syntax which was deprecated in 1.0.0.
- * #241: empty passwords are now allowed for anonymous and other users.
- * #244: pysendfile is no longer a dependency if we're on Python >= 3.3 as
-         os.sendfile() will be used instead.
- * #247: on python 3.3 use time.monotonic() instead of time.time() so that the
-         scheduler won't break in case of system clock updates.
- * #248: bench.py memory usage is highly overestimated.
-
-BUG FIXES
-
- * #238: username is not logged in case of failed authentication.
-         (patch by tlockert)
- * #243: an erroneous error message is given in case the address passed to
-         bind() is already in use.
- * #245: ThreadedFTPServer hogs all CPU resources after a client connects.
- * #246: ThrottledDTPHandler was broken.
-
-INCOMPATIBLE API CHANGES
-
- * "python -m pyftpdlib.ftpserver" cmdline syntax doesn't work anymore
-
-
-Version: 1.0.1 - Date: 2013-02-22
----------------------------------
-
-BUG FIXES
-
- * #236: MultiprocessFTPServer and ThreadedFTPServer hanging in case of failed
-         authentication.
-
-
-Version: 1.0.0 - Date: 2013-02-19
----------------------------------
-
-ENHANCEMENTS
-
- * #76:  python 3.x porting.
- * #198: full unicode support (RFC-2640).
- * #203: asyncore IO loop has been rewritten from scratch and now supports
-         epoll() on Linux and kqueue() on OSX/BSD.
-         Also select() (Windows) and poll() pollers have been rewritten
-         resulting in pyftpdlib being an order of magnitude faster and more
-         scalable than ever.
- * #204: a new FilesystemError exception class is available in order send
-         custom error strings to client from an AbstracteFS subclass.
- * #207: added on_connect() and on_disconnect() callback methods to FTPHandler
-         class.
- * Issues 212: provided two new classes:
-           - pyftpdlib.servers.ThreadedFTPServer
-           - pyftpdlib.servers.MultiprocessFTPServer  (POSIX only)
-         They can be used to change the base async-based concurrecy model and
-         use a multiple threads / processes based approach instead.
-         Your FTPHandler subclasses will finally be free to block! ;)
- * #219: it is not possible to instantiate different FPTS classes using
-         different SSL certificates.
- * #213: DummyAuthorizer.validate_authentication() has changed in that it
-         no longer returns a bool but instead raises AuthenticationFailed()
-         exception to signal a failed authentication.
-         This has been done in order allow customized error messages on failed
-         auth. Also it now expects a third 'handler' argument which is passed in
-         order to allow IP-based authentication logic. Existing code overriding
-         validate_authentication() must be changed in accordance.
- * #223: ftpserver.py has been split in submodules.
- * #225: logging module is now used for logging. ftpserver.py's log(), logline()
-         and logerror() functions are deprecated.
- * #231: FTPHandler.ftp_* methods implementing filesystem-related commands
-         now return a meaningful value on success (tipically the path name).
- * #234: FTPHandler and DTPHandler class provide a nice __repr__.
- * #235: FTPServer.serve_forever() has a new handle_exit parameter which
-         can be set to False in order to avoid handling SIGTERM/SIGINT signals
-         and logging server start and stop.
- * #236: big logging refactoring; by default only useful messages are logged
-         (as opposed to *all* commands and responses exchanged by client and
-         server).  Also, FTPHandler has a new 'log_prefix' attribute which can
-         be used to format every line logged.
-
-BUG FIXES
-
- * #131: IPv6 dual-stack support was broken.
- * #206: can't change directory (CWD) when using UnixAuthorizer and process
-         cwd is == "/root".
- * #211: pyftpdlib doesn't work if deprecated py-sendfile 1.2.4 module is
-         installed.
- * #215: usage of FTPHandler.sleeping attribute could lead to 100% CPU usage.
-         FTPHandler.sleeping is now removed. self.add_channel() /
-         self.del_channel() should be used instead.
- * #222: an unhandled exception in handle_error() or close() can cause server
-         to crash.
- * #229: backslashes on UNIX are not handled properly.
- * #232: hybrid IPv4/IPv6 support is broken.  (patch by Claus Klein)
-
-NEW MODULES
-
-All the code contained in pyftpdlib/ftpserver.py and pyftpdlib/contrib
-namespaces has been moved here:
-
- * pyftpdlib.authorizers
- * pyftpdlib.filesystems
- * pyftpdlib.servers
- * pyftpdlib.handlers
- * pyftpdlib.log
-
-NEW APIS
-
- * pyftpdlib.authorizers.AuthenticationFailed
- * pyftpdlib.filesystems.FilesystemError
- * pyftpdlib.servers.ThreadedFTPServer
- * pyftpdlib.servers.MultiprocessFTPServer
- * pyftpdlib.handlers.FTPHandler's on_connect() and on_disconnect() callbacks.
- * pyftpdlib.handlers.FTPHandler.ftp_* methods return a meaningful value on
-         success.
- * FTPServer, FTPHandler, DTPHandler new ioloop attribute.
- * pyftpdlib.lib.ioloop.IOLoop class (not supposed to be used directly)
- * pyftpdlib.handlers.FTPHandler.log_prefix
-
-DEPRECATED NAME SPACES
-
- * pyftpdlib.ftpserver
- * pyftpdlib.contrib.*
-
-INCOMPATIBLE API CHANGES
-
- * All the main classes have been extracted from ftpserver.py and split into sub
-         modules.
-
-  ----------------------------------------------------------------------------
-  BEFORE                              | NOW
-  ----------------------------------------------------------------------------
-  pyftpdlib.ftpserver.FTPServer       | pyftpdlib.servers.FTPServer
-  pyftpdlib.ftpserver.FTPHandler      | pyftpdlib.handlers.FTPHandler
-  pyftpdlib.ftpserver.DTPHandler      | pyftpdlib.handlers.DTPHandler
-  pyftpdlib.ftpserver.DummyAuthorizer | pyftpdlib.authorizers.DummyAuthorizer
-  pyftpdlib.ftpserver.AbstractedFS    | pyftpdlib.filesystems.AbstractedFS
-  ----------------------------------------------------------------------------
-
-  Same for pyftpflib.contribs namespace which is deprecated.
-
-  -------------------------------------------------------------------------------------------
-  BEFORE                                          | NOW
-  -------------------------------------------------------------------------------------------
-  pyftpdlib.contrib.handlers.TLS_FTPHandler       | pyftpdlib.handlers.TLS_FTPHandler
-  pyftpdlib.contrib.authorizers.UnixAuthorizer    | pyftpdlib.authorizers.UnixAuthorizer
-  pyftpdlib.contrib.authorizers.WindowsAuthorizer | pyftpdlib.authorizers.WindowsAuthorizer
-  pyftpdlib.contrib.filesystems.UnixFilesystem    | pyftpdlib.filesystems.UnixFilesystem
-  -------------------------------------------------------------------------------------------
-
-  Both imports from pyftpdlib.ftpserver and pyftpdlib.contrib.* will still work
-  though and will raise a DeprecationWarning exception.
-
- * DummyAuthorizer.validate_authentication() signature has changed. A third
-   'handler' argument is now expected.
-
- * DummyAuthorizer.validate_authentication() is no longer expected to return a
-   bool. Instead it is supposed to raise AuthenticationFailed(msg) in case of
-   failed authentication and return None otherwise.
-   (see issue 213)
-
- * ftpserver.py's log(), logline() and logerror() functions are deprecated.
-   logging module is now used instead. See:
-   http://code.google.com/p/billiejoex/wiki/Tutorial#4.2_-_Logging_management
-
- * Unicode is now used instead of bytes pretty much everywhere.
-
- * FTPHandler.__init__() and TLS_FTPHandler.__init__() signatures have changed:
-   - __init__(conn, server)
-   + __init__(conn, server, ioloop=None)
-
- * FTPServer.server_forever() signature has changed:
-   - serve_forever(timeout=1.0, use_poll=False, count=None)
-   + serve_forever(timeout=1.0, blocking=True, handle_exit=True)
-
- * FTPServer.close_all() signature has changed:
-   - close_all(ignore_all=False)
-   + close_all()
-
- * FTPServer.serve_forever() and FTPServer.close_all() are no longer class
-   methods.
-
- * asyncore.dispatcher and asynchat.async_chat classes has been replaced by:
-   - pyftpdlib.ioloop.Acceptor
-   - pyftpdlib.ioloop.Connector
-   - pyftpdlib.ioloop.AsyncChat
-   Any customization relying on asyncore (e.g. use of asyncore.socket_map to
-   figure out the number of connected clients) will no longer work.
-
- * pyftpdlib.ftpserver.CallLater and pyftpdlib.ftpserver.CallEvery are
-   deprecated. Instead, use self.ioloop.call_later() and self.ioloop.call_every()
-   from within the FTPHandler.  Also delay() method of the returned object has
-   been removed.
-
- * FTPHandler.sleeping attribute is removed. self.add_channel() and
-   self.del_channel() should be used to pause and restart the handler.
-
-MINOR INCOMPATIBLE API CHANGES
-
- - FTPHandler.respond(resp)
- + FTPHandler.respond(resp, logfun=logger.debug)
-
- - FTPHandler.log(resp)
- + FTPHandler.log(resp, logfun=logger.info)
-
- - FTPHandler.logline(resp)
- + FTPHandler.logline(resp, logfun=logger.debug)
-
-
-Version: 0.7.0 - Date: 2012-01-25
----------------------------------
-
-ENHANCEMENTS
-
- * #152: uploads (from server to client) on UNIX are now from 2x (Linux) to 3x
-         (OSX) faster because of sendfile(2) system call usage.
- * #155: AbstractedFS "root" and "cwd" are no longer read-only properties but
-         can be set via setattr().
- * #168: added FTPHandler.logerror() method. It can be overridden to provide
-         more information (e.g. username) when logging exception tracebacks.
- * #174: added support for SITE CHMOD command (change file mode).
- * #177: setuptools is now used in setup.py
- * #178: added anti flood script in demo directory.
- * #181: added CallEvery class to call a function every x seconds.
- * #185: pass Debian licenscheck tool.
- * #189: the internal scheduler has been rewritten from scratch and it is an
-         order of magnitude faster, especially for operations like cancel()
-         which are involved when clients are disconnected (hence invoked very
-         often). Some benchmarks:
-           - schedule         : +0.5x
-           - reschedule : +1.7x
-           - cancel           : +477x  (with 1 milion scheduled functions)
-           - run:                   : +8x
-         Also, a single scheduled function now consumes 1/3 of the memory thanks
-         to __slots__ usage.
- * #195: enhanced unix_daemon.py script which (now uses python-daemon library).
- * #196: added callback for failed login attempt.
- * #200: FTPServer.server_forever() is now a class method.
- * #202: added benchmark script.
-
-BUG FIXES
-
- * #156: data connection must be closed before sending 226/426 reply. This was
-         against RFC-959 and was causing problems with older FTP clients.
- * #161: MLSD 'unique' fact can provide the same value for files having a
-         similar device/inode but that in fact are different.
-         (patch by Andrew Scheller)
- * #162: (FTPS) SSL shutdown() is not invoked for the control connection.
- * #163: FEAT erroneously reports MLSD. (patch by Andrew Scheller)
- * #166: (FTPS) an exception on send() can cause server to crash (DoS).
- * #167: fix some typos returned on HELP.
- * #170: PBSZ and PROT commands are now allowed before authentication fixing
-         problems with non-compliant FTPS clients.
- * #171: (FTPS) an exception when shutting down the SSL layer can cause server
-         to crash (DoS).
- * #173: file last modification time shown in LIST response might be in a
-         language different than English causing problems with some clients.
- * #175: FEAT response now omits to show those commands which are removed from
-         proto_cmds map.
- * #176: SO_REUSEADDR option is now used for passive data sockets to prevent
-         server running out of free ports when using passive_ports directive.
- * #187: match proftpd LIST format for files having last modification time
-         > 6 months.
- * #188: fix maximum recursion depth exceeded exception occurring if client
-         quickly connects and disconnects data channel.
- * #191: (FTPS) during SSL shutdown() operation the server can end up in an
-         infinite loop hogging CPU resources.
- * #199: UnixAuthorizer with require_valid_shell option is broken.
-
-MAJOR API CHANGES SINCE 0.6.0:
-
- * New FTPHandler.use_sendfile attribute.
- * sendfile() is now automatically used instead of plain send() if
-   pysendfile module is installed.
- * FTPServer.serve_forever() is a classmethod.
- * AbstractedFS root and cwd properties can now be set via setattr().
- * New CallLater class.
- * New FTPHandler.on_login_failed(username, password) method.
- * New FTPHandler.logerror(msg) method.
- * New FTPHandler.log_exception(instance) method.
-
-
-Version: 0.6.0 - Date: 2011-01-24
----------------------------------
-
-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.
-
-MAJOR API CHANGES SINCE 0.5.2
-
- * dropped Python 2.3 support.
- * all classes are now new-style classes.
- * AbstractedFS class:
-     * __init__ 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()
-       - on_logout()
-       - log_cmd()
-       - log_transfer()
-     * 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).
-     - server_forever()'s map argument is gone.
- * DummyAuthorizer:
-     - ValueError exceptions are now raised instead of AuthorizerError.
-     - terminate_impersonation() method now expects a "username" parameter.
- * DTPHandler.get_elapsed_time() method has been added.
- * Added a new package in pyftpdlib namespace: "contrib". Modules (and classes)
-   defined here:
-     - pyftpdlib.contrib.handlers.py (TLS_FTPHandler)
-     - pyftpdlib.contrib.authorizers.py (UnixAuthorizer, WindowsAuthorizer)
-     - pyftpdlib.contrib.filesystems (UnixFilesystem)
-
-MINOR API CHANGES SINCE 0.5.2
-
- * FTPHandler renamed objects:
-     - data_server -> _dtp_acceptor
-     - current_type -> _current_type
-     - restart_position -> _restart_position
-     - quit_pending -> _quit_pending
-     - af -> _af
-     - on_dtp_connection -> _on_dtp_connection
-     - on_dtp_close -> _on_dtp_close
-     - idler -> _idler
- * AbstractedFS.rnfr attribute moved to FTPHandler._rnfr.
-
-
-Version: 0.5.2 - Date: 2009-09-14
----------------------------------
-
-ENHANCEMENTS
-
- * #103: added unix_daemon.py script.
- * #108: a new ThrottledDTPHandler class has been added for limiting the speed
-         of downloads and uploads.
-
-BUG FIXES
-
- * #100: fixed a race condition in FTPHandler constructor which could throw an
-         exception in case of connection bashing (DoS).  (thanks Bram Neijt)
- * #102: FTPServer.close_all() now removes any unfired delayed call left behind
-         to prevent potential memory leaks.
- * #104: fixed a bug in FTPServer.handle_accept() where socket.accept() could
-         return None instead of a valid address causing the server to crash.
-         (OS X only, reported by Wentao Han)
- * #104: an unhandled EPIPE exception might be thrown by asyncore.recv() when
-         dealing with ill-behaved clients on OS X . (reported by Wentao Han)
- * #105: ECONNABORTED might be thrown by socket.accept() on FreeBSD causing the
-         server to crash.
- * #109: an unhandled EBADF exception might be thrown when using poll() on OSX
-         and FreeBSD.
- * #111: the license used was not MIT as stated in source files.
- * #112: fixed a MDTM related test case failure occurring on 64 bit OSes.
- * #113: fixed unix_ftp.py which was treating anonymous as a normal user.
- * #114: MLST is now denied unless the "l" permission has been specified for the
-         user.
- * #115: asyncore.dispatcher.close() is now called before doing any other
-         cleanup operation when client disconnects. This way we avoid an endless
-         loop which hangs the server in case an exception is raised in close()
-         method. (thanks Arkadiusz Wahlig)
- * #116: extra carriage returns were added to files transferred in ASCII mode.
- * #118: CDUP always changes to "/".
- * #119: QUIT sent during a transfer caused a memory leak.
-
-
-API CHANGES SINCE 0.5.1:
-
- * ThrottledDTPHandler class has been added.
- * FTPHandler.process_command() method has been added.
-
-
-Version: 0.5.1 - Date: 2009-01-21
----------------------------------
-
-ENHANCEMENTS
-
- * #79: added two new callback methods to FTPHandler class to handle
-        "on_file_sent" and "on_file_received" events.
- * #82: added table of contents in documentation.
- * #92: ASCII transfers are now 200% faster on those systems using "\r\n" as
-        line separator (typically Windows).
- * #94: a bigger buffer size for send() and recv() has been set resulting in a
-        considerable speedup (about 40% faster) for both incoming and outgoing
-        data transfers.
- * #98: added preliminary support for SITE command.
- * #99: a new script implementing FTPS (FTP over TLS/SSL) has been added to the
-        demo directory. See:
-        http://code.google.com/p/pyftpdlib/source/browse/trunk/demo/tls_ftpd.py
-
-BUG FIXES
-
- * #78: the idle timeout of passive data connections gets stopped in case of
-        rejected "site-to-site" connections.
- * #80: demo/md5_ftpd.py should use hashlib module instead of the deprecated md5
-        module.
- * #81: fixed some tests which were failing on SunOS.
- * #84: fixed a very rare unhandled exception which could occur when retrieving
-        the first bytes of a corrupted file.
- * #85: a positive MKD response is supposed to include the name of the new
-        directory.
- * #87: SIZE should be rejected when the current TYPE is ASCII.
- * #88: REST should be rejected when the current TYPE is ASCII.
- * #89: "TYPE AN" was erroneously treated as synonym for "TYPE A" when "TYPE L7"
-        should have been used instead.
- * #90: an unhandled exception can occur when using MDTM against a file modified
-        before year 1900.
- * #91: an unhandled exception can occur in case accept() returns None instead
-        of a socket (it happens sometimes).
- * #95: anonymous is now treated as any other case-sensitive user.
-
-API CHANGES SINCE 0.5.0:
-
- * FTPHandler gained a new "_extra_feats" private attribute.
- * FTPHandler gained two new methods: "on_file_sent" and "on_file_received".
-
-
-Version: 0.5.0 - Date: 2008-09-20
----------------------------------
-
-ENHANCEMENTS
-
- * #72: pyftpdlib now provides configurable idle timeouts to disconnect client
-        after a long time of inactivity.
- * #73: imposed a delay before replying for invalid credentials to minimize the
-        risk of brute force password guessing (RFC-1123).
- * #74: it is now possible to define permission exceptions for certain
-        directories (e.g. creating a user which does not have write permission
-        except for one sub-directory in FTP root).
- * #    Improved bandwidth throttling capabilities of demo/throttled_ftpd.py
-        script  by having used the new CallLater class which drastically reduces
-        the number of time.time() calls.
-
-BUG FIXES
-
- * #62: some unit tests were failing on certain dual core machines.
- * #71: socket handles are leaked when a data transfer is in progress and user
-        QUITs.
- * #75: orphaned file was left behind in case STOU failed for insufficient user
-        permissions.
- * #77: incorrect OOB data management on FreeBSD.
-
-API CHANGES SINCE 0.4.0:
-
- * FTPHandler, DTPHandler, PassiveDTP and ActiveDTP classes gained a new timeout
-   class attribute.
- * DummyAuthorizer class gained a new override_perm method.
- * A new class called CallLater has been added.
- * AbstractedFS.get_stat_dir method has been removed.
-
-
-Version: 0.4.0 - Date: 2008-05-16
----------------------------------
-
-ENHANCEMENTS
-
- * #65: It is now possible to assume the id of real users when using system
-        dependent authorizers.
- * #67: added IPv6 support.
-
-BUG FIXES
-
- * #64: Issue #when authenticating as anonymous user when using UNIX and Windows
-        authorizers.
- * #66: WinNTAuthorizer does not determine the real user home directory.
- * #69: DummyAuthorizer incorrectly uses class attribute instead of instance
-        attribute for user_table dictionary.
- * #70: a wrong NOOP response code was given.
-
-API CHANGES SINCE 0.3.0:
-
- * DummyAuthorizer class has now two new methods: impersonate_user() and
-         terminate_impersonation().
-
-
-Version: 0.3.0 - Date: 2008-01-17
----------------------------------
-
-ENHANCEMENTS
-
- * #42: implemented FEAT command (RFC-2389).
- * #48: real permissions, owner, and group for files on UNIX platforms are now
-        provided when processing LIST command.
- * #51: added the new demo/throttled_ftpd.py script.
- * #52: implemented MLST and MLSD commands (RFC-3659).
- * #58: implemented OPTS command (RFC-2389).
- * #59: iterators are now used for calculating requests requiring long time to
-        complete (LIST and MLSD commands) drastically increasing the daemon
-        scalability when dealing with many connected clients.
- * #61: extended the set of assignable user permissions.
-
-BUG FIXES
-
- * #41: an unhandled exception occurred on QUIT if user was not yet
-        authenticated.
- * #43: hidden the server identifier returned in STAT response.
- * #44: a wrong response code was given on PORT in case of failed connection
-        attempt.
- * #45: a wrong response code was given on HELP if the provided argument wasn't
-        recognized as valid command.
- * #46: a wrong response code was given on PASV in case of unauthorized FXP
-        connection attempt.
- * #47: can't use FTPServer.max_cons option on Python 2.3.
- * #49: a "550 No such file or directory" was returned when LISTing a directory
-        containing a broken symbolic link.
- * #50: DTPHandler class did not respect what specified in ac_out_buffer_size
-        attribute.
- * #53: received strings having trailing white spaces was erroneously stripped.
- * #54: LIST/NLST/STAT outputs are now sorted by file name.
- * #55: path traversal vulnerability in case of symbolic links escaping user's
-        home directory.
- * #56: can't rename broken symbolic links.
- * #57: invoking LIST/NLST over a symbolic link which points to a direoctory
-        shouldn't list its content.
- * #60: an unhandled IndexError exception error was raised in case of certain
-        bad formatted PORT requests.
-
-API CHANGES SINCE 0.2.0:
-
- * New IteratorProducer and BufferedIteratorProducer classes have been added.
- * DummyAuthorizer class changes:
-     * The permissions management has been changed and the set of available
-       permissions have been extended (see Issue #61). add_user() method
-       now accepts "eladfm" permissions beyond the old "r" and "w".
-     * r_perm() and w_perm() methods have been removed.
-     * New has_perm() and get_perms() methods have been added.
-
- * AbstractedFS class changes:
-     * normalize() method has been renamed in ftpnorm().
-     * translate() method has been renamed in ftp2fs().
-     * New methods: fs2ftp(), stat(), lstat(), islink(), realpath(), lexists(),
-       validpath().
-     * get_list_dir(), get_stat_dir() and format_list() methods now return an
-       iterator object instead of a string.
-     * format_list() method has a new "ignore_err" keyword argument.
- * global debug() function has been removed.
-
-
-Version: 0.2.0 - Date: 2007-09-17
----------------------------------
-
-MAJOR ENHANCEMENTS
-
- * #5: it is now possible to set a maximum number of connecions and a maximum
-       number of connections from the same IP address.
- * #36: added support for FXP site-to-site transfer.
- * #39: added NAT/Firewall support with PASV (passive) mode connections.
- * #40: it is now possible to set a range of ports to use for passive
-        connections.
-
-RFC-RELATED ENHANCEMENTS
-
- * #6: accept TYPE AN and TYPE L8 as synonyms for TYPE ASCII and TYPE Binary.
- * #7: a new USER command can now be entered at any point to begin the login
-       sequence again.
- * #10: HELP command arguments are now accepted.
- * #12: 554 error response is now returned on RETR/STOR if RESTart fails.
- * #15: STAT used with an argument now returns directory LISTing over the
-        command channel (RFC-959).
-
-SECURITY ENHANCEMENTS
-
- * #3: stop buffering when extremely long lines are received over the command
-       channel.
- * #11: data connection is now rejected in case a privileged port is specified
-        in PORT command.
- * #25: limited the number of attempts to find a unique filename when
-        processing STOU command.
-
-USABILITY ENHANCEMENTS
-
- * #    Provided an overridable attribute to easily set number of maximum login
-        attempts before disconnecting.
- * #    Docstrings are now provided for almost every method and function.
- * #30: HELP response now includes the command syntax.
- * #31: a compact list of recognized commands is now provided on HELP.
- * #32: a detailed error message response is not returned to client in
-         case the transfer is interrupted for some unexpected reason.
- * #38: write access can now be optionally granted for anonymous user.
-
-TEST SUITE ENHANCEMENTS
-
- * #   File creation/removal moved into setUp and tearDown methods to avoid
-       leaving behind orphaned temporary files in the event of a test suite
-       failure.
- * #7: added test case for USER provided while already authenticated.
- * #7: added test case for REIN while a transfer is in progress.
- * #28: added ABOR tests.
-
-BUG FIXES
-
- * #4: socket's "reuse_address" feature was used after the socket's binding.
- * #8: STOU string response didn't follow RFC-1123 specifications.
- * #9: corrected path traversal vulnerability affecting file-system path
-       translations.
- * #14: a wrong response code was returned on CDUP.
- * #17: SIZE is now rejected for not regular files.
- * #18: a wrong ABOR response code type was returned.
- * #19: watch for STOU preceded by REST which makes no sense.
- * #20: "attempted login" counter wasn't incremented on wrong username.
- * #21: STAT wasn't permitted if user wasn't authenticated yet.
- * #22: corrected memory leaks occurring on KeyboardInterrupt/SIGTERM.
- * #23: PASS wasn't rejected when user was already authenticated.
- * #24: Implemented a workaround over os.strerror() for those systems where it
-        is not available (Python CE).
- * #24: problem occurred on Windows when using '\\' as user's home directory.
- * #26: select() in now used by default instead of poll() because of a bug
-        inherited from asyncore.
- * #33: some FTPHandler class attributes wasn't resetted on REIN.
- * #35: watch for APPE preceded by REST which makes no sense.
-
-
-Version: 0.1.1 - Date: 2007-03-27
-----------------------------------
-
- * Port selection on PASV command has been randomized to prevent a remote user
-   to guess how many data connections are in progress on the server.
- * Fixed bug in demo/unix_ftpd.py script.
- * ftp_server.serve_forever now automatically re-use address if current system
-   is posix.
- * License changed to MIT.
-
-
-Version: 0.1.0 - Date: 2007-02-26
-----------------------------------
-
- * First proof of concept beta release.
diff --git a/HISTORY.rst b/HISTORY.rst
new file mode 100644
index 0000000..4165aa1
--- /dev/null
+++ b/HISTORY.rst
@@ -0,0 +1,766 @@
+Bug tracker at https://github.com/giampaolo/pyftpdlib/issues
+
+Version: 1.4.0 - Date: 2014-06-03
+=================================
+
+**Enhancements**
+
+- #284: documentation was turned into RsT and hosted on pythonhosted.org
+- #293: project was migrated from Google Code to Github. Code was migrated from
+  SVN to GIT.
+- #294: use tox to automate testing on multiple python versions.
+- #295: use travis-ci for continuos test integration.
+- #298: pysendfile and PyOpenSSL are now listed as extra deps in setup.py.
+
+**Bug fixes**
+
+- #296: TypeError when using recent version of PyOpenSSL.
+- #297: listen() may raise EBADF in case of many connections.
+
+
+Version: 1.3.1 - Date: 2014-04-12
+=================================
+
+**Enhancements**
+
+- #262: FTPS is now able to load a certificate chain file.  (patch by
+  Dmitry Panov)
+- #277: added a make file for running tests and for other repetitive tasks
+  (also for Windows).
+- #281: tarballs are now hosted on PYPI.
+- #282: support for /dev/poll on Solaris.
+- #285: test suite requires unittest2 module on python < 2.7.
+
+**Bug fixes**
+
+- #261: (FTPS) SSL shutdown does not properly work on Windows.
+- #280: (Python 2) unable to complete directory listing with invalid UTF8
+  characters. (patch by dn at devicenull.org)
+- #283: always use a single 'pyftpdlib' logger.
+
+
+Version: 1.3.0 - Date: 2013-11-07
+=================================
+
+**Enhancements**
+
+- #253: benchmark script's new --timeout option.
+- #270: new -V / --verbose cmdline option to enable a more verbose logging.
+
+**Bug fixes**
+
+- #254: bench.py script hadn't been ported to Python 3.
+- #263: MultiprocessFTPServer leaks memory and file descriptors.  (patch by
+  Juan J. Martinez)
+- #265: FTPServer class cannot be used with Circus.
+- #272: pyftpdlib fails when imported on OpenBSD because of Python bug
+  http://bugs.python.org/issue3770
+- #273: IOLoop.fileno() on BSD systems raises AttributeError.  (patch by
+  Michael Ross)
+
+
+Version: 1.2.0 - Date: 2013-04-22
+=================================
+
+**Enhancements**
+
+- #250: added FTPServer's backlog argument controlling the queue of accepted
+        connections.
+- #251: IOLoop.fileno() method for epoll() and kqueue() pollers.
+- #252: FTPServer 'address' parameter can also be an existent socket object.
+
+**Bug fixes**
+
+- #245: ThreadedFTPServer hogs all CPU resources after a client connects.
+
+
+Version: 1.1.0 - Date: 2013-04-09
+=================================
+
+**Enhancements**
+
+- #240: enabled "python -m pyftpdlib" cmdline syntax and got rid of
+  "python -m pyftpdlib.ftpserver" syntax which was deprecated in 1.0.0.
+- #241: empty passwords are now allowed for anonymous and other users.
+- #244: pysendfile is no longer a dependency if we're on Python >= 3.3 as
+  os.sendfile() will be used instead.
+- #247: on python 3.3 use time.monotonic() instead of time.time() so that the
+  scheduler won't break in case of system clock updates.
+- #248: bench.py memory usage is highly overestimated.
+
+**Bug fixes**
+
+- #238: username is not logged in case of failed authentication.
+  (patch by tlockert)
+- #243: an erroneous error message is given in case the address passed to
+  bind() is already in use.
+- #245: ThreadedFTPServer hogs all CPU resources after a client connects.
+- #246: ThrottledDTPHandler was broken.
+
+**Incompatible API changes**
+
+- "python -m pyftpdlib.ftpserver" cmdline syntax doesn't work anymore
+
+
+Version: 1.0.1 - Date: 2013-02-22
+=================================
+
+**Bug fixes**
+
+- #236: MultiprocessFTPServer and ThreadedFTPServer hanging in case of failed
+  authentication.
+
+
+Version: 1.0.0 - Date: 2013-02-19
+=================================
+
+**Enhancements**
+
+- #76: python 3.x porting.
+- #198: full unicode support (RFC-2640).
+- #203: asyncore IO loop has been rewritten from scratch and now supports
+  epoll() on Linux and kqueue() on OSX/BSD.
+  Also select() (Windows) and poll() pollers have been rewritten
+  resulting in pyftpdlib being an order of magnitude faster and more
+  scalable than ever.
+- #204: a new FilesystemError exception class is available in order send
+  custom error strings to client from an AbstracteFS subclass.
+- #207: added on_connect() and on_disconnect() callback methods to FTPHandler
+  class.
+- #212: provided two new classes:
+  Logging_managementpyftpdlib.servers.ThreadedFTPServer and
+  pyftpdlib.servers.MultiprocessFTPServer (POSIX only).
+  They can be used to change the base async-based concurrecy model and
+  use a multiple threads / processes based approach instead.
+  Your FTPHandler subclasses will finally be free to block! ;)
+- #219: it is not possible to instantiate different FPTS classes using
... 11142 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-pyftpdlib.git



More information about the Python-modules-commits mailing list