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.10/test/__pycache__/test_urllib2_localnet.cpython-310.pyc
o

�i�e�@s�ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
ddlmZzddlZWneyGdZYnwej�e�Zej�ed�Zej�ed�ZGdd�dejj�ZGd	d
�d
ej�ZGdd�d�ZGd
d�dejj�ZGdd�dejj�Z Gdd�de	j!�Z"ej#ddd�Gdd�de	j!��Z$dd�Z%Gdd�de	j!�Z&dd�Z'e(dkr�e	�)�dSdS)�N)�hashlib_helper)�threading_helper)�warnings_helperzkeycert.pemzkeycert2.pemc@s eZdZdZdd�Zdd�ZdS)�LoopbackHttpServerz^HTTP server w/ a few modifications that make it useful for
    loopback testing purposes.
    cCs"tjj�|||�|j�d�dS)Ng�������?)�http�server�
HTTPServer�__init__�socket�
settimeout)�selfZserver_addressZRequestHandlerClass�r
�7/usr/local/lib/python3.10/test/test_urllib2_localnet.pyr	"s

�zLoopbackHttpServer.__init__cCs |j��\}}|�d�||fS)zHTTPServer method, overridden.g$@)r
�acceptr)r�requestZclient_addressr
r
r�get_request+s
zLoopbackHttpServer.get_requestN)�__name__�
__module__�__qualname__�__doc__r	rr
r
r
rrs	rc@�(eZdZdZdd�Zdd�Zdd�ZdS)	�LoopbackHttpServerThreadz2Stoppable thread that runs a loopback http server.cCs<tj�|�d|_t��|_d|_td|�|_|jj	|_
dS)NFzHTTP/1.0)z	127.0.0.1r)�	threading�Threadr	�_stop_server�Event�readyZprotocol_versionr�httpdZserver_port�port�r�request_handlerr
r
rr	:s
�z!LoopbackHttpServerThread.__init__cCsd|_|��|j��dS)z.Stops the webserver if it's currently running.TN)r�joinrZserver_close�rr
r
r�stopCszLoopbackHttpServerThread.stopcCs(|j��|js|j��|jrdSdS�N)r�setrr�handle_requestr"r
r
r�runKs

�zLoopbackHttpServerThread.runN)rrrrr	r#r'r
r
r
rr7s
	rc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�DigestAuthHandlerz-Handler for performing digest authentication.cCs"d|_g|_i|_d|_d|_dS)Nrz
Test Realm�auth)�_request_num�_nonces�_users�_realm_name�_qopr"r
r
rr	Us

zDigestAuthHandler.__init__cC�
||_dSr$)r.)rZqopr
r
r�set_qop\�
zDigestAuthHandler.set_qopcCst|t�sJ�||_dSr$)�
isinstance�dictr,)rZusersr
r
r�	set_users_s
zDigestAuthHandler.set_userscCr/r$)r-)rZrealmr
r
r�	set_realmcr1zDigestAuthHandler.set_realmcCs8|jd7_t�t|j��d����}|j�|�|S)N��ascii)r*�hashlib�md5�str�encode�	hexdigestr+�append)r�noncer
r
r�_generate_noncefsz!DigestAuthHandler._generate_noncecCs�|�d�}||dd�}|�d�}i}|D](}|�d�\}}|��}|ddkr6|ddkr6|dd�}n|��}|||<q|S)N� r6�,�=r�"���)�find�split�strip)rZauth_strZfirst_space_index�parts�	auth_dict�part�name�valuer
r
r�_create_auth_dictls


z#DigestAuthHandler._create_auth_dictcCs�i}|�|�||d<||d<||d<d|}t�|�d����}d|}t�|�d����}	||d<|	|d<d	|}
t�|
�d����}||d
kS)N�password�method�uriz#%(username)s:%(realm)s:%(password)sr7z%(method)s:%(uri)s�HA1�HA2z3%(HA1)s:%(nonce)s:%(nc)s:%(cnonce)s:%(qop)s:%(HA2)s�response)�updater8r9r;r<)rrIrNrOrPZ
final_dictZHA1_strrQZHA2_strrRZresponse_strrSr
r
r�_validate_auth}s 
�z DigestAuthHandler._validate_authcCsN|�dd�|�dd�|�dd|j|j|��f�|��|j�d�dS)	Ni�zProxy Authentication Required�Content-Type�	text/htmlzProxy-Authenticatez(Digest realm="%s", qop="%s",nonce="%s", sProxy Authentication Required.F)�
send_response�send_headerr-r.r?�end_headers�wfile�writerr
r
r�_return_auth_challenge�s��z(DigestAuthHandler._return_auth_challengecCs�t|j�dkr	dSd|jvr|�|�S|�|jd�}|d|jvr*|j|d}n|�|�S|�d�|jvr<|�|�S|j�|d�d}|j|j	fD]
}|�
|||j|�rYd}qL|sa|�|�SdS)aPerforms digest authentication on the given HTTP request
        handler.  Returns True if authentication was successful, False
        otherwise.

        If no users have been set, then digest auth is effectively
        disabled and this method will always return True.
        rTzProxy-Authorization�usernamer>F)�lenr,�headersr]rM�getr+�remove�path�
