HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_ftplib.cpython-37.opt-1.pyc
B

��g���@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	yddl
Z
Wnek
rpdZ
YnXddlm
Z
mZddlmZddlmZmZdZddZd	Zd	Zd
ZGdd�dej�ZGd
d�dej�ZGdd�dejej�Ze
dk	�rlej� ej�!e"�d�Z#ej� ej�!e"�d�Z$Gdd�dej�Z%Gdd�de%e�Z&Gdd�de%e�Z'Gdd�de�Z(Gdd�de
�Z)eej*d�Gdd�de
��Z+ee
d �Gd!d"�d"e)��Z,ee
d �Gd#d$�d$e
��Z-Gd%d&�d&e
�Z.Gd'd(�d(e
�Z/d)d*�Z0e1d+k�re0�dS),zTest script for ftplib module.�N)�TestCase�
skipUnless)�support)�HOST�HOSTv6�zabcde12345
i�z
foo
bar
a�type=cdir;perm=el;unique==keVO1+ZF4; test
type=pdir;perm=e;unique==keVO1+d?3; ..
type=OS.unix=slink:/foobar;perm=;unique==keVO1+4G4; foobar
type=OS.unix=chr-13/29;perm=;unique==keVO1+5G4; device
type=OS.unix=blk-11/108;perm=;unique==keVO1+6G4; block
type=file;perm=awr;unique==keVO1+8G4; writable
type=dir;perm=cpmel;unique==keVO1+7G4; promiscuous
type=dir;perm=;unique==keVO1+1t2; no-exec
type=file;perm=r;unique==keVO1+EG4; two words
type=file;perm=r;unique==keVO1+IH4;  leading space
type=file;perm=r;unique==keVO1+1G4; file1
type=dir;perm=cpmel;unique==keVO1+7G4; incoming
type=file;perm=r;unique==keVO1+1G4; file2
type=file;perm=r;unique==keVO1+1G4; file3
type=file;perm=r;unique==keVO1+1G4; file4
cs@eZdZdZdd�Zdd�Zdd�Z�fdd	�Zd
d�Z�Z	S)�DummyDTPHandlerFcCs tj�||�||_d|j_dS)N�)�asynchat�
async_chat�__init__�	baseclass�last_received_data)�self�connr
�r�,/usr/local/lib/python3.7/test/test_ftplib.pyr2szDummyDTPHandler.__init__cCs |jj|�d��d�7_dS)Ni�ascii)r
r�recv�decode)rrrr�handle_read7szDummyDTPHandler.handle_readcCs$|js |j�d�|��d|_dS)Nz226 transfer completeT)�dtp_conn_closedr
�push�close)rrrr�handle_close:szDummyDTPHandler.handle_closecsB|jjdk	r|jj}d|j_|s(|��Stt|��|�d��dS)Nr)r
�	next_data�close_when_done�superrr�encode)rZwhat)�	__class__rrrCszDummyDTPHandler.pushcCst�dS)N)�	Exception)rrrr�handle_errorKszDummyDTPHandler.handle_error)
�__name__�
__module__�__qualname__rrrrrr!�
__classcell__rr)rrr/s	rc@seZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$dAdB�Z%dCS)D�DummyFTPHandlercCsptj�||�|j�tjtjd�|�d�g|_d|_	d|_
d|_d|_d|_
d|_t|_|�d�d|_dS)N�s
r	z220 welcomez252.253.254.255)r
rr�socketZ
setsockoptZ
SOL_SOCKETZSO_OOBINLINEZset_terminator�	in_buffer�dtp�last_received_cmdr�
next_responser�rest�	RETR_DATA�next_retr_datar�fake_pasv_server_ip)rrrrrrSs

zDummyFTPHandler.__init__cCs|j�|�dS)N)r)�append)r�datarrr�collect_incoming_datafsz%DummyFTPHandler.collect_incoming_datacCs�d�|j��d�}g|_|jr0|�|j�d|_|�d�d��}||_|�d�}|dkrl||dd�}nd}t	|d|�r�t
|d|�}||�n|�d	|�dS)
N�rr	� r���r'Zcmd_z 550 command "%s" not understood.)�joinr)rr,r�split�lowerr+�find�hasattr�getattr)r�line�cmdZspace�arg�methodrrr�found_terminatoris

