
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a–¸  ã                   @   sþ  d Z dddddgZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ dd	lmZ d
ZdZG dd„ dejƒZG dd„ dejeƒZG dd„ dejƒZ G dd„ de ƒZ!dd„ Z"da#dd„ Z$dd„ Z%G dd„ de!ƒZ&dd„ Z'e edddfdd„Z(e)dk�rúddl*Z*e* +¡ Z,e,j-ddd d!� e,j-d"d#d$d%d&� e,j-d'd(e .¡ d)d*� e,j-d+d,de/d-d.d/� e, 0¡ Z1e1j2�rÈe&Z3nee!e1j4d0�Z3G d1d2„ d2eƒZ5e(e3e5e1j6e1j7d3� dS )4z0.6Ú
HTTPServerÚThreadingHTTPServerÚBaseHTTPRequestHandlerÚSimpleHTTPRequestHandlerÚCGIHTTPRequestHandleré    N)Úpartial)Ú
HTTPStatusa¹  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c                   @   s   e Zd ZdZdd„ ZdS )r   é   c                 C   s4   t j | ¡ | jd d… \}}t |¡| _|| _d S )Né   )ÚsocketserverÚ	TCPServerÚserver_bindZserver_addressÚsocketZgetfqdnÚserver_nameÚserver_port)ÚselfÚhostÚport© r   ú0/opt/alt/python38/lib64/python3.8/http/server.pyr   ˆ   s    zHTTPServer.server_bindN)Ú__name__Ú
__module__Ú__qualname__Zallow_reuse_addressr   r   r   r   r   r   „   s   c                   @   s   e Zd ZdZdS )r   TN)r   r   r   Zdaemon_threadsr   r   r   r   r   �   s   c                   @   s  e Zd Zdej ¡ d  Zde Ze	Z
eZdZdd„ Zdd„ Zd	d
„ Zdd„ Zd?dd„Zd@dd„ZdAdd„Zdd„ Zdd„ Zdd„ ZdBdd„Zdd„ Zdd „ Zd!d"„ ZdCd#d$„Zd%d&„ Zd'd(d)d*d+d,d-gZdd.d/d0d1d2d3d4d5d6d7d8d9gZd:d;„ Z d<Z!e"j#j$Z%d=d>„ e&j' (¡ D ƒZ)dS )Dr   zPython/r   z	BaseHTTP/úHTTP/0.9c              
   C   sÔ  d | _ | j | _}d| _t| jdƒ}| d¡}|| _| ¡ }t	|ƒdkrLdS t	|ƒdk�r&|d }zT| 
d¡srt‚| d	d
¡d
 }| d¡}t	|ƒdkrœt‚t|d ƒt|d
 ƒf}W n, ttfk
râ   |  tjd| ¡ Y dS X |dk�r | jdk�r d| _|dk�r |  tjd| ¡ dS || _dt	|ƒ  k�rBdk�sZn |  tjd| ¡ dS |d d… \}}t	|ƒdk�ržd| _|dk�rž|  tjd| ¡ dS || | _ | _ztjj| j| jd�| _W n‚ tjjk
�r } z|  tjdt|ƒ¡ W Y ¢dS d }~X Y nB tjjk
�rH } z|  tjdt|ƒ¡ W Y ¢dS d }~X Y nX | j dd¡}	|	 ¡ dk�rnd| _n |	 ¡ dk�rŽ| jdk�rŽd| _| j dd¡}
|
 ¡ dk�rÐ| jdk�rÐ| jdk�rÐ|  ¡ �sÐdS dS )NTz
iso-8859-1z
r   Fé   éÿÿÿÿzHTTP/ú/r	   Ú.r
   zBad request version (%r))r	   r	   zHTTP/1.1)r
   r   zInvalid HTTP version (%s)zBad request syntax (%r)ZGETzBad HTTP/0.9 request type (%r))Z_classzLine too longzToo many headersÚ
