Rev 67: Make pyftpdlib test server really work. in file:///net/bigmamac/Volumes/home/vila/.bazaar/plugins/local_test_server/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Wed Mar 18 08:49:39 GMT 2009
At file:///net/bigmamac/Volumes/home/vila/.bazaar/plugins/local_test_server/
------------------------------------------------------------
revno: 67
revision-id: v.ladeuil+lp at free.fr-20090318084939-5mc0k1lrrcazngkk
parent: v.ladeuil+lp at free.fr-20090313072719-1q0wyxfhu5mhq5mx
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: local_test_server
timestamp: Wed 2009-03-18 09:49:39 +0100
message:
Make pyftpdlib test server really work.
* bin/pyftpdlib:
Backport fixes found while integrating in bzr.
(ftp_server): Override base class to register the authorizer.
(AnonymousWithWriteAccessAuthorizer): Give write access to
anonymous.
(BZRConformingFTPHandler.__init__): authorizer is now an attribute
acquired from server.
-------------- next part --------------
=== modified file 'bin/pyftpdlib'
--- a/bin/pyftpdlib 2009-02-26 17:06:58 +0000
+++ b/bin/pyftpdlib 2009-03-18 08:49:39 +0000
@@ -3,8 +3,25 @@
import sys
from pyftpdlib import ftpserver
+# An empty password is valid, hence the arg is neither mandatory not forbidden
+ftpserver.proto_cmds['PASS'].arg_needed = None
+
+class AnonymousWithWriteAccessAuthorizer(ftpserver.DummyAuthorizer):
+
+ def _check_permissions(self, username, perm):
+ # Like base implementation but don't warn about write permissions
+ # assigned to anonymous, since that exactly our purpose.
+ for p in perm:
+ if p not in self.read_perms + self.write_perms:
+ raise ftpserver.AuthorizerError('No such permission "%s"' %p)
+
+
class BZRConformingFTPHandler(ftpserver.FTPHandler):
+ def __init__(self, conn, server):
+ ftpserver.FTPHandler.__init__(self, conn, server)
+ self.authorizer = server.authorizer
+
def ftp_SIZE(self, path):
# bzr is overly picky here, but we want to make the test suite pass
# first. This may need to be revisited -- vila 20090226
@@ -28,22 +45,21 @@
ftpserver.FTPHandler.ftp_NLST(self, path)
-class AnonymousWithWriteAccessAuthorizer(ftpserver.DummyAuthorizer):
+class ftp_server(ftpserver.FTPServer):
- def _check_permissions(self, username, perm):
- # Like base implementation but don't warn about write permissions
- # assigned to anonynous, since that exactly our purpose.
- for p in perm:
- if p not in self.read_perms + self.write_perms:
- raise ftpserver.AuthorizerError('No such permission "%s"' %p)
+ def __init__(self, address, handler, authorizer):
+ ftpserver.FTPServer.__init__(self, address, handler)
+ self.authorizer = authorizer
+ # Worth backporting upstream ?
+ self.addr = self.socket.getsockname()
def start_server(conf):
authorizer = AnonymousWithWriteAccessAuthorizer()
- authorizer.add_user('anonymous', None, '/', perm='elradfmw')
+ authorizer.add_anonymous('/', perm='elradfmw')
ftpserver.FTPHandler.authorizer = authorizer
address = (conf['host'], conf['port'])
- ftpd = ftpserver.FTPServer(address, BZRConformingFTPHandler)
+ ftpd = ftp_server(address, BZRConformingFTPHandler, authorizer)
log_file = open(conf['log_file'], 'w')
def do_log(msg):
log_file.write(msg + '\n')
=== modified file 'test_server.py'
--- a/test_server.py 2009-03-13 07:27:19 +0000
+++ b/test_server.py 2009-03-18 08:49:39 +0000
@@ -205,11 +205,6 @@
return self._base_url + self._symlink_name
-class LocalFTPTestServer(LocalTestServer):
-
- _url_protocol = 'ftp'
-
-
class Apache2(LocalHTTPTestServer):
_server_name = 'apache2'
@@ -306,6 +301,11 @@
_url_protocol = 'http+webdav'
+class LocalFTPTestServer(LocalTestServer):
+
+ _url_protocol = 'ftp'
+
+
class Vsftpd(LocalFTPTestServer):
_server_name = 'vsftpd'
More information about the bazaar-commits
mailing list