z DummyFTPHandler.found_terminatorcCst�dS)N)r )rrrrr!|szDummyFTPHandler.handle_errorcCstj�||�d�d�dS)Nrs
)r
rrr)rr2rrrrszDummyFTPHandler.pushcCslttt|�d���}dt|dd��}|dd|d}tj||ftd�}|j||d�|_	|�
d�dS)	N�,z%d.%d.%d.%d���)�timeout)r
z&200 active data connection established)�list�map�intr8�tupler(�create_connection�TIMEOUT�dtp_handlerr*r)rr?�addr�ip�port�srrr�cmd_port�szDummyFTPHandler.cmd_portc		Cs�t����}|�|j��ddf�|��|�t�|��d}|j}|�dd�}|d}|d}|�d|||f�|�	�\}}|j
||d�|_WdQRXdS)Nrr'�.rBrDz$227 entering passive mode (%s,%d,%d))r
)r(�bind�getsockname�listen�
settimeoutrLr0�replacer�acceptrMr*)	rr?�sockrPrOZp1Zp2rrNrrr�cmd_pasv�s

zDummyFTPHandler.cmd_pasvcCsT|�|d�dd�\}}}t|�}tj||ftd�}|j||d�|_|�d�dS)Nrr'r6)rF)r
z&200 active data connection established)r8rIr(rKrLrMr*r)rr?�afrOrPrQrrr�cmd_eprt�s
zDummyFTPHandler.cmd_eprtc	Cs|t�tj��f}|�|j��ddf�|��|�t�|��d}|�d|�|��\}}|j	||d�|_
WdQRXdS)Nrr'z+229 entering extended passive mode (|||%d|))r
)r(�AF_INET6rTrUrVrWrLrrYrMr*)rr?rZrPrrNrrr�cmd_epsv�s
zDummyFTPHandler.cmd_epsvcCs|�|�dS)N)r)rr?rrr�cmd_echo�szDummyFTPHandler.cmd_echocCs|�d�dS)Nz200 noop ok)r)rr?rrr�cmd_noop�szDummyFTPHandler.cmd_noopcCs|�d�dS)Nz331 username ok)r)rr?rrr�cmd_user�szDummyFTPHandler.cmd_usercCs|�d�dS)Nz230 password ok)r)rr?rrr�cmd_pass�szDummyFTPHandler.cmd_passcCs|�d�dS)Nz230 acct ok)r)rr?rrr�cmd_acct�szDummyFTPHandler.cmd_acctcCs|�d�dS)Nz350 rnfr ok)r)rr?rrr�cmd_rnfr�szDummyFTPHandler.cmd_rnfrcCs|�d�dS)Nz250 rnto ok)r)rr?rrr�cmd_rnto�szDummyFTPHandler.cmd_rntocCs|�d�dS)Nz250 dele ok)r)rr?rrr�cmd_dele�szDummyFTPHandler.cmd_delecCs|�d�dS)Nz
250 cwd ok)r)rr?rrr�cmd_cwd�szDummyFTPHandler.cmd_cwdcCs|�d�dS)Nz250 1000)r)rr?rrr�cmd_size�szDummyFTPHandler.cmd_sizecCs|�d|�dS)Nz257 "%s")r)rr?rrr�cmd_mkd�szDummyFTPHandler.cmd_mkdcCs|�d�dS)Nz
250 rmd ok)r)rr?rrr�cmd_rmd�szDummyFTPHandler.cmd_rmdcCs|�d�dS)Nz257 "pwd ok")r)rr?rrr�cmd_pwd�szDummyFTPHandler.cmd_pwdcCs|�d�dS)Nz200 type ok)r)rr?rrr�cmd_type�szDummyFTPHandler.cmd_typecCs|�d�|��dS)Nz221 quit ok)rr)rr?rrr�cmd_quit�s
zDummyFTPHandler.cmd_quitcCs|�d�dS)Nz226 abor ok)r)rr?rrr�cmd_abor�szDummyFTPHandler.cmd_aborcCs|�d�dS)Nz125 stor ok)r)rr?rrr�cmd_stor�szDummyFTPHandler.cmd_storcCs||_|�d�dS)Nz350 rest ok)r-r)rr?rrr�cmd_rest�szDummyFTPHandler.cmd_restcCsN|�d�|jdk	r t|j�}nd}|j�|j|d��|j��d|_dS)Nz125 retr okr)rr-rIr*r/r)rr?�offsetrrr�cmd_retr�s


zDummyFTPHandler.cmd_retrcCs$|�d�|j�t�|j��dS)Nz125 list ok)rr*�	LIST_DATAr)rr?rrr�cmd_list�s
zDummyFTPHandler.cmd_listcCs$|�d�|j�t�|j��dS)Nz125 nlst ok)rr*�	NLST_DATAr)rr?rrr�cmd_nlst�s
zDummyFTPHandler.cmd_nlstcCs|�d�dS)Nz200 opts ok)r)rr?rrr�cmd_opts�szDummyFTPHandler.cmd_optscCs$|�d�|j�t�|j��dS)Nz125 mlsd ok)rr*�	MLSD_DATAr)rr?rrr�cmd_mlsd�s
zDummyFTPHandler.cmd_mlsdcCsdt|�|_|�d�dS)N�xz125 setlongretr ok)rIr/r)rr?rrr�cmd_setlongretr�szDummyFTPHandler.cmd_setlongretrN)&r"r#r$rrMrr3rAr!rrRr[r]r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrsrurwrxrzr|rrrrr&OsD

