???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
ic                 @   s  d Z ddlmZmZmZ ddlmZ ddlZddlZddl	Z
ddlmZ ddlmZ ddlmZ ddlZddlZddlZdd	d
ddddddddddddgZdadadd Zdd Zdd Zdd Zeadadejdddfd d
Zd4d!dZd5d"dZ d#d Z!d$d% Z"d&d Z#G d'd dZ$G d(d	 d	Z%ejfd)dZ&d6d*dZ'ejfd+dZ(d,d Z)d-d Z*d.d Z+d/d Z,d7d0dZ-d1d2 Z.e/d3kre&  dS )8z2.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              G   sH   t r.t r.ytt daW n tk
r,   Y nX ts8tantat|   d S )Na)logfilelogfpopenOSErrornologlogdolog)allargs r"   /usr/lib64/python3.6/cgi.pyinitlog:   s    
r$   c             G   s   t j| | d  d S )N
)r   write)Zfmtargsr"   r"   r#   r    ]   s    r    c              G   s   d S )Nr"   )r!   r"   r"   r#   r   a   s    r   c               C   s   da trtj  d atad S )Nr   )r   r   closer$   r   r"   r"   r"   r#   closeloge   s
    r)   c       
      C   s\  | d krt j} t| dr | j}nd}t| tr4| j} d|krDd|d< |d dkrt|d \}}|dkrxt| ||dS |d	krt	|d
 }t
r|t
krtd| j|j|}	nd}	d|kr|	r|	d }	|	|d  }	n*t jdd  r|	r|	d }	|	t jd  }	|	|d< n<d|kr |d }	n(t jdd  r<t jd }	nd}	|	|d< tjj|	|||dS )Nencodingzlatin-1REQUEST_METHODGETPOSTCONTENT_TYPEzmultipart/form-data)	separatorz!application/x-www-form-urlencodedCONTENT_LENGTHzMaximum content length exceededr   QUERY_STRING&   )r*   )sysstdinhasattrr*   
isinstancer   bufferr   r   intmaxlen
ValueErrorreaddecodeargvurllibr   r   )
fpenvironkeep_blank_valuesstrict_parsingr/   r*   ctypepdictclengthqsr"   r"   r#   r   x   sH    

  


c             C   s    t dtd tjj| |||dS )Nz=cgi.parse_qs is deprecated, use urllib.parse.parse_qs instead   )r/   )r   DeprecationWarningr?   r   r   )rG   rB   rC   r/   r"   r"   r#   r      s    c             C   s    t dtd tjj| |||dS )Nz?cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl insteadrH   )r/   )r   rI   r?   r   r   )rG   rB   rC   r/   r"   r"   r#   r      s    c             C   s  dd l }d}d|kr|d }t|s2td|f d| }d| d }i }d}x||krd}d }	|r|jj| }
|
jd}|ryt|}W n tk
r   Y nX |dkrtr|tkrtd| j|}	nd}	g }xD| j	 }|s|}P |j
dr|j }|||fkrP |j| qW |	d kr&qR|dk r|r|d }|dd  d
kr^|d d }n|dd  dkr||d d }||d< dj|}	|
d }|sqRt|\}}|dkrqRd|krR|d }nqR||kr|| j|	 qR|	g||< qRW |S )Nr       boundaryz&Invalid boundary in multipart form: %rs   --r3   zcontent-lengthzMaximum content length exceededrH   s   
   
zcontent-dispositionz	form-datanamerN   rO   rN   rN   rN   )Zhttp.clientvalid_boundaryr;   ZclientZparse_headersgetr9   r:   r<   readline
startswithrstripappendjoinr   )r@   rE   ZhttprK   ZnextpartZlastpartZpartdict
terminatorbytesdataheadersrF   lineslinekeyZparamsrM   r"   r"   r#   r      s|    







c             c   s   x| d d dkr| dd  } | j d}x<|dkrd| jdd|| jdd| d rd| j d|d }q*W |dk rvt| }| d | }|j V  | |d  } qW d S )Nr3   ;r   "z\"rH   )findcountlenstrip)sendfr"   r"   r#   _parseparam/  s    
*
rg   c             C   s   t d|  }|j }i }x|D ]}|jd}|dkr|d | j j }||d d  j }t|dkr|d |d
   kodkn  r|dd }|jddjd	d}|||< qW ||fS )Nr^   =r   r3   rH   r_   z\\\z\"rN   rN   )rg   __next__r`   rc   lowerrb   replace)r\   partsr]   rE   pirM   valuer"   r"   r#   r   ;  s    