short_pathrUZcommand)rr rIrNZauth_validatedrcr
r
rr&�s2	

�

��
z DigestAuthHandler.handle_requestN)
rrrrr	r0r4r5r?rMrUr]r&r
r
r
rr(Rsr(c@sfeZdZdZdZdZdZdeefZe�	e�
d���d�Zdd�Z
d	d
�Zdd�Zd
d�Zdd�ZdS)�BasicAuthHandlerz,Handler for performing basic authentication.�testUser�testPass�Testz%s:%sr7cOs tjjj|g|�Ri|��dSr$)rr�BaseHTTPRequestHandlerr	)r�args�kwargsr
r
rr	�s zBasicAuthHandler.__init__cG�dSr$r
�r�formatrjr
r
r�log_message�szBasicAuthHandler.log_messagecCs"|�d�|�dd�|��dS)N���Content-typerW)rXrYrZr"r
r
r�do_HEAD�s
zBasicAuthHandler.do_HEADcCs4|�d�|�dd|j�|�dd�|��dS)Ni�zWWW-AuthenticatezBasic realm="%s"rqrW)rXrY�REALMrZr"r
r
r�do_AUTHHEAD�s
zBasicAuthHandler.do_AUTHHEADcCsl|j�dd�s|��|j�d�dS|j�dd�d|jkr0|�d�|��|j�d�dS|��dS)NZ
Authorization�sNo Auth header receivedzBasic rpsIt works)r`rartr[r\�ENCODED_AUTHrXrZr"r
r
r�do_GET�s��
zBasicAuthHandler.do_GETN)rrrr�USER�PASSWDrsZUSER_PASSWD�base64Z	b64encoder;�decodervr	rorrrtrwr
r
r
rre�srec@r)	�FakeProxyHandlerz�This is a 'fake proxy' that makes it look like the entire
    internet has gone down due to a sudden zombie invasion.  It main
    utility is in providing us with authentication support for
    testing.
    cOs&||_tjjj|g|�Ri|��dSr$)�digest_auth_handlerrrrir	)rr}rjrkr
r
rr	�s zFakeProxyHandler.__init__cGrlr$r
rmr
r
rroszFakeProxyHandler.log_messagecCsztj�|jd�\}}}}}}||_|j�|�r;|�dd�|�dd�|�	�|j
�td|jd��|j
�d�dSdS)	NrrpZOKrVrWzYou've reached %s!<BR>r7sFOur apologies, but our server is down due to a sudden zombie invasion.)
�urllib�parse�urlparsercrdr}r&rXrYrZr[r\�bytes)rZscm�netlocrc�params�query�fragmentr
r
rrw	s���zFakeProxyHandler.do_GETN)rrrrr	rorwr
r
r
rr|�s
r|csPeZdZdZdZdZdZ�fdd�Zdd�Z�fd	d
�Z	dd�Z
d
d�Z�ZS)�BasicAuthTestsrfrgZ	IncorrectrhcsTtt|���dd�}t|�|_|�|j�d|jj|_|j�	�|jj
��dS)Nc_st|i|��Sr$)re�rjrkr
r
r�#http_server_with_basic_auth_handler!szABasicAuthTests.setUp.<locals>.http_server_with_basic_auth_handlerzhttp://127.0.0.1:%s)�superr��setUprr�
addCleanup�stop_serverr�
server_url�startr�wait)rr���	__class__r
rr�s

zBasicAuthTests.setUpcC�|j��d|_dSr$�rr#r"r
r
rr�)�

zBasicAuthTests.stop_servercstt|���dSr$)r�r��tearDownr"r�r
rr�-szBasicAuthTests.tearDowncCsztj��}|�|j|j|j|j�tj�tj�	|��z
|�
tj�|j��WdStjj
y<|�d|j�YdSw)Nz!Basic auth failed for the url: %s)r~r�HTTPBasicAuthHandler�add_passwordrsr�rxry�install_opener�build_opener�
assertTrue�urlopen�error�	HTTPError�fail�rZahr
r
r�test_basic_auth_success0s
�z&BasicAuthTests.test_basic_auth_successcCsRtj��}|�|j|j|j|j�tj�tj�	|��|�
tjjtjj
|j�dSr$)r~rr�r�rsr�rx�INCORRECT_PASSWDr�r��assertRaisesr�r�r�r�r
r
r�test_basic_auth_httperror9s
z(BasicAuthTests.test_basic_auth_httperror)
rrrrxryr�rsr�r�r�r�r��
__classcell__r
r
r�rr�s	r�r9T)ZopensslcsTeZdZdZdZdZdZ�fdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Z�Z
S)�ProxyAuthTestszhttp://localhostZtesterZtest123Z	TestRealmcs�tt����dd�}��|tj���dtjd<dtjd<t��_�j�	�j
�ji��j��j
��fdd�}t|��_���j��j���jj��d�jj}tj�d	|i�}tj���_tj�|�j��_dS)
NcS�tj��tj�|�dSr$��os�environ�clearrT�Zold_environr
r
r�restore_environK�
z-ProxyAuthTests.setUp.<locals>.restore_environru�NO_PROXY�no_proxycst�jg|�Ri|��Sr$)r|r}r�r"r
r�create_fake_proxy_handlerVsz7ProxyAuthTests.setUp.<locals>.create_fake_proxy_handlerzhttp://127.0.0.1:%dr)r�r�r�r�r�r��copyr(r}r4rxryr5rsrrr�r�rr�rr~rZProxyHandlerZProxyDigestAuthHandler�proxy_digest_handlerr��opener)rr�r�Z	proxy_url�handlerr�r"rr�Hs&




�zProxyAuthTests.setUpcCr�r$r�r"r
r
rr�cr�zProxyAuthTests.stop_servercCsF|j�|j|j|j|jd�|j�d�|�t	j
j|jj
|j�dS)NZbadr))r�r�rs�URLrxryr}r0r�r~r�r�r��openr"r
r
r�-test_proxy_with_bad_password_raises_httperrorgs�
�z<ProxyAuthTests.test_proxy_with_bad_password_raises_httperrorcCs(|j�d�|�tjj|jj|j�dS�Nr))	r}r0r�r~r�r�r�r�r�r"r
r
r�,test_proxy_with_no_password_raises_httperroros

�z;ProxyAuthTests.test_proxy_with_no_password_raises_httperrorcCs||j�|j|j|j|j�|j�d�|j�	|j��}|�
�r,	|�
�sWd�dSWd�dS1s7wYdSr�)r�r�rsr�rxryr}r0r�r��read�r�resultr
r
r�test_proxy_qop_auth_worksus�
��"�z(ProxyAuthTests.test_proxy_qop_auth_workscCs�|j�|j|j|j|j�|j�d�z	|j�	|j�}Wnt
jjy(YdSw|�|�
�r=	|�
�s0Wd�dSWd�dS1sHwYdS)Nzauth-int)r�r�rsr�rxryr}r0r�r�r~r��URLErrorr�r�r
r
r�0test_proxy_qop_auth_int_works_or_throws_urlerror}s ��
��"�z?ProxyAuthTests.test_proxy_qop_auth_int_works_or_throws_urlerror)rrrr�rxryrsr�r�r�r�r�r�r�r
r
r�rr�@sr�csG��fdd�dtjj���S)NcsBeZdZdZgZgZdZdd�Zdd�Z��fdd�Z	d	d
�Z
dS)z1GetRequestHandler.<locals>.FakeHTTPRequestHandlerz	TestHTTP/�PcSs0|��}|r|j�|�}||d�}|sdSdSr$)�	send_headr[r\)r�body�doner
r
rrw�s
�z8GetRequestHandler.<locals>.FakeHTTPRequestHandler.do_GETcSs2|jd}|j�t|��}|��|j�|�dS)NzContent-Length)r`Zrfiler��intrw�requestsr=)rZcontent_lengthZ	post_datar
r
r�do_POST�s
z9GetRequestHandler.<locals>.FakeHTTPRequestHandler.do_POSTcs||j�_|j�|j���d�\}}}|�|�|D]\}}|�||d|ji�q|r8|�dd�|�	�|S|�	�dS)Nrrrqz
text/plain)
r`�headers_receivedr�r=rc�poprXrYrrZ)rZ
response_coder`r��headerrL��FakeHTTPRequestHandler�	responsesr
rr��s
z;GetRequestHandler.<locals>.FakeHTTPRequestHandler.send_headcWrlr$r
)rrjr
r
rro�sz=GetRequestHandler.<locals>.FakeHTTPRequestHandler.log_messageN)rrrZserver_versionr�r�rrwr�r�ror
r�r
rr��sr�)rrri)r�r
r�r�GetRequestHandler�s&r�cs�eZdZdZ�fdd�Zd/dd�Zdd�Zd/d	d
�Zd/dd�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.�Z�ZS)0�TestUrlopenaNTests urllib.request.urlopen using the network.

    These tests are not exhaustive.  Assuming that testing using files does a
    good job overall of some of the basic interface features.  There are no
    tests exercising the optional 'data' and 'proxies' arguments.  No tests
    for transparent redirection have been written.
    csNtt|���|�tjj�dd�}|�|tj�	��dtjd<dtjd<dS)NcSr�r$r�r�r