r&c@sZeZdZeZejfdd�Zdd�Zdd�Z	dd�Z
d	d
�Zdd�ZeZ
d
d�Zdd�ZdS)�DummyFTPServercCsttj�|�tj�|�d|_|�|tj�|�	|�|�
d�d|_t��|_
|j��dd�\|_|_d|_dS)NTrEF�)�	threading�Threadr�asyncore�
dispatcher�daemonZ
create_socketr(�SOCK_STREAMrTrV�activeZLock�active_lockrU�hostrP�handler_instance)rZaddressr\rrrrs


zDummyFTPServer.__init__cCs$t��|_tj�|�|j��dS)N)r�Event�_DummyFTPServer__flagr��start�wait)rrrrr�s
zDummyFTPServer.startcCsTd|_|j��x2|jrBtjrB|j��tjddd�|j��qWtj	dd�dS)NTg�������?r')rF�count)�
ignore_all)
r�r��setr�Z
socket_mapr��acquireZloop�release�	close_all)rrrr�runs

zDummyFTPServer.runcCsd|_|��dS)NF)r�r7)rrrr�stop!szDummyFTPServer.stopcCs|�|�|_dS)N)�handlerr�)rrrNrrr�handle_accepted&szDummyFTPServer.handle_acceptedcCs|��dS)N)r)rrrr�handle_connect)szDummyFTPServer.handle_connectcCsdS)Nrr)rrrr�writable-szDummyFTPServer.writablecCst�dS)N)r )rrrrr!0szDummyFTPServer.handle_errorN)r"r#r$r&r�r(�AF_INETrr�r�r�r�r�rr�r!rrrrr}s	r}zkeycert3.pemzpycacert.pemcs|eZdZdZdZdZdd�Zdd�Z�fdd�Z�fd	d
�Z	�fdd�Z
�fd
d�Z�fdd�Zdd�Z
�fdd�Z�ZS)�
SSLConnectionz3An asyncore.dispatcher subclass supporting TLS/SSL.FcCsBt��}|�t�|j|jdddd�}|��|�|�d|_dS)NFT)Zsuppress_ragged_eofsZserver_sideZdo_handshake_on_connect)	�ssl�
SSLContextZload_cert_chain�CERTFILEZwrap_socketr(Zdel_channelZ
set_socket�_ssl_accepting)r�contextr(rrr�secure_connection?s

zSSLConnection.secure_connectionc
Cs�y|j��Wn�tjk
r|}zN|jdtjtjfkr<dS|jdtjkrT|��Sd|jdkrj|��S�Wdd}~XYn@t	k
r�}z|jdt
jkr�|��SWdd}~XYnXd|_dS)NrZSSLV3_ALERT_BAD_CERTIFICATEr'F)
r(Zdo_handshaker��SSLError�args�SSL_ERROR_WANT_READ�SSL_ERROR_WANT_WRITE�
SSL_ERROR_EOFr�OSError�errnoZECONNABORTEDr�)r�errrrr�_do_ssl_handshakeJs
zSSLConnection._do_ssl_handshakec
s�d|_y|j��|_Wn^tjk
rT}z|jdtjtjfkrDdSWdd}~XYn"tk
rt}zWdd}~XYnXd|_t	|dd�dkr�t
t|���ndS)NTrF�_ccc)
�_ssl_closingr(�unwrapr�r�r�r�r�r�r<rr�r)rr�)rrr�_do_ssl_shutdown]s
zSSLConnection._do_ssl_shutdowncs2|jr|��n|jr |��ntt|���dS)N)r�r�r�r�rr��handle_read_event)r)rrrr�qs


zSSLConnection.handle_read_eventcs2|jr|��n|jr |��ntt|���dS)N)r�r�r�r�rr��handle_write_event)r)rrrr�ys