,c               @   s<   e Zd ZdZdZdZdZi ZdZi Z	i Z
dd Zdd ZdS )r	   Nc             C   s   || _ || _d S )N)rM   rp   )selfrM   rp   r"   r"   r#   __init__a  s    zMiniFieldStorage.__init__c             C   s   d| j | jf S )NzMiniFieldStorage(%r, %r))rM   rp   )rq   r"   r"   r#   __repr__g  s    zMiniFieldStorage.__repr__)__name__
__module____qualname__filenamelisttypefiletype_optionsdispositiondisposition_optionsrZ   rr   rs   r"   r"   r"   r#   r	   S  s   c               @   s   e Zd Zdddejddddd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d:ddZd;ddZdd Zdd Zdd Zd d! Zd"d# Zd$d% ZdZd&d' Zd(d) Zd<Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdS )=r
   NrJ   r   zutf-8rl   c             C   sR  d}|| _ || _|
| _|| _d|kr0|d j }d | _|dksF|dkrd|krX|d }ntjdd  rrtjd }nd}|jt	j
 d}t|}|d krdd	i}|d kri }|d
krd	|d< d|kr|d |d< d|kr|d | _d|kr|d |d< nt|ttfstd|| _|d kr*tjj| _n<t|tr@|j| _n&t|doTt|ds`td|| _|| _|	| _t|tstdt|j || _d| _|| _di  }}d| jkrt| jd \}}|| _|| _ d | _!d|kr|d | _!d | _"d|kr
|d | _"| j"d k	| _#d| jkr6t| jd \}}n(| jsH|d
krTdi  }}n
d	i  }}|| _|| _$d|kr|d j| j| _%nd| _%d}d| jkryt&| jd }W n t'k
r   Y nX t(r|t(krt'd|| _)| jd kr|r|| _d  | _*| _+d| _,|d	kr$| j-  n*|d d dkrF| j.||| n| j/  d S )Nr,   r+   ZHEADr1   r3   r   surrogateescapezcontent-typez!application/x-www-form-urlencodedr-   r.   r0   zcontent-lengthz?headers must be mapping or an instance of email.message.Messager<   rR   zfp must be file pointerz#outerboundary must be bytes, not %sr   zcontent-dispositionrM   rw   z
text/plainrK   rJ   zMaximum content length exceeded
   z
multipart/rN   )0rB   rC   max_num_fieldsr/   upper
qs_on_postr4   r>   encodelocalegetpreferredencodingr   r7   r   r   	TypeErrorrZ   r5   r8   r@   r   r6   r*   errorsrX   ry   rt   outerboundary
bytes_readlimitr   r|   r}   rM   rw   _binary_filer{   innerboundaryr9   r;   r:   lengthrx   rz   doneread_urlencoded
read_multiread_single)rq   r@   rZ   r   rA   rB   rC   r   r*   r   r   r/   methodrG   ZcdisprE   rD   Zclenr"   r"   r#   rr     s    /












zFieldStorage.__init__c             C   s(   y| j j  W n tk
r"   Y nX d S )N)rz   r(   AttributeError)rq   r"   r"   r#   __del__;  s    zFieldStorage.__del__c             C   s   | S )Nr"   )rq   r"   r"   r#   	__enter__A  s    zFieldStorage.__enter__c             G   s   | j j  d S )N)rz   r(   )rq   r'   r"   r"   r#   __exit__D  s    zFieldStorage.__exit__c             C   s   d| j | j| jf S )NzFieldStorage(%r, %r, %r))rM   rw   rp   )rq   r"   r"   r#   rs   G  s    zFieldStorage.__repr__c             C   s   t | j S )N)iterkeys)rq   r"   r"   r#   __iter__L  s    zFieldStorage.__iter__c             C   sT   |dkrt || jr:| jjd | jj }| jjd n| jd k	rL| j}nd }|S )Nrp   r   )r   rz   seekr<   rx   )rq   rM   rp   r"   r"   r#   __getattr__O  s    

zFieldStorage.__getattr__c             C   sb   | j d krtdg }x"| j D ]}|j|kr|j| qW |sFt|t|dkrZ|d S |S d S )Nznot indexabler3   r   )rx   r   rM   rU   KeyErrorrb   )rq   r]   founditemr"   r"   r#   __getitem__\  s    

 zFieldStorage.__getitem__c             C   s8   || kr0| | }t |tr(dd |D S |jS n|S d S )Nc             S   s   g | ]
}|j qS r"   )rp   ).0xr"   r"   r#   
<listcomp>o  s    z)FieldStorage.getvalue.<locals>.<listcomp>)r7   rx   rp   )rq   r]   defaultrp   r"   r"   r#   getvaluej  s    
zFieldStorage.getvaluec             C   s4   || kr,| | }t |tr$|d jS |jS n|S d S )Nr   )r7   rx   rp   )rq   r]   r   rp   r"   r"   r#   getfirstu  s    

zFieldStorage.getfirstc             C   s:   || kr2| | }t |tr(dd |D S |jgS ng S d S )Nc             S   s   g | ]
}|j qS r"   )rp   )r   r   r"   r"   r#   r     s    z(FieldStorage.getlist.<locals>.<listcomp>)r7   rx   rp   )rq   r]   rp   r"   r"   r#   getlist  s    

zFieldStorage.getlistc             C   s*   | j d krtdt tdd | j D S )Nznot indexablec             s   s   | ]}|j V  qd S )N)rM   )r   r   r"   r"   r#   	<genexpr>  s    z$FieldStorage.keys.<locals>.<genexpr>)rx   r   set)rq   r"   r"   r#   r     s    
zFieldStorage.keysc                s*   | j d krtdt fdd| j D S )Nznot indexablec             3   s   | ]}|j  kV  qd S )N)rM   )r   r   )r]   r"   r#   r     s    z,FieldStorage.__contains__.<locals>.<genexpr>)rx   r   any)rq   r]   r"   )r]   r#   __contains__  s    
zFieldStorage.__contains__c             C   s   t | j S )N)rb   r   )rq   r"   r"   r#   __len__  s    zFieldStorage.__len__c             C   s   | j d krtdt| j S )NzCannot be converted to bool.)rx   r   bool)rq   r"   r"   r#   __bool__  s    
zFieldStorage.__bool__c          	   C   s   | j j| j}t|ts0td| j t|jf |j| j	| j
}| jrT|d| j 7 }tjj|| j| j| j	| j
| j| jd}dd |D | _| j  d S )Nz%s should return bytes, got %sr2   )r*   r   r   r/   c             S   s   g | ]\}}t ||qS r"   )r	   )r   r]   rp   r"   r"   r#   r     s    z0FieldStorage.read_urlencoded.<locals>.<listcomp>)r@   r<   r   r7   rX   r;   ry   rt   r=   r*   r   r   r?   r   r   rB   rC   r   r/   rx   
skip_lines)rq   rG   queryr"   r"   r#   r     s    

zFieldStorage.read_urlencodedc             C   sB  | j }t|std|f g | _| jrftjj| j| j| j	| j
| j| j| jd}| jjdd |D  | jpp| j}| jj }t|tstd| jt|jf |  jt|7  _x6|j d| j  kr|r| jj }|  jt|7  _qW | j}|d k	r|t| j8 }x,t }	d}
x$| jj }|
|7 }
|j sP qW |
sBP |  jt|
7  _|	j|
j| j
| j |	j }d|kr|d= || j|||||| j| j | j
| j|| jd	}|d k	r|d
8 }|jr|t|j8 }|dk rtd|  j|j7  _| jj| |j s.| j| j!  ko&dkn  r
P q
W | j"  d S )Nz&Invalid boundary in multipart form: %r)r*   r   r   r/   c             s   s   | ]\}}t ||V  qd S )N)r	   )r   r]   rp   r"   r"   r#   r     s    z*FieldStorage.read_multi.<locals>.<genexpr>z%s should return bytes, got %ss   --rJ   zcontent-length)r/   r3   r   zMax number of fields exceeded)#r   rP   r;   rx   r   r?   r   r   rB   rC   r*   r   r   r/   extendFieldStorageClass	__class__r@   rR   r7   rX   ry   rt   r   rb   rc   r   Zfeedr=   r(   r   rU   r   r   r   )rq   rA   rB   rC   Zibr   klassZ
first_liner   parserZhdr_textrY   rZ   partr"   r"   r#   r     sj    










(zFieldStorage.read_multic             C   s4   | j dkr| j  | j  n| j  | jjd d S )Nr   )r   read_binaryr   
read_linesrz   r   )rq   r"   r"   r#   r     s
    

zFieldStorage.read_single   i   c             C   s   | j  | _| j}|dkrxx|dkr| jjt|| j}t|tsXt	d| jt
|jf |  jt|7  _|svd| _P | jj| |t| }qW d S )Nr   z%s should return bytes, got %sr3   rN   )	make_filerz   r   r@   r<   minbufsizer7   rX   r;   ry   rt   r   rb   r   r&   )rq   ZtodorY   r"   r"   r#   r     s    


zFieldStorage.read_binaryc             C   s@   | j rt  | _| _nt  | _| _| jr4| j  n| j  d S )N)r   r   rz   _FieldStorage__filer   r   read_lines_to_outerboundaryread_lines_to_eof)rq   r"   r"   r#   r     s    
zFieldStorage.read_linesc             C   sv   | j d k	rF| j j t| dkrF| j | _| j j }| jj| d | _ | jrZ| jj| n| jj|j| j	| j
 d S )Ni  )r   tellrb   r   rz   r   r&   r   r=   r*   r   )rq   r\   rY   r"   r"   r#   Z__write  s    


zFieldStorage.__writec             C   s>   x8| j jd}|  jt|7  _|s,d| _P | j| qW d S )Nr3      i   rN   )r@   rR   r   rb   r   _FieldStorage__write)rq   r\   r"   r"   r#   r   ,  s    zFieldStorage.read_lines_to_eofc       	      C   s,  d| j  }|d }d}d}d}x|| jkr.P | jjd}|  jt|7  _|t|7 }|sdd| _P |dkrx|| }d}|jdr|r|j }||krP ||krd| _P |}|j	drd}|d d }d}nJ|j	d
rd
}|d d }d}n*|j	drd}|d d }d}nd}d}| j
||  q"W d S )Ns   --rJ   Tr   r3   r      s   
rH   rL   Fi   rN   rO   rN   rN   )r   r   r@   rR   r   rb   r   rS   rT   endswithr   )	rq   next_boundarylast_boundaryZdelimlast_line_lfendZ_readr\   strippedlineZodelimr"   r"   r#   r   6  sP    



z(FieldStorage.read_lines_to_outerboundaryc             C   s   | j  s| jrd S d| j  }|d }d}xh| jjd}|  jt|7  _|sTd| _P |jdr|r|j }||krtP ||krd| _P |jd}q*W d S )Ns   --Tr3   r   rL   i   rN   )r   r   r@   rR   r   rb   r   rc   )rq   r   r   r   r\   r   r"   r"   r#   r   g  s&    
zFieldStorage.skip_linesc             C   s&   | j rtjdS tjd| jddS d S )Nzwb+zw+r%   )r*   newline)r   tempfileZTemporaryFiler*   )rq   r"   r"   r#   r   }  s    
zFieldStorage.make_file)N)Ni    ) rt   ru   rv   osrA   rr   r   r   r   rs   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#   r
   l  s>   + "

D	
1c             C   s   t d t   tjt_yNt }t  t  t| t|  t	  dd }|fdd}t d |  W n   t
  Y nX t d day&t }t  t  t| t|  W n   t
  Y nX d S )	NzContent-type: text/htmlc               S   s   t d d S )Nz,testing print_exception() -- <I>italics?</I>)execr"   r"   r"   r#   rf     s    ztest.<locals>.fc             S   s
   |   d S )Nr"   )rf   r"   r"   r#   g  s    ztest.<locals>.gz9<H3>What follows is a test, not an actual exception:</H3>z*<H1>Second try with a small maxlen...</H1>2   )printr4   stdoutstderrr
   r   r   r   r   r   r   r:   )rA   formrf   r   r"   r"   r#   r     s4    
c             C   sx   | d krt j \} }}dd l}t  td |j|||j| | }tdtjdj|d d tj|d f  ~d S )Nr   z+<H3>Traceback (most recent call last):</H3>z<PRE>%s<B>%s</B></PRE>r   r3   rN   rN   )	r4   exc_info	tracebackr   	format_tbformat_exception_onlyhtmlr   rV   )ry   rp   tbr   r   rx   r"   r"   r#   r     s    
c             C   s`   t | j }t  td td x*|D ]"}tdtj|dtj| |  q(W td t  d S )Nz<H3>Shell Environment:</H3>z<DL>z<DT>z<DD>z</DL>)sortedr   r   r   r   )rA   r   r]   r"   r"   r#   r     s    
"c             C   s   t | j }t  td |s&td td xb|D ]Z}tdtj| d dd | | }tdtjtt| d	  td
tjt|  q4W td t  d S )Nz<H3>Form Contents:</H3>z<P>No form fields.z<DL>z<DT>: )re   z<i>z</i>z<DD>z</DL>)r   r   r   r   r   reprry   )r   r   r]   rp   r"   r"   r#   r     s    
c              C   sj   t   t d ytj } W n6 tk
rP } zt dtjt| W Y d d }~X nX t tj|  t   d S )Nz#<H3>Current Working Directory:</H3>zOSError:)r   r   getcwdr   r   r   str)pwdmsgr"   r"   r#   r     s    &c               C   s(   t   t d t   t tj t   d S )Nz <H3>Command Line Arguments:</H3>)r   r4   r>   r"   r"   r"   r#   r     s
    