r
rr��r�z*TestUrlopen.setUp.<locals>.restore_environ�*r�r�)
r�r�r�r�r~r�
urlcleanupr�r�r�)rr�r�r
rr��s
zTestUrlopen.setUpNcKsxg}tjj||fi|��}z$|�|�d��|�|���|�|�d��|�|���W|��n|��wd�	|�S)Nrpi�)
r~rr��extend�	readlinesr=�readliner��closer!)r�url�datark�l�fr
r
rr��s
zTestUrlopen.urlopencCr�r$r�r"r
r
rr��r�zTestUrlopen.stop_servercCsZ|dur
dgdfg}t|�}t|�|_|�|j�|j��|jj��|jj}||_|S)Nrps
we don't care)	r�rrr�r�r�rr�r)rr�r�rr
r
r�start_server�s

zTestUrlopen.start_servercKs^ttjd�s|�d�ddlm}|durdgdfg}t|�}||fd|i|��}|j|_|S)NZHTTPSHandlerzssl support requiredr)�make_https_serverrp�
we care a bitZ
handler_class)�hasattrr~r�skipTestZtest.ssl_serversr�r�r)rr�rkr�r�rr
r
r�start_https_server�s
zTestUrlopen.start_https_servercCsVd}ddgdfdg|fg}|�|�}|�d|j�}|�||�|�|jddg�dS)	NsWe got here...i.)ZLocationz(http://localhost:%(port)s/somewhere_elserurp�http://localhost:%s/�/z/somewhere_else�r�r�r�assertEqualr�)r�expected_responser�r�r�r
r
r�test_redirection�s��
zTestUrlopen.test_redirectioncCs@d}d}ddg|fg}|�|�}|�d|j�}|�||�dS)Nshello worldsa
hello worl
1
d
0
rp)zTransfer-EncodingZchunkedr�)r�r�rr�)rr�Z
chunked_startrSr�r�r
r
r�test_chunkeds�
zTestUrlopen.test_chunkedc
Cs�d}|�dg|fg�}z
|�d|j�Wntjjy1}z|��}|��WYd}~n
d}~ww|�d�|�	||�|�	|j
dg�dS)NsBad bad bad...i�zhttp://localhost:%s/weeblez404 should raise URLErrorz/weeble)r�r�rr~r�r�r�r�r�r�r�)rr�r�r�r�r
r
r�test_404s��
zTestUrlopen.test_404cCsFd}|�dg|fg�}|�d|j�}|�||�|�|jdg�dS)N�
pycon 2008...rp�http://localhost:%s/bizarre�/bizarrer��rr�r�r�r
r
r�test_200#s
zTestUrlopen.test_200cCsJd}|�dg|fg�}|�d|jd�}|�||�|�|jddg�dS)Nr�rpr�sget=with_feelingr�r�r�r
r
r�test_200_with_parameters*s�z$TestUrlopen.test_200_with_parameterscCs8|��}tjtd�}|jd|j|d�}|�|d�dS)N�Zcafile�https://localhost:%s/bizarre��contextr�)r��ssl�create_default_context�CERT_localhostr�rr�)rr�r�r�r
r
r�
test_https2szTestUrlopen.test_httpsc	Cs|jtd�}t�dtf��i|jd|jtd�}|�|d�|�t	j
j��}|jd|jtd�Wd�n1s:wY|jtd�}|�t	j
j��}|jd|jtd�Wd�n1sawYWd�dSWd�dS1sywYdS)N��certfilerur�r�r�)
r�r�r�check_warnings�DeprecationWarningr�rr�r�r~r�r��CERT_fakehostname)rr�r��cmr
r
r�test_https_with_cafile8s(������"�z"TestUrlopen.test_https_with_cafilec	Cs�|jtd�}t�dtf��2|�tjj��}|j	d|j
dd�Wd�n1s*wYWd�dSWd�dS1sBwYdS)Nr�rur�T)Z	cadefault)r�r�rr�r�r�r~r�r�r�r)rr�r�r
r
r�test_https_with_cadefaultIs���"�z%TestUrlopen.test_https_with_cadefaultcs�tdur	|�d�tjs|�d�d��fdd�}t�tj�}|�|�|j|td�}tjtd�}|j	d|j
|d�|��d	�dS)
Nzssl module requiredzSNI support required in OpenSSLcs|�dSr$r
)Zssl_sockZserver_nameZinitial_context�Zsni_namer
r�cb_sniWsz*TestUrlopen.test_https_sni.<locals>.cb_sni)r�r�r�zhttps://localhost:%sr��	localhost)r�r�ZHAS_SNIZ
SSLContextZPROTOCOL_TLS_SERVERZset_servername_callbackr�r�r�r�rr�)rr�r�r�r
r�r�test_https_sniQs