z SSLConnection.handle_write_eventc
s^ytt|��|�Stjk
rX}z(|jdtjtjtjtj	fkrFdS�Wdd}~XYnXdS)Nr)
rr��sendr�r�r�r��SSL_ERROR_ZERO_RETURNr�r�)rr2r�)rrrr��s
zSSLConnection.sendc
sxytt|��|�Stjk
rr}zB|jdtjtjfkr>dS|jdtjtj	fkr`|�
�dS�Wdd}~XYnXdS)Nrr4)rr�rr�r�r�r�r�r�r�r)r�buffer_sizer�)rrrr�s
zSSLConnection.recvcCst�dS)N)r )rrrrr!�szSSLConnection.handle_errorcs6t|jtj�r$|jjdk	r$|��ntt|���dS)N)	�
isinstancer(r��	SSLSocketZ_sslobjr�rr�r)r)rrrr�s
zSSLConnection.close)r"r#r$�__doc__r�r�r�r�r�r�r�r�rr!rr%rr)rrr�9s
r�c@seZdZdZdd�ZdS)�DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.cCs"t�|||�|jjr|��dS)N)rrr
�secure_data_channelr�)rrr
rrrr�szDummyTLS_DTPHandler.__init__N)r"r#r$r�rrrrrr��sr�c@s<eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cCst�||�d|_d|_dS)NF)r&rr�r�)rrrrrr�szDummyTLS_FTPHandler.__init__cCs|�d�|��dS)zSet up secure control channel.z234 AUTH TLS successfulN)rr�)rr=rrr�cmd_auth�s
zDummyTLS_FTPHandler.cmd_authcCs|�d�d|_|��dS)Nz 220 Reverting back to clear-textT)rr�r�)rr=rrr�cmd_ccc�s
zDummyTLS_FTPHandler.cmd_ccccCs|�d�dS)z�Negotiate size of buffer for secure data transfer.
            For TLS/SSL the only valid value for the parameter is '0'.
            Any other value is accepted but ignored.
            z200 PBSZ=0 successful.N)r)rr=rrr�cmd_pbsz�szDummyTLS_FTPHandler.cmd_pbszcCsJ|��}|dkr"|�d�d|_n$|dkr<|�d�d|_n
|�d�dS)	zSetup un/secure data channel.�Cz200 Protection set to ClearF�Pz200 Protection set to PrivateTz(502 Unrecognized PROT type (use C or P).N)�upperrr�)rr=r?rrr�cmd_prot�s

zDummyTLS_FTPHandler.cmd_protN)r"r#r$r�r�rMrr�r�r�r�rrrrr��sr�c@seZdZeZdS)�DummyTLS_FTPServerN)r"r#r$r�r�rrrrr��sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQS)R�TestFTPClasscCs@ttdf�|_|j��tjtd�|_|j�|jj	|jj
�dS)Nr)rF)r}r�serverr��ftplib�FTPrL�client�connectr�rP)rrrr�setUp�s
zTestFTPClass.setUpcCs*|j��|j��d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrr�tearDown�s

zTestFTPClass.tearDowncCs$|�t|�t|��|�||�dS)N)�assertEqual�len)r�receivedZexpectedrrr�
check_data�szTestFTPClass.check_datacCs|�|j��d�dS)Nz220 welcome)r�r�Z
getwelcome)rrrr�test_getwelcome�szTestFTPClass.test_getwelcomecCsL|�|j�d�td��|�|j�d�td��|�|j�d�td��dS)N�fooz
pass 12345z
pass *****z
PASS 12345z
PASS *****)r�r�Zsanitize�repr)rrrr�
test_sanitize�szTestFTPClass.test_sanitizecCs�|�t|jjd�|�t|jjd�|�t|jjd�|�tj|jjd�|�tj|jjd�|�tj|jjd�|�tj|jjd�|�tj|jjd�dS)	Nz
echo 40
0z	echo 40
0z	echo 40
0zecho 400zecho 499zecho 500zecho 599zecho 999)�assertRaises�
ValueErrorr��sendcmdr��
error_temp�
error_perm�error_proto)rrrr�test_exceptions�szTestFTPClass.test_exceptionsc	CsRtjtjtjtjtjttf}x0|D](}y|d��Wq"tjk
rHYq"Xq"WdS)Nz(exception not included in all_errors set)	r��error_replyr�r�r��Errorr��EOFErrorZ
all_errors)r�
exceptionsr{rrr�test_all_errors�s

zTestFTPClass.test_all_errorscCsF|�|jj�|j�d�|�|jj�|j�d�|�|jj�dS)NTF)�
assertTruer�Z
passiveserver�set_pasv�assertFalse)rrrr�
test_set_pasvs
zTestFTPClass.test_set_pasvcCsD|j�d�|j�d�|�tj|jjd�|�tj|jjd�dS)Nzecho 200zecho 299zecho 199zecho 300)r�Zvoidcmdr�r�r�)rrrr�test_voidcmdszTestFTPClass.test_voidcmdcCs|j��dS)N)r��login)rrrr�
test_loginszTestFTPClass.test_logincCs|j�d�dS)NZpasswd)r�Zacct)rrrr�	test_acctszTestFTPClass.test_acctcCs2|j�dd�d|jj_|�tj|jjdd�dS)N�a�bZ200)r��renamer�r�r,r�r�r�)rrrr�test_renames
zTestFTPClass.test_renamecCs.|j�d�d|jj_|�tj|jjd�dS)Nr�Z199)r��deleter�r�r,r�r�r�)rrrr�test_deletes
zTestFTPClass.test_deletecCs|j�d�dS)Nr�)r��size)rrrr�	test_size$szTestFTPClass.test_sizecCs|j�d�}|�|d�dS)Nz/foo)r�Zmkdr�)r�dirrrr�test_mkd'szTestFTPClass.test_mkdcCs|j�d�dS)Nr�)r�Zrmd)rrrr�test_rmd+szTestFTPClass.test_rmdcCs|j�d�}|�|d�dS)Nz/fooz
250 cwd ok)r��cwdr�)rr�rrr�test_cwd.szTestFTPClass.test_cwdcCs|j��}|�|d�dS)Nzpwd ok)r��pwdr�)rr�rrr�test_pwd2s
zTestFTPClass.test_pwdcCs&|�|j��d�|�|jjd�dS)Nz221 quit ok)r�r��quitrZ)rrrr�	test_quit6szTestFTPClass.test_quitcCs|j��dS)N)r��abort)rrrr�
test_abort;szTestFTPClass.test_abortcs4�fdd�}g�|j�d|�|�d���t�dS)Ncs��|�d��dS)Nr)r1r)r2)r�rr�callback?sz.TestFTPClass.test_retrbinary.<locals>.callback�retrr	)r��
retrbinaryr�r7r.)rr�r)r�r�test_retrbinary>szTestFTPClass.test_retrbinarycsN�fdd�}x<dD]4}g�|jjd||d�|�d���t|d��qWdS)Ncs��|�d��dS)Nr)r1r)r2)r�rrr�Fsz3TestFTPClass.test_retrbinary_rest.<locals>.callback)r�
�r�)r-r	)r�r�r�r7r.)rr�r-r)r�r�test_retrbinary_restEs

z!TestFTPClass.test_retrbinary_restcCs2g}|j�d|j�|�d�|�t�dd��dS)Nr�r	z
)r��	retrlinesr1r�r7r.rX)rr�rrr�test_retrlinesMszTestFTPClass.test_retrlinescsft�t�d��}|j�d|�|�|jjj	t�g�|�
d�|jjd|�fdd�d�|���dS)Nr�storrcs
��d�S)N)r1)r{)�flagrr�<lambda>Yr4z.TestFTPClass.test_storbinary.<locals>.<lambda>)r�)�io�BytesIOr.rr��
storbinaryr�r�r�r�seekr�)r�fr)rr�test_storbinaryRs
zTestFTPClass.test_storbinarycCs\t�t�dd��d��}x>dD]6}|�d�|jjd||d�|�|j	j
jt|��qWdS)Nz
�
r)�Z30rr)r-)
rrr.rXrrr�rr�r�r�r-�str)rr�rrrr�test_storbinary_rest\s


z!TestFTPClass.test_storbinary_restc	s�t�t�dd��d��}|j�d|�|�|jj	j
t�g�|�d�|jjd|�fdd�d	�|���t�
t�dd��}tjd
tfdd��|�t|jjd|�WdQRXdS)
Nz
r
rrrzstor foocs
��d�S)N)r1)r{)rrrrjr4z-TestFTPClass.test_storlines.<locals>.<lambda>)r�r	T)�quiet)rrr.rXrr��	storlinesr�r�r�rrr��StringIOrZcheck_warnings�BytesWarningr��	TypeError)rrr)rr�test_storlinescs

zTestFTPClass.test_storlinescCs.|j��|�|j��t�d�dd��dS)Nz
r6)r�Znlstr�rvr8)rrrr�	test_nlstrs
zTestFTPClass.test_nlstcs6g�|j��fdd��|�d���t�dd��dS)Ncs
��|�S)N)r1)r{)�lrrrxr4z'TestFTPClass.test_dir.<locals>.<lambda>r	z
)r�r�r�r7rtrX)rr)rr�test_dirvszTestFTPClass.test_dircs�t�j���t�jjdd��t�jjdddgd��t�j���}xV|D]N\}}��|t���|t���|���d|���d|���d|�qLW�fdd	��d*��fd
d�	}|d�|d
dd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|dd d�|d!d"d�|d#d$d�|d%d&d��d'�t�j���\}}x|D]}��|�	���qrW�d(���
tt�j����d(�x"�j��D]}��d)|��q�WdS)+N�/)�pathr��type)r�facts�perm�uniquecs|�jj_dS)N)r�r�r)r2)rrr�set_data�sz(TestFTPClass.test_mlsd.<locals>.set_datacs�|dkrdn|}|dkrdn|}|dkr,dn|}|dkr<dn|}�|�t�j���\}}��||���|d|���|d|���|d|�dS)Nrrr�name)�nextr��mlsdr�)r=rrrr�_namer)rrrr�
test_entry�sz*TestFTPClass.test_mlsd.<locals>.test_entryz)type=type;perm=perm;unique=unique; name
z*type=ty=pe;perm=perm;unique=unique; name
zty=pe)rz*type==type;perm=perm;unique=unique; name
z=typez+type=t=y=pe;perm=perm;unique=unique; name
zt=y=pez)type=====;perm=perm;unique=unique; name
z====z*type=type;perm=perm;unique=unique; na me
zna me)rz*type=type;perm=perm;unique=unique; name 
zname z*type=type;perm=perm;unique=unique;  name
z namez,type=type;perm=perm;unique=unique; n am  e
zn am  ez*type=type;perm=perm;unique=unique; na;me
zna;mez*type=type;perm=perm;unique=unique; ;name
z;namez+type=type;perm=perm;unique=unique; ;name;
z;name;z)type=type;perm=perm;unique=unique; ;;;;
z;;;;z)Type=type;TyPe=perm;UNIQUE=unique; name
r	zunexpected data %s)NNNN)
rGr�r!�assertIsInstancer�dictr�ZassertInr �islowerr��
StopIteration�fail)rZlsrrr#r"r{r)rrr�	test_mlsd{sF


zTestFTPClass.test_mlsdc	Cs,|j���|�|jjjd�WdQRXdS)NrP)r��makeportr�r�r�r+)rrrr�
test_makeport�szTestFTPClass.test_makeportcCs>|j��\}}tj||ftd�}|��|�|jjj	d�dS)N)rFZpasv)
r��makepasvr(rKrLrr�r�r�r+)rr�rPrrrr�
test_makepasv�szTestFTPClass.test_makepasvcCsNd|j_|j��\}}|�||jjj�tj|jj	�
�d|ftd���dS)z/Test the opt-in to the old vulnerable behavior.Tr)rFN)
r��trust_server_pasv_ipv4_addressr,r�r�r�r0r(rKrZZgetpeernamerLr)rZbad_hostrPrrr�*test_makepasv_issue43285_security_disabled�sz7TestFTPClass.test_makepasv_issue43285_security_disabledcCsH|�|jj�|j��\}}|�||jjj�tj	||ft
d���dS)N)rF)r�r�r.r,ZassertNotEqualr�r�r0r(rKrLr)rZtrusted_hostrPrrr�1test_makepasv_issue43285_security_enabled_default�s
z>TestFTPClass.test_makepasv_issue43285_security_enabled_defaultc
s��j���fdd�}tjtd��6�_�j��jj�jj��j�	d���
|��WdQRX���jjj
d���|��tjtd��4�_�j��jj�jj��j�	d��j��WdQRX���jjj
d���|��yJtjtd��4�_�j��jj�jj��j�	d�d�jj_WdQRXWn6tjk
�r`}z��t|�d�Wdd}~XYnX��d�t�d����jjj
d���|��dS)	Nc	s>�jjdkrdSy�j�d�Wnttfk
r8dSXdS)NF�noopT)r�rZr�r�r�r)rrr�is_client_connected�sz=TestFTPClass.test_with_statement.<locals>.is_client_connected)rFr1r�z550 error on quitzException not raisedg�������?)r�r�r�r�rLr�r�r�rPr�r�r�r�r+r�r,r�rr(�timeZsleep)rr2r�r)rr�test_with_statement�s2