c               C   s   t d d S )Na  
<H3>These environment variables could have been set:</H3>
<UL>
<LI>AUTH_TYPE
<LI>CONTENT_LENGTH
<LI>CONTENT_TYPE
<LI>DATE_GMT
<LI>DATE_LOCAL
<LI>DOCUMENT_NAME
<LI>DOCUMENT_ROOT
<LI>DOCUMENT_URI
<LI>GATEWAY_INTERFACE
<LI>LAST_MODIFIED
<LI>PATH
<LI>PATH_INFO
<LI>PATH_TRANSLATED
<LI>QUERY_STRING
<LI>REMOTE_ADDR
<LI>REMOTE_HOST
<LI>REMOTE_IDENT
<LI>REMOTE_USER
<LI>REQUEST_METHOD
<LI>SCRIPT_NAME
<LI>SERVER_NAME
<LI>SERVER_PORT
<LI>SERVER_PROTOCOL
<LI>SERVER_ROOT
<LI>SERVER_SOFTWARE
</UL>
In addition, HTTP headers sent by the server may be passed in the
environment as well.  Here are some common variable names:
<UL>
<LI>HTTP_ACCEPT
<LI>HTTP_CONNECTION
<LI>HTTP_HOST
<LI>HTTP_PRAGMA
<LI>HTTP_REFERER
<LI>HTTP_USER_AGENT
</UL>
)r   r"   r"   r"   r#   r     s    'c             C   sF   t dtdd | jdd} | jdd} | jdd	} |rB| jd
d} | S )Nz1cgi.escape is deprecated, use html.escape insteadrH   )
stacklevelr2   z&amp;<z&lt;>z&gt;r_   z&quot;)r   rI   rl   )rd   Zquoter"   r"   r#   r   1  s    
c             C   s(   dd l }t| trd}nd}|j|| S )Nr   s   ^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer7   rX   match)rd   r   Z_vb_patternr"   r"   r#   rP   =  s
    
rP   __main__)r   r   N)r   r   N)NNNN)N)0__version__ior   r   r   collectionsr   r4   r   Zurllib.parser?   Zemail.parserr   Zemail.messager   warningsr   r   r   r   __all__r   r   r$   r    r   r)   r   r:   rA   r   r   r   r   rg   r   r	   r
   r   r   r   r   r   r   r   r   rP   rt   r"   r"   r"   r#   <module>   s`   #	E

c    7'
/

