| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
""" |
|---|
| 7 |
I am the support module for making a ftp server with twistd. |
|---|
| 8 |
""" |
|---|
| 9 |
|
|---|
| 10 |
from twisted.protocols import ftp |
|---|
| 11 |
from twisted.python import usage |
|---|
| 12 |
from twisted.application import internet |
|---|
| 13 |
from twisted.cred import error, portal, checkers, credentials |
|---|
| 14 |
|
|---|
| 15 |
import os.path |
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
class Options(usage.Options): |
|---|
| 19 |
synopsis = """[options]. |
|---|
| 20 |
WARNING: This FTP server is probably INSECURE do not use it. |
|---|
| 21 |
""" |
|---|
| 22 |
optParameters = [ |
|---|
| 23 |
["port", "p", "2121", "set the port number"], |
|---|
| 24 |
["root", "r", "/usr/local/ftp", "define the root of the ftp-site."], |
|---|
| 25 |
["userAnonymous", "", "anonymous", "Name of the anonymous user."], |
|---|
| 26 |
["password-file", "", None, "username:password-style credentials database"], |
|---|
| 27 |
] |
|---|
| 28 |
|
|---|
| 29 |
longdesc = '' |
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
def makeService(config): |
|---|
| 33 |
f = ftp.FTPFactory() |
|---|
| 34 |
|
|---|
| 35 |
r = ftp.FTPRealm(config['root']) |
|---|
| 36 |
p = portal.Portal(r) |
|---|
| 37 |
p.registerChecker(checkers.AllowAnonymousAccess(), credentials.IAnonymous) |
|---|
| 38 |
|
|---|
| 39 |
if config['password-file'] is not None: |
|---|
| 40 |
p.registerChecker(checkers.FilePasswordDB(config['password-file'], cache=True)) |
|---|
| 41 |
|
|---|
| 42 |
f.tld = config['root'] |
|---|
| 43 |
f.userAnonymous = config['userAnonymous'] |
|---|
| 44 |
f.portal = p |
|---|
| 45 |
f.protocol = ftp.FTP |
|---|
| 46 |
|
|---|
| 47 |
try: |
|---|
| 48 |
portno = int(config['port']) |
|---|
| 49 |
except KeyError: |
|---|
| 50 |
portno = 2121 |
|---|
| 51 |
return internet.TCPServer(portno, f) |
|---|