"

z TestFTPClass.test_with_statementc
Cs�|j��t��}yD|jj|jj|jjt|fd�|�	|jj
��d|�|j��Wn>tk
r�}z |j
t
jkr�|�d|��Wdd}~XYnXdS)N)�source_addressr'zcouldn't bind to port %d)r�r�r�find_unused_portr�r�r�rPrr�rZrUr�r��
EADDRINUSE�skipTest)rrP�errr�test_source_addresss
z TestFTPClass.test_source_addressc
Cs�t��}t|f|j_y0|j�d��}|�|��d|�WdQRXWn>tk
r�}z |j	t	j
krp|�d|��Wdd}~XYnXdS)NrGr'zcouldn't bind to port %d)rr6rr�r5�transfercmdr�rUr�r�r7r8)rrPrZr9rrr�&test_source_address_passive_connections"z3TestFTPClass.test_source_address_passive_connectioncCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�tjtjd�|�t�d�d	�|�t�d
�d	�dS)Nz257 "/foo/bar"z/foo/barz257 "/foo/bar" createdz257 ""r	z257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z	/foo/b"arz257 "/foo/b""ar" created)r�r��parse257r�r�)rrrr�
test_parse257szTestFTPClass.test_parse257cCs$|�tj|jjd|jjd�dS)Nr{r~)r�r�r�r�r��maxline)rrrr�test_line_too_long'szTestFTPClass.test_line_too_longcCs8|j�d|jjd�g}|�tj|jjd|j�dS)NzSETLONGRETR %dr~r�)r�r�r?r�r�r�r�r1)rr�rrr�test_retrlines_too_long+sz$TestFTPClass.test_retrlines_too_longcCs0t�d|jjd�}|�tj|jjd|�dS)N�xr~r)rrr�r?r�r�r�r)rrrrr�test_storlines_too_long1sz$TestFTPClass.test_storlines_too_longN)+r"r#r$r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	rrrrr)r+r-r/r0r4r:r<r>r@rArCrrrrr��sP


