3 �L�jc��@s�dZddlmZmZmZddlmZddlZddlZddl Z ddl m Z ddl mZddlmZddlZddlZddlZdd d d d d dddddddddgZdadadd�Zdd�Zdd�Zdd�Zeadadejdddfd d �Zd4d!d �Zd5d"d �Z d#d �Z!d$d%�Z"d&d�Z#Gd'd�d�Z$Gd(d �d �Z%ejfd)d�Z&d6d*d�Z'ejfd+d�Z(d,d�Z)d-d�Z*d.d�Z+d/d�Z,d7d0d�Z-d1d2�Z.e/d3k�r�e&�dS)8z2.6�)�StringIO�BytesIO� TextIOWrapper)�MappingN)� FeedParser)�Message)�warn�MiniFieldStorage� FieldStorage�parse�parse_qs� parse_qsl�parse_multipart� parse_header�test�print_exception� print_environ� print_form�print_directory�print_arguments�print_environ_usage�escape�c GsHtr.t r.yttd�aWntk r,YnXts8tantat|�dS)N�a)�logfile�logfp�open�OSError�nolog�log�dolog)�allargs�r"�/usr/lib64/python3.6/cgi.py�initlog:s r$cGstj||d�dS)N� )r�write)Zfmt�argsr"r"r#r ]sr cGsdS)Nr")r!r"r"r#rasrcCsdatrtj�datadS)Nr)rr�closer$rr"r"r"r#�closeloges r)c Cs\|dkrtj}t|d�r |j}nd}t|t�r4|j}d|krDd|d<|ddk�r t|d�\}}|dkrxt|||d�S|d kr�t |d �}t r�|t kr�t d ��|j |�j |�} nd } d |kr�| r�| d} | |d } n*tjdd��r| r�| d} | tjd} | |d <n�encode�locale�getpreferredencodingrr7rr� TypeErrorrZr5r8r@rr6r*�errorsrXryrt� outerboundary� bytes_read�limitrr|r}rMrw� _binary_filer{� innerboundaryr9r;r:�lengthrxrz�done�read_urlencoded� read_multi� read_single)rqr@rZr�rArBrCr�r*r�r�r/�methodrGZcdisprErDZclenr"r"r#rr�s�/                         zFieldStorage.__init__c Cs(y|jj�Wntk r"YnXdS)N)rzr(�AttributeError)rqr"r"r#�__del__;szFieldStorage.__del__cCs|S)Nr")rqr"r"r#� __enter__AszFieldStorage.__enter__cGs|jj�dS)N)rzr()rqr'r"r"r#�__exit__DszFieldStorage.__exit__cCsd|j|j|jfS)NzFieldStorage(%r, %r, %r))rMrwrp)rqr"r"r#rsGszFieldStorage.__repr__cCs t|j��S)N)�iter�keys)rqr"r"r#�__iter__LszFieldStorage.__iter__cCsT|dkrt|��|jr:|jjd�|jj�}|jjd�n|jdk rL|j}nd}|S)Nrpr)r�rz�seekr<rx)rqrMrpr"r"r#� __getattr__Os   zFieldStorage.__getattr__cCsb|jdkrtd��g}x"|jD]}|j|kr|j|�qW|sFt|��t|�dkrZ|dS|SdS)Nz not indexabler3r)rxr�rMrU�KeyErrorrb)rqr]�found�itemr"r"r#� __getitem__\s    zFieldStorage.__getitem__cCs8||kr0||}t|t�r(dd�|D�S|jSn|SdS)NcSsg|] }|j�qSr")rp)�.0�xr"r"r#� osz)FieldStorage.getvalue..)r7rxrp)rqr]�defaultrpr"r"r#�getvaluejs  zFieldStorage.getvaluecCs4||kr,||}t|t�r$|djS|jSn|SdS)Nr)r7rxrp)rqr]r�rpr"r"r#�getfirstus   zFieldStorage.getfirstcCs:||kr2||}t|t�r(dd�|D�S|jgSngSdS)NcSsg|] }|j�qSr")rp)r�r�r"r"r#r��sz(FieldStorage.getlist..)r7rxrp)rqr]rpr"r"r#�getlist�s   zFieldStorage.getlistcCs*|jdkrtd��ttdd�|jD���S)Nz not indexablecss|] }|jVqdS)N)rM)r�r�r"r"r#� �sz$FieldStorage.keys..)rxr��set)rqr"r"r#r��s zFieldStorage.keyscs*|jdkrtd��t�fdd�|jD��S)Nz not indexablec3s|]}|j�kVqdS)N)rM)r�r�)r]r"r#r��sz,FieldStorage.__contains__..)rxr��any)rqr]r")r]r#� __contains__�s zFieldStorage.__contains__cCs t|j��S)N)rbr�)rqr"r"r#�__len__�szFieldStorage.__len__cCs|jdkrtd��t|j�S)NzCannot be converted to bool.)rxr��bool)rqr"r"r#�__bool__�s zFieldStorage.__bool__c Cs�|jj|j�}t|t�s0td|jt|�jf��|j|j |j �}|j rT|d|j 7}t j j||j|j|j |j |j|jd�}dd�|D�|_|j�dS)Nz%s should return bytes, got %sr2)r*r�r�r/cSsg|]\}}t||��qSr")r )r�r]rpr"r"r#r��sz0FieldStorage.read_urlencoded..)r@r<r�r7rXr;ryrtr=r*r�r�r?r r rBrCr�r/rx� skip_lines)rqrG�queryr"r"r#r��s  zFieldStorage.read_urlencodedc CsB|j}t|�std|f��g|_|jrftjj|j|j|j |j |j |j |j d�}|jjdd�|D��|jpp|j}|jj�}t|t�s�td|jt|�jf��|jt|�7_x6|j�d|jkr�|r�|jj�}|jt|�7_q�W|j }|dk �r|t|j�8}�x,t�} d} x$|jj�} | | 7} | j��sP�qW| �sBP|jt| �7_| j| j|j |j ��| j�} d| k�r�| d=||j| |||||j|j|j |j ||j d � } |dk �r�|d 8}| j�r�|t| j�8}|d k�r�td ��|j| j7_|jj| �| j �s.|j|j!k�o&d kn�r P�q W|j"�dS) Nz&Invalid boundary in multipart form: %r)r*r�r�r/css|]\}}t||�VqdS)N)r )r�r]rpr"r"r#r��sz*FieldStorage.read_multi..z%s should return bytes, got %ss--rJzcontent-length)r/r3rzMax number of fields exceeded)#r�rPr;rxr�r?r r rBrCr*r�r�r/�extend�FieldStorageClass� __class__r@rRr7rXryrtr�rbrcrZfeedr=r(r�rUr�r�r�)rqrArBrCZibr��klassZ first_liner��parserZhdr_textrYrZ�partr"r"r#r��sj               (zFieldStorage.read_multicCs4|jdkr|j�|j�n|j�|jjd�dS)Nr)r�� read_binaryr�� read_linesrzr�)rqr"r"r#r��s   zFieldStorage.read_single�icCs�|j�|_|j}|dkr�xx|dkr�|jjt||j��}t|t�sXt d|jt |�j f��|j t |�7_ |svd|_P|jj|�|t |�}qWdS)Nrz%s should return bytes, got %sr3rN)� make_filerzr�r@r<�min�bufsizer7rXr;ryrtr�rbr�r&)rqZtodorYr"r"r#r�s    zFieldStorage.read_binarycCs@|jrt�|_|_nt�|_|_|jr4|j�n|j�dS)N)r�rrz�_FieldStorage__filerr��read_lines_to_outerboundary�read_lines_to_eof)rqr"r"r#r�s  zFieldStorage.read_linescCsv|jdk rF|jj�t|�dkrF|j�|_|jj�}|jj|�d|_|jrZ|jj|�n|jj|j|j |j ��dS)Ni�) r��tellrbr�rzr�r&r�r=r*r�)rqr\rYr"r"r#Z__writes    zFieldStorage.__writecCs>x8|jjd�}|jt|�7_|s,d|_P|j|�qWdS)Nr3�irN)r@rRr�rbr��_FieldStorage__write)rqr\r"r"r#r�,s zFieldStorage.read_lines_to_eofc Cs,d|j}|d}d}d}d}�x||jkr.P|jjd �}|jt|�7_|t|�7}|sdd |_P|dkrx||}d}|jd�r�|r�|j�}||kr�P||kr�d|_P|}|j d�r�d}|dd�}d}nJ|j d �r�d }|dd�}d}n*|j d��rd}|dd�}d }nd}d }|j ||�q"WdS)Ns--rJTrr3r�� s rHrLFirNrOrNrN) r�r�r@rRr�rbr�rSrT�endswithr�) rq� next_boundary� last_boundaryZdelim�last_line_lfendZ_readr\� strippedlineZodelimr"r"r#r�6sP          z(FieldStorage.read_lines_to_outerboundarycCs�|j s|jrdSd|j}|d}d}xh|jjd�}|jt|�7_|sTd|_P|jd�r�|r�|j�}||krtP||kr�d|_P|jd�}q*WdS)Ns--Tr3r�rLirN)r�r�r@rRr�rbr�rc)rqr�r�r�r\r�r"r"r#r�gs&  zFieldStorage.skip_linescCs&|jrtjd�Stjd|jdd�SdS)Nzwb+zw+r%)r*�newline)r��tempfileZ TemporaryFiler*)rqr"r"r#r�}s zFieldStorage.make_file)N)Ni ) rtrurv�osrArrr�r�r�rsr�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#r ls>+"   D   1cCs�td�t�tjt_yNt�}t�t�t|�t|�t �dd�}|fdd�}td�|�Wnt �YnXtd�da y&t�}t�t�t|�t|�Wnt �YnXdS) NzContent-type: text/htmlcSs td�dS)Nz,testing print_exception() -- italics?)�execr"r"r"r#rf�sztest..fcSs |�dS)Nr")rfr"r"r#�g�sztest..gz9

