[Zope-Checkins] CVS: Zope2 - FTPRequest.py:1.10 FTPServer.py:1.18

Andreas Jung andreas@dhcp165.digicool.com
Mon, 9 Apr 2001 15:24:35 -0400


Update of /cvs-repository/Zope2/ZServer
In directory yetix:/work/zope/Zope2/ZServer

Modified Files:
	FTPRequest.py FTPServer.py 
Log Message:
merged FTP globbing/recursive patch



--- Updated File FTPRequest.py in package Zope2 --
--- FTPRequest.py	2001/01/23 20:06:41	1.9
+++ FTPRequest.py	2001/04/09 19:24:32	1.10
@@ -100,10 +100,18 @@
 class FTPRequest(HTTPRequest):
 
     def __init__(self, path, command, channel, response, stdin=None,
-                 environ=None):
+                 environ=None,globbing=None,recursive=0):
+
+        # we need to store the globbing information to pass it
+        # to the ZPublisher and the manage_FTPlist function 
+        # (ajung)
+        self.globbing = globbing
+        self.recursive= recursive
+        
         if stdin is None: stdin=StringIO()
         if environ is None:
             environ=self._get_env(path, command, channel, stdin)
+
         self._orig_env=environ
         HTTPRequest.__init__(self, stdin, environ, response, clean=1)
         
@@ -174,6 +182,11 @@
             env['CONTENT_LENGTH']=len(stdin.getvalue())
         else:
             env['PATH_INFO']=self._join_paths(channel.path, path, command)
+
+        # Fake in globbing information 
+        env['GLOBBING'] = self.globbing
+        env['FTP_RECURSIVE'] = self.recursive
+
         return env
     
     def _join_paths(self,*args):

--- Updated File FTPServer.py in package Zope2 --
--- FTPServer.py	2001/04/05 23:49:13	1.17
+++ FTPServer.py	2001/04/09 19:24:32	1.18
@@ -140,6 +140,7 @@
 from medusa.ftp_server import ftp_channel, ftp_server, recv_channel
 import asyncore, asynchat
 from medusa import filesys
+
 from FTPResponse import make_response
 from FTPRequest import FTPRequest
 
@@ -203,28 +204,45 @@
         self.get_dir_list(line,1)
     
     def get_dir_list(self, line, long=0):
+        self.globbing = None
+        self.recursive = 0
         # we need to scan the command line for arguments to '/bin/ls'...
         # XXX clean this up, maybe with getopts
+
         if len(line) > 1:
             args = string.split(line[1])
         else:
             args =[]
         path_args = []
+
+        # Extract globbing information 
+
+       
+        for i in range(len(args)):
+            x = args[i]
+            if string.find(x,'*')!=-1 or string.find(x,'?')!=-1:
+                self.globbing = x
+                args[i] = '.'     
+
         for arg in args:
             if arg[0] != '-':
                 path_args.append (arg)
             else:
                 if 'l' in arg:
                     long=1
+                if 'R' in arg:
+                    self.recursive = 1
+
         if len(path_args) < 1:
             dir = '.'
         else:
             dir = path_args[0]
+
         self.listdir(dir, long)
     
     def listdir (self, path, long=0):
         response=make_response(self, self.listdir_completion, long)
-        request=FTPRequest(path, 'LST', self, response)
+        request=FTPRequest(path, 'LST', self, response,globbing=self.globbing,recursive=self.recursive)
         handle(self.module, request, response)         
         
     def listdir_completion(self, long, response):