:	-
r�zIPv6 not enabledc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestIPv6EnvironmentcCsFttdftjd�|_|j��tjtd�|_	|j	�
|jj|jj�dS)Nr)r\)rF)
r}rr(r^r�r�r�r�rLr�r�r�rP)rrrrr�9s
zTestIPv6Environment.setUpcCs*|j��|j��d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrrr�?s

zTestIPv6Environment.tearDowncCs|�|jjtj�dS)N)r�r�r\r(r^)rrrr�test_afFszTestIPv6Environment.test_afc	Cs,|j���|�|jjjd�WdQRXdS)NZeprt)r�r*r�r�r�r+)rrrrr+Isz!TestIPv6Environment.test_makeportcCs>|j��\}}tj||ftd�}|��|�|jjj	d�dS)N)rFZepsv)
r�r,r(rKrLrr�r�r�r+)rr�rPrrrrr-Nsz!TestIPv6Environment.test_makepasvcs4�fdd�}�j�d�|��j�d�|�dS)NcsN�fdd�}g��j�d|���td����tt����d���t�dS)Ncs��|�d��dS)Nr)r1r)r2)r�rrr�VszATestIPv6Environment.test_transfer.<locals>.retr.<locals>.callbackr�r	)r�r�r�r�r7r.)r�)r)r�rr�Us
z/TestIPv6Environment.test_transfer.<locals>.retrTF)r�r�)rr�r)rr�
test_transferTs
z!TestIPv6Environment.test_transferN)	r"r#r$r�r�rEr+r-rFrrrrrD6srDzSSL not availablec@seZdZdZdd�ZdS)�TestTLS_FTPClassMixinzfRepeat TestFTPClass tests starting the TLS layer for both control
    and data connections first.
    cCsTttdf�|_|j��tjtd�|_|j�|jj	|jj
