grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 ct„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'   /