What follows is a test, not an actual exception:

z*

Second try with a small maxlen...

�2) �printr4�stdout�stderrr rrrrrrr:)rA�formrfr�r"r"r#r�s4    cCsx|dkrtj�\}}}ddl}t�td�|j||�|j||�}tdtjdj|dd���tj|d�f�~dS)Nrz+

Traceback (most recent call last):

z
%s%s
rr3rNrN) r4�exc_info� tracebackr�� format_tb�format_exception_only�htmlrrV)ryrp�tbr�r�rxr"r"r#r�s cCs`t|j��}t�td�td�x*|D]"}tdtj|�dtj||��q(Wtd�t�dS)Nz

Shell Environment:

z
z
z
z
)�sortedr�r�r�r)rAr�r]r"r"r#r�s  "cCs�t|j��}t�td�|s&td�td�xb|D]Z}tdtj|�ddd�||}tdtjtt|���d �td tjt|���q4Wtd �t�dS) Nz

Form Contents:

z

No form fields.z

z
�:� )rezzz
z
)r�r�r�r�r�reprry)r�r�r]rpr"r"r#r�s  cCsjt�td�y tj�}Wn6tk rP}ztdtjt|���WYdd}~XnXttj|��t�dS)Nz#

Current Working Directory:

zOSError:)r�r��getcwdrr�r�str)�pwd�msgr"r"r#r�s &cCs(t�td�t�ttj�t�dS)Nz

