[Python-checkins] CVS: python/dist/src/Lib ftplib.py,1.56,1.57

Guido van Rossum gvanrossum@users.sourceforge.net
Fri, 17 Aug 2001 10:24:31 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv13152

Modified Files:
	ftplib.py 
Log Message:
Change the 227 response parser to use a more liberal regular
expression.  This is needed for certain servers that (in violation of
the standard) don't return the parentheses in the response.

This fixes SF bug #441712 by Henrik Weber (not exactly using his
patch).


Index: ftplib.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/ftplib.py,v
retrieving revision 1.56
retrieving revision 1.57
diff -C2 -d -r1.56 -r1.57
*** ftplib.py	2001/07/31 08:40:21	1.56
--- ftplib.py	2001/08/17 17:24:29	1.57
***************
*** 552,555 ****
--- 552,557 ----
  
  
+ _227_re = None
+ 
  def parse227(resp):
      '''Parse the '227' response for a PASV request.
***************
*** 559,570 ****
      if resp[:3] != '227':
          raise error_reply, resp
!     left = resp.find('(')
!     if left < 0: raise error_proto, resp
!     right = resp.find(')', left + 1)
!     if right < 0:
!         raise error_proto, resp # should contain '(h1,h2,h3,h4,p1,p2)'
!     numbers = resp[left+1:right].split(',')
!     if len(numbers) != 6:
          raise error_proto, resp
      host = '.'.join(numbers[:4])
      port = (int(numbers[4]) << 8) + int(numbers[5])
--- 561,572 ----
      if resp[:3] != '227':
          raise error_reply, resp
!     global _227_re
!     if _227_re is None:
!         import re
!         _227_re = re.compile(r'(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)')
!     m = _227_re.search(resp)
!     if not m:
          raise error_proto, resp
+     numbers = m.groups()
      host = '.'.join(numbers[:4])
      port = (int(numbers[4]) << 8) + int(numbers[5])