New submission from Jonathan <bugrepo...@lightpear.com>: Using Python 3.6.3.
The below issue only happens with FTP_TLS. It works fine via a plain FTP connection. I am connecting to an FTP to using `ftplib` via FTP_TLS. ftps = ftplib.FTP_TLS('example.com', timeout=5) # TLS is more secure than SSL ftps.ssl_version = ssl.PROTOCOL_TLS # login before securing control channel ftps.login('usern...@example.com', 'password') # switch to secure data connection ftps.prot_p() # Explicitly set Passive mode ftps.set_pasv(True) This all works. I can send `ftps.mkd('mydir')` (make directory) and `ftps.cwd('mydir')` (change working dir), and both work fine. But if I send **any** of these (they're all basically synonyms as far as I can tell): ftps.dir() ftps.nlst() ftps.retrlines('LIST') ftps.retrlines('MLSD') Then I get back an exception (below also includes all ftplib debug info as well; generally matches up with what FileZilla shows too): *cmd* 'AUTH TLS' *put* 'AUTH TLS\r\n' *get* '234 AUTH TLS OK.\n' *resp* '234 AUTH TLS OK.' *cmd* 'USER usern...@example.com' *put* 'USER usern...@example.com\r\n' *get* '331 User usern...@example.com OK. Password required\n' *resp* '331 User usern...@example.com OK. Password required' *cmd* 'PASS ******************************' *put* 'PASS ******************************\r\n' *get* '230 OK. Current restricted directory is /\n' *resp* '230 OK. Current restricted directory is /' *cmd* 'PBSZ 0' *put* 'PBSZ 0\r\n' *get* '200 PBSZ=0\n' *resp* '200 PBSZ=0' *cmd* 'PROT P' *put* 'PROT P\r\n' *get* '200 Data protection level set to "private"\n' *resp* '200 Data protection level set to "private"' *cmd* 'MKD mydir' *put* 'MKD mydir\r\n' *get* '257 "mydir" : The directory was successfully created\n' *resp* '257 "mydir" : The directory was successfully created' *cmd* 'CWD mydir' *put* 'CWD mydir\r\n' *get* '250 OK. Current directory is /mydir\n' *resp* '250 OK. Current directory is /mydir' *cmd* 'TYPE A' *put* 'TYPE A\r\n' *get* '200 TYPE is now ASCII\n' *resp* '200 TYPE is now ASCII' *cmd* 'PASV' *put* 'PASV\r\n' *get* '227 Entering Passive Mode (8,8,8,8,8,8)\n' *resp* '227 Entering Passive Mode (8,8,8,8,8,8)' *cmd* 'MLSD' *put* 'MLSD\r\n' *get* '150 Accepted data connection\n' *resp* '150 Accepted data connection' Traceback (most recent call last): File "c:\my_script.py", line 384, in run_ftps ftps.retrlines('MLSD') File "c:\libs\Python36\lib\ftplib.py", line 485, in retrlines conn.unwrap() File "C:\libs\Python36\lib\ssl.py", line 1051, in unwrap s = self._sslobj.unwrap() File "C:\libs\Python36\lib\ssl.py", line 698, in unwrap return self._sslobj.shutdown() OSError: [Errno 0] Error The same FTP command (LIST) works fine via filezilla. The closest thing I can find with googling is this: https://bugs.python.org/msg253161 - and I'm not sure if it's related or relevant. Short version: What does "OSError: [Errno 0] Error" actually mean, and how do I list my directory contents? ---------- messages: 303914 nosy: jonathan-lp priority: normal severity: normal status: open title: FTP_TLS errors when versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue31727> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com