123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/usr/bin/env python
- # -*- coding:utf8 -*-
- # $Id: __init__.py 1220 2013-04-22 14:47:16Z g.rodola $
- # ======================================================================
- # Copyright (C) 2007-2013 Giampaolo Rodola' <g.rodola@gmail.com>
- #
- # All Rights Reserved
- #
- # Permission is hereby granted, free of charge, to any person
- # obtaining a copy of this software and associated documentation
- # files (the "Software"), to deal in the Software without
- # restriction, including without limitation the rights to use,
- # copy, modify, merge, publish, distribute, sublicense, and/or sell
- # copies of the Software, and to permit persons to whom the
- # Software is furnished to do so, subject to the following
- # conditions:
- #
- # The above copyright notice and this permission notice shall be
- # included in all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- # OTHER DEALINGS IN THE SOFTWARE.
- #
- # ======================================================================
- """
- pyftpdlib: RFC-959 asynchronous FTP server.
- pyftpdlib implements a fully functioning asynchronous FTP server as
- defined in RFC-959. A hierarchy of classes outlined below implement
- the backend functionality for the FTPd:
- [pyftpdlib.ftpservers.FTPServer]
- accepts connections and dispatches them to a handler
- [pyftpdlib.handlers.FTPHandler]
- a class representing the server-protocol-interpreter
- (server-PI, see RFC-959). Each time a new connection occurs
- FTPServer will create a new FTPHandler instance to handle the
- current PI session.
- [pyftpdlib.handlers.ActiveDTP]
- [pyftpdlib.handlers.PassiveDTP]
- base classes for active/passive-DTP backends.
- [pyftpdlib.handlers.DTPHandler]
- this class handles processing of data transfer operations (server-DTP,
- see RFC-959).
- [pyftpdlib.authorizers.DummyAuthorizer]
- an "authorizer" is a class handling FTPd authentications and
- permissions. It is used inside FTPHandler class to verify user
- passwords, to get user's home directory and to get permissions
- when a filesystem read/write occurs. "DummyAuthorizer" is the
- base authorizer class providing a platform independent interface
- for managing virtual users.
- [pyftpdlib.filesystems.AbstractedFS]
- class used to interact with the file system, providing a high level,
- cross-platform interface compatible with both Windows and UNIX style
- filesystems.
- Usage example:
- >>> from pyftpdlib.authorizers import DummyAuthorizer
- >>> from pyftpdlib.handlers import FTPHandler
- >>> from pyftpdlib.servers import FTPServer
- >>>
- >>> authorizer = DummyAuthorizer()
- >>> authorizer.add_user("user", "12345", "/home/giampaolo", perm="elradfmw")
- >>> authorizer.add_anonymous("/home/nobody")
- >>>
- >>> handler = FTPHandler
- >>> handler.authorizer = authorizer
- >>>
- >>> server = FTPServer(("127.0.0.1", 21), handler)
- >>> server.serve_forever()
- [I 13-02-19 10:55:42] >>> starting FTP server on 127.0.0.1:21 <<<
- [I 13-02-19 10:55:42] poller: <class 'pyftpdlib.ioloop.Epoll'>
- [I 13-02-19 10:55:42] masquerade (NAT) address: None
- [I 13-02-19 10:55:42] passive ports: None
- [I 13-02-19 10:55:42] use sendfile(2): True
- [I 13-02-19 10:55:45] 127.0.0.1:34178-[] FTP session opened (connect)
- [I 13-02-19 10:55:48] 127.0.0.1:34178-[user] USER 'user' logged in.
- [I 13-02-19 10:56:27] 127.0.0.1:34179-[user] RETR /home/giampaolo/.vimrc completed=1 bytes=1700 seconds=0.001
- [I 13-02-19 10:56:39] 127.0.0.1:34179-[user] FTP session closed (disconnect).
- """
- import logging
- __ver__ = '1.2.0'
- __date__ = '2013-04-22'
- __author__ = "Giampaolo Rodola' <g.rodola@gmail.com>"
- __web__ = 'http://code.google.com/p/pyftpdlib/'
- def _depwarn(msg):
- """
- Force DeprecationWarning to be temporarily shown (it's been
- disabled by default starting from python 2.7 / 3.2), then
- re-set the default behavior.
- """
- import warnings
- orig_filters = warnings.filters[:]
- try:
- #warnings.simplefilter('default')
- warnings.resetwarnings()
- warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
- finally:
- warnings.filters = orig_filters
|