ConnectionÚ Úcloseú
keep-aliveZExpectz100-continue) ÚcommandÚdefault_request_versionÚrequest_versionÚclose_connectionÚstrÚraw_requestlineÚrstripÚrequestlineÚsplitÚlenÚ
startswithÚ
ValueErrorÚintÚ
IndexErrorÚ
send_errorr   ZBAD_REQUESTÚprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDÚpathÚhttpÚclientZparse_headersÚrfileÚMessageClassÚheadersZLineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZHTTPExceptionÚgetÚlowerÚhandle_expect_100)r   Úversionr)   ÚwordsZbase_version_numberZversion_numberr"   r2   ÚerrZconntypeZexpectr   r   r   Úparse_request  s¨    


þ
þþ
þ
ÿýýÿÿþ
z$BaseHTTPRequestHandler.parse_requestc                 C   s   |   tj¡ |  ¡  dS ©NT)Úsend_response_onlyr   ZCONTINUEÚend_headers©r   r   r   r   r:   p  s    z(BaseHTTPRequestHandler.handle_expect_100c              
   C   sî   z¬| j  d¡| _t| jƒdkrBd| _d| _d| _|  tj	¡ W d S | jsTd| _
W d S |  ¡ sbW d S d| j }t| |ƒs�|  tjd| j ¡ W d S t| |ƒ}|ƒ  | j ¡  W n< tjk
rè } z|  d|¡ d| _
W Y ¢d S d }~X Y nX d S )Ni  i   r   TZdo_zUnsupported method (%r)zRequest timed out: %r)r5   Úreadliner'   r+   r)   r$   r"   r0   r   ZREQUEST_URI_TOO_LONGr%   r>   ÚhasattrÚNOT_IMPLEMENTEDÚgetattrÚwfileÚflushr   ZtimeoutÚ	log_error)r   ZmnameÚmethodÚer   r   r   Úhandle_one_request‚  s6    