�|j��|j��dS)Nr)rF)
r�rr�r�r��FTP_TLSrLr�r�r�rP�auth�prot_p)rrrrr�hs

zTestTLS_FTPClassMixin.setUpN)r"r#r$r�r�rrrrrGbsrGc@sbeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zedd�dd��Z
dS)�TestTLS_FTPClasszSpecific TLS_FTP class tests.cCs@ttdf�|_|j��tjtd�|_|j�|jj	|jj
�dS)Nr)rF)r�rr�r�r�rHrLr�r�r�rP)rrrrr�vs
zTestTLS_FTPClass.setUpcCs*|j��|j��d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrrr�|s

zTestTLS_FTPClass.tearDowncCs2|�|jjtj�|j��|�|jjtj�dS)N)�assertNotIsInstancer�rZr�r�rIr$)rrrr�test_control_connection�s
z(TestTLS_FTPClass.test_control_connectionc	Cs|j�d��,}|�|tj�|�|�d�t�d��WdQRX|�|j�	�d�|j�
�|j�d��,}|�|tj�|�|�d�t�d��WdQRX|�|j�	�d�|j��|j�d��,}|�|tj�|�|�d�t�d��WdQRX|�|j�	�d�dS)NrGirz226 transfer complete)
r�r;rLr�r�r�rrtrZvoidresprJr$Zprot_c)rrZrrr�test_data_connection�s"
"
"z%TestTLS_FTPClass.test_data_connectioncCs<|�|jjtj�|j��|�|jjtj�|j��dS)N)rLr�rZr�r�r�r$)rrrrr��s
zTestTLS_FTPClass.test_logincCs|j��|�t|jj�dS)N)r�rIr�r�)rrrr�test_auth_issued_twice�s
z'TestTLS_FTPClass.test_auth_issued_twicec	Cs
|j��t�tj�}d|_tj|_|jt	t
jt|d�|jt	t
jt|d�|jt	t
jtt|d�t
j|t
d�|_|j�|jj|jj�|�|jjtj�|j��|�|jjj|�|�|jjtj�|j��|j�d��"}|�|j|�|�|tj�WdQRXdS)NF)�keyfiler�)�certfiler�)rQrPr�)r�rFrG)r�r�r�r��PROTOCOL_TLS_CLIENT�check_hostnameZ	CERT_NONE�verify_moder�r�r�rHr�rLr�r�r�rPrLrZr�rIZassertIsr�r$rJr;)r�ctxrZrrr�test_context�s(