zTestUrlopen.test_https_snicCsd|��}tjjd|jddid�}tj�|��Wd�n1s"wY|�|jdd�dS)Nr�ZRangezbytes=20-39�r`)r�r~r�Requestrr�r�r��rr�Zreqr
r
r�test_sending_headersas��z TestUrlopen.test_sending_headerscCsv|��}tjjd|jddid�}tj�|��Wd�n1s"wY|�d|j���|�	d|j���dS)Nr�z
X-SoMe-hEaderZfoobarrz
X-Some-Header)
r�r~rrrr�ZassertInr��keysZassertNotInrr
r
r�test_sending_headers_camelis��z&TestUrlopen.test_sending_headers_camelcCsp|��}tj�d|j��!}dD]
}|�t||�d|�q|�|��d�Wd�dS1s1wYdS)N�http://localhost:%s)r�r��info�geturlz3object returned from urlopen lacks the %s attributezcalling 'read' failed)r�r~rr�rr�r�r�)rr��open_url�attrr
r
r�
test_basicrs�"�zTestUrlopen.test_basiccCsl|��}tj�d|j�}|�|��}Wd�n1swY|�|tjj	d�|�
|��d�dS)NrzEobject returned by 'info' is not an instance of email.message.MessageZplain)r�r~rr�rr	ZassertIsInstance�email�messageZMessager�Zget_content_subtype)rr�rZinfo_objr
r
r�	test_infozs�
��zTestUrlopen.test_infocCs\|��}tj�d|j�}|�|��}Wd�n1swY|�|d|j�dS)Nr)r�r~rr�rr
r�)rr�rr�r
r
r�test_geturl�s
�zTestUrlopen.test_geturlcCsBd}|�dg|fg�}tj�d|j�}|D]}|�||�qdS)Nr�rpr)r�r~rr�rr�)rr�r�r��liner
r
r�test_iteration�s�zTestUrlopen.test_iterationc
Cs�ddddddg}d�|�}|�dg|fg�}tj�d	|j�}t|�D]\}}|�|||d
|t||�t|�f�q%|�|dt|��dS)NsWe
sgot
shere
s	verylong i �
r�rprzQFetched line number %s doesn't match expected:
    Expected length was %s, got %sr6)	r!r�r~rr�r�	enumerater�r_)r�linesr�r�r��indexrr
r
r�test_line_iteration�s
��zTestUrlopen.test_line_iterationcCs�|�dgdfdgdfg�}tj��}tj�d|j�}|�d|j�|�|d�	d��|�d|j�|�d|�
d��|�|d�	d��|�d	|j�|�d
|�
d��dS)Nrpsanyr�1zus-ascii�1zContent-lengthZ
1234567890s
1234567890Z10)r�r~rr�rrr�r�r�r;Z
get_header)rr�r�rr
r
r�test_issue16464�s�
zTestUrlopen.test_issue16464r$)rrrrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rrrrrr�r
r
r�rr��s0




	r�cCs t��}tjtjg|�R�dSr$)rZthreading_setup�unittestZaddModuleCleanupZthreading_cleanup)�thread_infor
r
r�setUpModule�sr�__main__)*rzr�r�urllib.parser~Zurllib.requestZhttp.serverrrrr8Ztest.supportrrrr��ImportErrorrc�dirname�__file__�herer!r�r�rrrrrr(rirer|ZTestCaser�Zrequires_hashdigestr�r�r�rr�mainr
r
r
r�<module>sF�y,!(M+{