þ
z)BaseHTTPRequestHandler.handle_one_requestc                 C   s"   d| _ |  ¡  | j s|  ¡  qd S r?   )r%   rL   rB   r   r   r   Úhandle§  s    zBaseHTTPRequestHandler.handleNc                 C   s  z| j | \}}W n tk
r.   d\}}Y nX |d kr<|}|d krH|}|  d||¡ |  ||¡ |  dd¡ d }|dkrâ|tjtjtjfkrâ| j	|t
j|dd�t
j|dd�dœ }| d	d
¡}|  d| j¡ |  dtt|ƒƒ¡ |  ¡  | jdk�r|�r| j |¡ d S )N)ú???rN   zcode %d, message %sr   r    éÈ   F©Úquote)ÚcodeÚmessageÚexplainzUTF-8ÚreplacezContent-TypeúContent-LengthZHEAD)Ú	responsesÚKeyErrorrI   Úsend_responseÚsend_headerr   Z
NO_CONTENTZRESET_CONTENTÚNOT_MODIFIEDÚerror_message_formatÚhtmlÚescapeÚencodeÚerror_content_typer&   r+   rA   r"   rG   Úwrite)r   rR   rS   rT   ZshortmsgZlongmsgZbodyZcontentr   r   r   r0   ¯  s:    þÿýz!BaseHTTPRequestHandler.send_errorc                 C   s:   |   |¡ |  ||¡ |  d|  ¡ ¡ |  d|  ¡ ¡ d S )NZServerZDate)Úlog_requestr@   rZ   Úversion_stringÚdate_time_string©r   rR   rS   r   r   r   rY   ä  s    
z$BaseHTTPRequestHandler.send_responsec                 C   sd   | j dkr`|d kr0|| jkr,| j| d }nd}t| dƒs@g | _| j d| j||f  dd¡¡ d S )Nr   r   r   Ú_headers_bufferz
%s %d %s
úlatin-1Ústrict)r$   rW   rD   rf   Úappendr1   r_   re   r   r   r   r@   ñ  s    



ÿ þz)BaseHTTPRequestHandler.send_response_onlyc                 C   sl   | j dkr6t| dƒsg | _| j d||f  dd¡¡ | ¡ dkrh| ¡ dkrVd| _n| ¡ d	krhd
| _d S )Nr   rf   z%s: %s
rg   rh   Z
connectionr    Tr!   F)r$   rD   rf   ri   r_   r9   r%   )r   ÚkeywordÚvaluer   r   r   rZ   ÿ  s    

ÿz"BaseHTTPRequestHandler.send_headerc                 C   s"   | j dkr| j d¡ |  ¡  d S )Nr   s   
)r$   rf   ri   Úflush_headersrB   r   r   r   rA     s    
z"BaseHTTPRequestHandler.end_headersc                 C   s(   t | dƒr$| j d | j¡¡ g | _d S )Nrf   ó    )rD   rG   ra   Újoinrf   rB   r   r   r   rl     s    
z$BaseHTTPRequestHandler.flush_headersú-c                 C   s.   t |tƒr|j}|  d| jt|ƒt|ƒ¡ d S )Nz
"%s" %s %s)Ú
isinstancer   rk   Úlog_messager)   r&   )r   rR   Úsizer   r   r   rb     s    
  ÿz"BaseHTTPRequestHandler.log_requestc                 G   s   | j |f|žŽ  d S ©N)rq   ©r   ÚformatÚargsr   r   r   rI   #  s    z BaseHTTPRequestHandler.log_errorc                 G   s&   t j d|  ¡ |  ¡ || f ¡ d S )Nz%s - - [%s] %s
)ÚsysÚstderrra   Úaddress_stringÚlog_date_time_stringrt   r   r   r   rq   1  s    þÿz"BaseHTTPRequestHandler.log_messagec                 C   s   | j d | j S )Nú )Úserver_versionÚsys_versionrB   r   r   r   rc   G  s    z%BaseHTTPRequestHandler.version_stringc                 C   s    |d krt   ¡ }tjj|dd�S )NT)Zusegmt)ÚtimeÚemailÚutilsZ
formatdate)r   Z	timestampr   r   r   rd   K  s    z'BaseHTTPRequestHandler.date_time_stringc              	   C   sB   t   ¡ }t  |¡\	}}}}}}}}	}
d|| j| ||||f }|S )Nz%02d/%3s/%04d %02d:%02d:%02d)r~   Ú	localtimeÚ	monthname)r   ZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsr   r   r   rz   Q  s         ÿz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc                 C   s
   | j d S ©Nr   )Úclient_addressrB   r   r   r   ry   _  s    z%BaseHTTPRequestHandler.address_stringúHTTP/1.0c                 C   s   i | ]}||j |jf“qS r   )ÚphraseZdescription)Ú.0Úvr   r   r   Ú
<dictcomp>n  s   ÿ z!BaseHTTPRequestHandler.<dictcomp>)NN)N)N)ro   ro   )N)*r   r   r   rw   r;   r*   r}   Ú__version__r|   ÚDEFAULT_ERROR_MESSAGEr\   ÚDEFAULT_ERROR_CONTENT_TYPEr`   r#   r>   r:   rL   rM   r0   rY   r@   rZ   rA   rl   rb   rI   rq   rc   rd   rz   Zweekdaynamer‚   ry   r1   r3   r4   ZHTTPMessager6   r   Ú__members__ÚvaluesrW   r   r   r   r   r   ”   sT   ic%
5



          þ	þc                       sŽ   e Zd Zde Zddœ‡ fdd„
Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zejshe ¡  ej ¡ Ze dddddœ¡ ‡  ZS )r   zSimpleHTTP/N©Ú	directoryc                   s(   |d krt  ¡ }|| _tƒ j||Ž d S rs   )ÚosÚgetcwdr”   ÚsuperÚ__init__)r   r”   rv   Úkwargs©Ú	__class__r   r   r˜   ƒ  s    z!SimpleHTTPRequestHandler.__init__c                 C   s.   |   ¡ }|r*z|  || j¡ W 5 | ¡  X d S rs   )Ú	send_headr    ÚcopyfilerG   ©r   Úfr   r   r   Údo_GET‰  s
    zSimpleHTTPRequestHandler.do_GETc                 C   s   |   ¡ }|r| ¡  d S rs   )rœ   r    rž   r   r   r   Údo_HEAD’  s    z SimpleHTTPRequestHandler.do_HEADc                 C   s^  |   | j¡}d }tj |¡rÂtj | j¡}|j d¡sŒ|  t	j