Command Line Arguments:

)r�r4r>r"r"r"r#r�s  cCs td�dS)Na�

These environment variables could have been set:

  • AUTH_TYPE
  • CONTENT_LENGTH
  • CONTENT_TYPE
  • DATE_GMT
  • DATE_LOCAL
  • DOCUMENT_NAME
  • DOCUMENT_ROOT
  • DOCUMENT_URI
  • GATEWAY_INTERFACE
  • LAST_MODIFIED
  • PATH
  • PATH_INFO
  • PATH_TRANSLATED
  • QUERY_STRING
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_IDENT
  • REMOTE_USER
  • REQUEST_METHOD
  • SCRIPT_NAME
  • SERVER_NAME
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_ROOT
  • SERVER_SOFTWARE
In addition, HTTP headers sent by the server may be passed in the environment as well. Here are some common variable names:
  • HTTP_ACCEPT
  • HTTP_CONNECTION
  • HTTP_HOST
  • HTTP_PRAGMA
  • HTTP_REFERER
  • HTTP_USER_AGENT
)r�r"r"r"r#rs'cCsFtdtdd�|jdd�}|jdd�}|jdd �}|rB|jd d �}|S) Nz1cgi.escape is deprecated, use html.escape insteadrH)� stacklevelr2z&�z>r_z")rrIrl)rdZquoter"r"r#r1s     cCs(ddl}t|t�rd}nd}|j||�S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)�rer7rX�match)rdr�Z _vb_patternr"r"r#rP=s  rP�__main__)rrN)rrN)NNNN)N)0� __version__�iorrr� collectionsrr4r�Z urllib.parser?Z email.parserrZ email.messager�warningsrr�r�r��__all__rrr$r rr)rr:rAr r r rrgrr r rrrrrrrrrPrtr"r"r"r#�s`    # E  c 7'   /