zTestTLS_FTPClass.test_contextcCsP|�t|jj�|jjdd�|�|jjtj�|j��|�t|jjj	�dS)NT)Zsecure)
r�r�r�Zcccr�r$rZr�r�r�)rrrr�test_ccc�s

zTestTLS_FTPClass.test_cccFzFIXME: bpo-32706c
Cs>|j��t�tj�}|�|jtj�|�|jd�|�	t
�tj|t
d�|_|j�|jj|jj�|�tj��|j��WdQRX|j�|jj|jj�|j��|�tj��|j�d��}WdQRXWdQRX|j��|j�d|jj�|j��|j��|j�d|jj�|j��|j�d��}WdQRXdS)NT)r�rFrGZ	localhost)r�r�r�r�rRr�rTZ
CERT_REQUIREDrSZload_verify_locations�CAFILEr�rHrLr�r�r�rPr�ZCertificateErrorrIrJr;)rrUrZrrr�test_check_hostname�s,






z$TestTLS_FTPClass.test_check_hostnameN)r"r#r$r�r�r�rMrNr�rOrVrWrrYrrrrrKrsrKc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestTimeoutscCs�t��|_t�tjtj�|_|j�d�t�	|j�|_
tj|jd�|_
d|j
_|j
��|j��|j��tjj
|_|j
tj_
dS)Nr�)�targetT)rr��evtr(r�r�rZrWrZ	bind_portrPr�r��
server_threadr�r�r��clearr�r��old_port)rrrrr��s




zTestTimeouts.setUpcCs|jtj_|j��d|_dS)N)r_r�r�rPr]r7)rrrrr��s

zTestTimeouts.tearDowncCs||j��|j��zVy|j��\}}Wntjk
r>Yn*X|�d�|�tj	�|j��|�
�Wd|j�
�XdS)Ns
1 Hola mundo
)rZrVr\r�rYr(rFZsendallZshutdownZSHUT_WRr)rrrNrrrr�s



zTestTimeouts.serverc	Cs\|�t���t�d�zt�t�}Wdt�d�X|�|j�	�d�|j
��|��dS)Nr)
�assertIsNoner(�getdefaulttimeout�setdefaulttimeoutr�r�rr�rZ�
gettimeoutr\r�r)r�ftprrr�testTimeoutDefaults

zTestTimeouts.testTimeoutDefaultc	Cs^|�t���t�d�ztjtdd�}Wdt�d�X|�|j���|j	�
�|��dS)Nr)rF)r`r(rarbr�r�rrZrcr\r�r)rrdrrr�testTimeoutNone!s

zTestTimeouts.testTimeoutNonecCs6tjtdd�}|�|j��d�|j��|��dS)Nr)rF)	r�r�rr�rZrcr\r�r)rrdrrr�testTimeoutValue-s
zTestTimeouts.testTimeoutValuecCs>t��}|jtdd�|�|j��d�|j��|�	�dS)Nr)rF)
r�r�r�rr�rZrcr\r�r)rrdrrr�testTimeoutConnect4s

zTestTimeouts.testTimeoutConnectcCs>tjdd�}|�t�|�|j��d�|j��|�	�dS)Nr)rF)
r�r�r�rr�rZrcr\r�r)rrdrrr�testTimeoutDifferentOrder;s


z&TestTimeouts.testTimeoutDifferentOrdercCs@t��}d|_|�t�|�|j��d�|j�	�|�
�dS)Nr)r�r�rFr�rr�rZrcr\r�r)rrdrrr�testTimeoutDirectAccessBs

z$TestTimeouts.testTimeoutDirectAccessN)r"r#r$r�r�r�rerfrgrhrirjrrrrrZ�srZc@seZdZdd�ZdS)�MiscTestCasec
Cs2ddddddddd	d
ddd
h
}tj|t|d�dS)NZMSG_OOBZFTP_PORTZMAXLINEZCRLFZB_CRLFr�Zparse150Zparse227Zparse229r=Z
print_lineZftpcp�test)�	blacklist)rZcheck__all__r�)rrmrrr�test__all__Ls


zMiscTestCase.test__all__N)r"r#r$rnrrrrrkKsrkcCs8ttttttg}t��}ztj|�Wdtj	|�XdS)N)
r�rZrDrGrKrkrZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_mainSsrp�__main__)2r�r�r�r
r(rr��osrr3r��ImportErrorZunittestrrrlrZtest.supportrrrLr.rtrvryrrr&r�r�r}rr7�dirname�__file__r�rXr�r�r�r�r�ZIPV6_ENABLEDrDrGrKrZrkrpr"rrrr�<module>s\
 42
i	(a+wa