¡ |d |d |d d |d |d f}tj |¡}|  d|¡ |  ¡  d S dD ]&}tj ||¡}tj |¡r�|} qÂq�|  |¡S |  |¡}| d¡rè|  t	jd	¡ d S zt|d
ƒ}W n& tk
�r   |  t	jd	¡ Y d S X �z"t | ¡ ¡}d| jk�röd| jk�röztj | jd ¡}	W n ttttfk
�r|   Y nzX |	j d k�rš|	j!t"j#j$d�}	|	j t"j#j$k�röt"j" %|j&t"j#j$¡}
|
j!dd�}
|
|	k�rö|  t	j'¡ |  ¡  | (¡  W d S |  t	j)¡ |  d|¡ |  dt*|d ƒ¡ |  d|  +|j&¡¡ |  ¡  |W S    | (¡  ‚ Y nX d S )Nr   r   r	   r
   r   é   ZLocation)z
index.htmlz	index.htmzFile not foundÚrbzIf-Modified-SincezIf-None-Match)Útzinfo)ZmicrosecondúContent-typerV   é   zLast-Modified),Útranslate_pathr2   r•   ÚisdirÚurllibÚparseZurlsplitÚendswithrY   r   ZMOVED_PERMANENTLYZ
urlunsplitrZ   rA   rn   ÚexistsÚlist_directoryÚ
guess_typer0   Ú	NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor7   r   r€   Zparsedate_to_datetimeÚ	TypeErrorr/   ÚOverflowErrorr-   r¤   rU   ÚdatetimeÚtimezoneZutcZfromtimestampÚst_mtimer[   r    ÚOKr&   rd   )r   r2   rŸ   ÚpartsZ	new_partsZnew_urlÚindexZctypeZfsZimsZ
last_modifr   r   r   rœ   ˜  s€     ÿ


ÿÿ ÿ

ÿz"SimpleHTTPRequestHandler.send_headc              	   C   sÖ  zt  |¡}W n$ tk
r2   |  tjd¡ Y d S X |jdd„ d� g }ztjj	| j
dd�}W n  tk
r~   tj 	|¡}Y nX tj|dd�}t ¡ }d	| }| d
¡ | d¡ | d| ¡ | d| ¡ | d| ¡ | d¡ |D ]v}t j
 ||¡}| }	}
t j
 |¡�r"|d }	|d }
t j
 |¡�r8|d }	| dtjj|
dd�tj|	dd�f ¡ qê| d¡ d |¡ |d¡}t ¡ }| |¡ | d¡ |  tj¡ |  dd| ¡ |  dtt|ƒƒ¡ |  ¡  |S )NzNo permission to list directoryc                 S   s   |   ¡ S rs   )r9   )Úar   r   r   Ú<lambda>þ  rm   z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>)ÚkeyÚsurrogatepass©ÚerrorsFrP   zDirectory listing for %szZ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">z<html>
<head>z@<meta http-equiv="Content-Type" content="text/html; charset=%s">z<title>%s</title>
</head>z<body>
<h1>%s</h1>z	<hr>
<ul>r   ú@z<li><a href="%s">%s</a></li>z</ul>
<hr>
</body>
</html>
Ú
Úsurrogateescaper   r¥   ztext/html; charset=%srV   ) r•   Úlistdirr±   r0   r   r¯   Úsortr©   rª   Úunquoter2   ÚUnicodeDecodeErrorr]   r^   rw   Úgetfilesystemencodingri   rn   r¨   ÚislinkrQ   r_   ÚioÚBytesIOra   ÚseekrY   r¹   rZ   r&   r+   rA   )r   r2   ÚlistÚrZdisplaypathÚencÚtitleÚnameÚfullnameZdisplaynameZlinknameZencodedrŸ   r   r   r   r­   ï  sh    þ
ÿ


ÿ
ÿþÿ


