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