z'SimpleHTTPRequestHandler.list_directoryc                 C   sÎ   |  dd¡d }|  dd¡d }| ¡  d¡}ztjj|dd�}W n  tk
rb   tj |¡}Y nX t |¡}|  d¡}t	d |ƒ}| j
}|D ]0}tj |¡sŒ|tjtjfkr®qŒtj ||¡}qŒ|rÊ|d7 }|S )Nú?r	   r   ú#r   r¿   rÀ   )r*   r(   r«   r©   rª   rÇ   rÈ   Ú	posixpathÚnormpathÚfilterr”   r•   r2   ÚdirnameÚcurdirÚpardirrn   )r   r2   Ztrailing_slashr<   Zwordr   r   r   r§   )  s$    	


z'SimpleHTTPRequestHandler.translate_pathc                 C   s   t  ||¡ d S rs   )ÚshutilZcopyfileobj)r   ÚsourceZ
outputfiler   r   r   r�   G  s    z!SimpleHTTPRequestHandler.copyfilec                 C   sL   t  |¡\}}|| jkr"| j| S | ¡ }|| jkr>| j| S | jd S d S )Nr   )rÖ   ÚsplitextÚextensions_mapr9   )r   r2   ÚbaseZextr   r   r   r®   W  s    



z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz
text/plain)r   ú.pyz.cz.h)r   r   r   rŽ   r|   r˜   r    r¡   rœ   r­   r§   r�   r®   Ú	mimetypesZinitedZinitZ	types_mapÚcopyrß   ÚupdateÚ__classcell__r   r   rš   r   r   t  s$   	W:
üc           	      C   sÎ   |   d¡\} }}tj | ¡} |  d¡}g }|d d… D ],}|dkrL| ¡  q6|r6|dkr6| |¡ q6|r˜| ¡ }|rœ|dkrŠ| ¡  d}qœ|dkrœd}nd}|r®d ||f¡}dd |¡ |f}d |¡}|S )NrÔ   r   r   z..r   r   )Ú	partitionr©   rª   rÇ   r*   Úpopri   rn   )	r2   Ú_ÚqueryÚ
path_partsZ
head_partsÚpartZ	tail_partZ	splitpathÚcollapsed_pathr   r   r   Ú_url_collapse_path|  s.    


rí   c                  C   sr   t rt S zdd l} W n tk
r*   Y dS X z|  d¡d a W n. tk
rl   dtdd„ |  ¡ D ƒƒ a Y nX t S )Nr   r   Únobodyr
   r	   c                 s   s   | ]}|d  V  qdS )r
   Nr   )r‹   rƒ   r   r   r   Ú	<genexpr>º  s     znobody_uid.<locals>.<genexpr>)rî   ÚpwdÚImportErrorÚgetpwnamrX   ÚmaxZgetpwall)rð   r   r   r   Ú
nobody_uid®  s     rô   c                 C   s   t  | t j¡S rs   )r•   ÚaccessÚX_OK)r2   r   r   r   Ú
executable¾  s    r÷   c                   @   sR   e Zd ZeedƒZdZdd„ Zdd„ Zdd„ Z	d	d
gZ
dd„ Zdd„ Zdd„ ZdS )r   Úforkr   c                 C   s$   |   ¡ r|  ¡  n|  tjd¡ d S )NzCan only POST to CGI scripts)Úis_cgiÚrun_cgir0   r   rE   rB   r   r   r   Údo_POSTÔ  s    
þzCGIHTTPRequestHandler.do_POSTc                 C   s   |   ¡ r|  ¡ S t | ¡S d S rs   )rù   rú   r   rœ   rB   r   r   r   rœ   â  s    zCGIHTTPRequestHandler.send_headc                 C   sP   t | jƒ}| dd¡}|d |… ||d d …  }}|| jkrL||f| _dS dS )Nr   r	   TF)rí   r2   ÚfindÚcgi_directoriesÚcgi_info)r   rì   Zdir_sepÚheadÚtailr   r   r   rù   é  s    


zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbinc                 C   s   t |ƒS rs   )r÷   )r   r2   r   r   r   Úis_executable  s    z#CGIHTTPRequestHandler.is_executablec                 C   s   t j |¡\}}| ¡ dkS )N)rá   z.pyw)r•   r2   rÞ   r9   )r   r2   rÿ   r   r   r   r   Ú	is_python  s    zCGIHTTPRequestHandler.is_pythonc           )   	   C   s¦  | j \}}|d | }| dt|ƒd ¡}|dkrˆ|d |… }||d d … }|  |¡}tj |¡rˆ|| }}| dt|ƒd ¡}q*qˆq*| d¡\}}}	| d¡}|dkrÆ|d |… ||d …  }
}n
|d }
}|d |
 }|  |¡}tj |¡�s
|  	t
jd| ¡ d S tj |¡�s.|  	t
jd| ¡ d S |  |¡}| j�sF|�sh|  |¡�sh|  	t
jd| ¡ d S t tj¡}|  ¡ |d	< | jj|d
< d|d< | j|d< t| jjƒ|d< | j|d< tj |¡}||d< |  |¡|d< ||d< |	�rð|	|d< | jd |d< | j  d¡}|�r¸| !¡ }t|ƒdk�r¸dd l"}dd l#}|d |d< |d  $¡ dk�r¸z"|d  %d¡}| &|¡ 'd¡}W n |j(t)fk
�r’   Y n&X | !d¡}t|ƒdk�r¸|d |d< | j  d¡d k�rÚ| j *¡ |d< n| jd |d< | j  d¡}|�r||d< | j  d ¡}|�r||d!< g }| j +d"¡D ]>}|d d… d#k�rR| ,| -¡ ¡ n||d$d …  !d%¡ }�q,d% .|¡|d&< | j  d'¡}|�r”||d(< t/d | j 0d)g ¡ƒ}d* .|¡}|�rÀ||d+< d,D ]}| 1|d¡ �qÄ|  2t
j3d-¡ |  4¡  |	 5d.d/¡}| j�r|
g}d0|k�r| ,|¡ t6ƒ }| j7 8¡  t 9¡ }|dk�r”t :|d¡\}}t; ;| j<gg g d¡d �r~| j< =d¡�sN�q~�qN|�r�|  >d1|¡ d S z\zt ?|¡ W n t@k
�rº   Y nX t A| j< B¡ d¡ t A| j7 B¡ d¡ t C|||¡ W n(   | j D| jE| j¡ t Fd2¡ Y nX �n„dd lG} |g}!|  |¡�rrtHjI}"|" $¡  Jd3¡�rf|"d d4… |"d5d …  }"|"d6g|! }!d0|	k�r†|! ,|	¡ |  Kd7|  L|!¡¡ ztM|ƒ}#W n tNtOfk
�rÂ   d}#Y nX | jP|!| jQ| jQ| jQ|d8�}$| j $¡ d9k�r|#dk�r| j< =|#¡}%nd }%t; ;| j<jRgg g d¡d �r>| j<jR Sd¡�s
�q>�q
|$ T|%¡\}&}'| j7 U|&¡ |'�rj|  >d:|'¡ |$jV W¡  |$jX W¡  |$jY}(|(�r˜|  >d1|(¡ n
|  Kd;¡ d S )<Nr   r	   r   rÔ   r   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEÚQUERY_STRINGZREMOTE_ADDRÚauthorizationr
   Z	AUTH_TYPEZbasicÚasciiú:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthÚCONTENT_LENGTHÚrefererÚHTTP_REFERERÚacceptz	
 é   ú,ZHTTP_ACCEPTz
user-agentÚHTTP_USER_AGENTZcookiez, ÚHTTP_COOKIE)r  ZREMOTE_HOSTr  r  r  r	  zScript output followsú+r{   ú=zCGI script exit status %#xé   zw.exeéûÿÿÿéüÿÿÿz-uzcommand: %s)ÚstdinÚstdoutrx   ÚenvZpostz%szCGI script exited OK)Zrþ   rü   r+   r§   r•   r2   r¨   ræ   r¬   r0   r   r¯   ÚisfileZ	FORBIDDENr  Ú	have_forkr  rã   ZdeepcopyÚenvironrc   Zserverr   r1   r&   r   r"   r©   rª   rÇ   rˆ   r7   r8   r*   Úbase64Úbinasciir9   r_   ZdecodebytesÚdecodeÚErrorÚUnicodeErrorZget_content_typeZgetallmatchingheadersri   Ústriprn   rØ   Zget_allÚ
setdefaultrY   r¹   rl   rU   rô   rG   rH   rø   ÚwaitpidÚselectr5   ÚreadrI   Úsetuidr±   Údup2r³   ÚexecveZhandle_errorZrequestÚ_exitÚ
subprocessrw   r÷   r«   rq   Zlist2cmdliner.   r´   r-   ÚPopenÚPIPEZ_sockZrecvZcommunicatera   rx   r    r  Ú
returncode))r   ÚdirÚrestr2   ÚiZnextdirZnextrestZ	scriptdirrè   ré   ZscriptZ
scriptnameZ
scriptfileZispyr  Zuqrestr  r  r  Zlengthr  r
  ÚlineZuaÚcoZ
cookie_strÚkZdecoded_queryrv   rî   ÚpidÚstsr(  ZcmdlineZinterpÚnbytesÚpÚdatar  rx   Zstatusr   r   r   rú     s<   





þþ
þ


ÿ








ü

zCGIHTTPRequestHandler.run_cgiN)r   r   r   rD   r•   r  Zrbufsizerû   rœ   rù   rý   r  r  rú   r   r   r   r   r   Ã  s   
c                  G   s4   t j| t jt jdœŽ}tt|ƒƒ\}}}}}||fS )N)ÚtypeÚflags)r   ZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEÚnextÚiter)ZaddressZinfosZfamilyr7  ÚprotoZ	canonnameZsockaddrr   r   r   Ú_get_best_familyÌ  s    ýr<  r‰   i@  c           	      C   s´   t ||ƒ\|_}|| _||| ƒ�Š}|j ¡ d d… \}}d|krLd|› d�n|}td|› d|› d|› d|› d�	ƒ z| ¡  W n& tk
r¤   td	ƒ t 	d
¡ Y nX W 5 Q R X d S )Nr
   r  ú[ú]zServing HTTP on z port z	 (http://z/) ...z&
Keyboard interrupt received, exiting.r   )
r<  Zaddress_familyr1   r   ZgetsocknameÚprintZserve_foreverÚKeyboardInterruptrw   Úexit)	ÚHandlerClassÚServerClassZprotocolr   ÚbindZaddrZhttpdr   Zurl_hostr   r   r   ÚtestÖ  s    ÿrE  Ú__main__z--cgiÚ
store_truezRun as CGI Server)ÚactionÚhelpz--bindz-bZADDRESSz8Specify alternate bind address [default: all interfaces])ÚmetavarrI  z--directoryz-dz9Specify alternative directory [default:current directory])ÚdefaultrI  r   ZstorerÔ   z&Specify alternate port [default: 8000])rH  rK  r7  ÚnargsrI  r“   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚDualStackServerc              	      s4   t  t¡� | j tjtjd¡ W 5 Q R X tƒ  ¡ S r‡   )	Ú
contextlibÚsuppressÚ	Exceptionr   Z
setsockoptZIPPROTO_IPV6ZIPV6_V6ONLYr—   r   rB   rš   r   r   r     s      ÿzDualStackServer.server_bind)r   r   r   r   rå   r   r   rš   r   rM    s   rM  )rB  rC  r   rD  )8rŽ   Ú__all__rã   r¶   Zemail.utilsr   r]   Zhttp.clientr3   rË   râ   r•   rÖ   r"  rÜ   r   r   rw   r~   Zurllib.parser©   rN  Ú	functoolsr   r   r�   r�   r   r   ZThreadingMixInr   ZStreamRequestHandlerr   r   rí   rî   rô   r÷   r   r<  rE  r   ÚargparseÚArgumentParserÚparserÚadd_argumentr–   r.   Ú
parse_argsrv   ZcgiZhandler_classr”   rM  r   rD  r   r   r   r   Ú<module>S   s¢      þ   c  
0  
  þ

ÿ
ÿÿ ýÿü