a DOg@sRdZddlmZmZmZddlmZddlZddlZddl Z ddl m Z ddl mZddlZddlZddlZgdZdadad d Zd d Zd dZddZeadadejdddfddZd1ddZddZddZGdddZ GdddZ!ejfd d!Z"d2d"d#Z#ejfd$d%Z$d&d'Z%d(d)Z&d*d+Z'd,d-Z(d.d/Z)e*d0krNe"dS)3z2.6)StringIOBytesIO TextIOWrapper)MappingN) FeedParser)Message) MiniFieldStorage FieldStorageparseparse_multipart parse_headertestprint_exception print_environ print_formprint_directoryprint_argumentsprint_environ_usagecGsDtr*ts*zttdaWnty(Yn0ts4tantat|dS)Na)logfilelogfpopenOSErrornologlogdologZallargsr(/opt/alt/python39/lib64/python3.9/cgi.pyinitlog8s r cGst||ddS)N )rwrite)Zfmtargsrrrr[srcGsdSNrrrrrr_srcCsdatrtdatadS)Nr)rrcloser rrrrrcloselogcs r&&c Cs^|durtj}t|dr |j}nd}t|tr4|j}d|vrDd|d<|ddkr t|d\}}|dkrxt|||dS|d krt |d }t r|t krt d | | |} nd } d |vr| r| d} | |d } n*tjddr| r| d} | tjd} | |d <nz#parse_multipart..)r<formatrZset_typeKeyErrorr )r?rDr(rKr-rHrCrJrrOrr s    r ccs|dddkr|dd}|d}|dkr`|dd||dd|dr`|d|d}q&|dkrpt|}|d|}|V||d}qdS)Nr2;r"\")findcountlenstrip)sendfrrr _parseparams  (  r_cCstd|}|}i}|D]}|d}|dkr|d|}||dd}t|dkr|d|dkrdkrnn |dd}|dd d d}|||<q||fS) NrT=rr2rWrUz\\\rV)r___next__rXr[lowerrZrG)linepartskeyrDpinamevaluerrrr s  ,  r c@s<eZdZdZdZdZdZiZdZiZ iZ ddZ ddZ dS)rNcCs||_||_dSr$rjrkselfrjrkrrr__init__ szMiniFieldStorage.__init__cCsd|j|jfS)NzMiniFieldStorage(%r, %r)rlrnrrr__repr__szMiniFieldStorage.__repr__) __name__ __module__ __qualname__filenamelisttypefile type_options dispositiondisposition_optionsrJrorqrrrrrsrc @seZdZdddejdddddddf ddZd d Zd d Zd dZddZ ddZ ddZ ddZ d:ddZ d;ddZddZddZdd Zd!d"Zd#d$Zd%d&ZdZd'd(Zd)d*Zd+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9ZdS)rQz)FieldStorage.getvalue..r6rvrkrnrgdefaultrkrrrgetvalues  zFieldStorage.getvaluecCs4||vr,||}t|tr$|djS|jSn|SdSNrrrrrrgetfirsts   zFieldStorage.getfirstcCs:||vr2||}t|tr(dd|DS|jgSngSdS)NcSsg|] }|jqSrrrrrrr.rQz(FieldStorage.getlist..r)rnrgrkrrrrL)s   zFieldStorage.getlistcCs*|jdurtdttdd|jDS)Nrcss|] }|jVqdSr$rjrMrrrr 8rQz$FieldStorage.keys..)rvrsetrprrrr4s zFieldStorage.keyscs*|jdurtdtfdd|jDS)Nrc3s|]}|jkVqdSr$rrrgrrr>rQz,FieldStorage.__contains__..)rvrany)rnrgrrr __contains__:s zFieldStorage.__contains__cCs t|Sr$)rZrrprrr__len__@szFieldStorage.__len__cCs|jdurtdt|jS)NzCannot be converted to bool.)rvrboolrprrr__bool__Ds zFieldStorage.__bool__c Cs|j|j}t|ts0td|jt|jf||j |j }|j rT|d|j 7}t j j||j|j|j |j |j|jd}dd|D|_|dS)N%s should return bytes, got %sr'r(rKrr-cSsg|]\}}t||qSrrrMrgrkrrrrVrQz0FieldStorage.read_urlencoded..)r?r;rr6rr:rwrrr<r(rKrr>r parse_qslrArBrr-rv skip_lines)rnrEqueryrrrrIs  zFieldStorage.read_urlencodedc CsL|j}t|std|fg|_|jrftjj|j|j|j |j |j |j |j d}|jdd|D|jpp|j}|j}t|tstd|jt|jf|jt|7_|d|jkr|r|j}|jt|7_q|j }|dur|t|j8}t} d} |j} | | 7} | s q0q | s:q@|jt| 7_| | |j |j | } d| vrz| d=|jdurdn |j|j} ||j| ||||| |j |j ||j }|dur|d 8}|jr|t|j8}|d krtd |j|j7_|j||j s@|j|j!kr4d krnnq@q|"dS) Nz&Invalid boundary in multipart form: %rrcss|]\}}t||VqdSr$rrrrrrfrQz*FieldStorage.read_multi..r--rQr}r2rzMax number of fields exceeded)#rvalid_boundaryr:rvrr>r rrArBr(rKrr-extendFieldStorageClass __class__r?r~r6rrwrrrrZr[rZfeedr<r%rrrrr)rnr@rArBZibrklassZ first_linerparserZhdr_textdatarJrpartrrrr[sr             (zFieldStorage.read_multicCs4|jdkr||n||jddSr)r read_binaryr read_linesrxrrprrrrs   zFieldStorage.read_singlei cCs||_|j}|dkr|dkr|jt||j}t|tsVt d|jt |j f|j t |7_ |std|_q|j||t |}qdS)Nrrra) make_filerxrr?r;minbufsizer6rr:rwrrrrZrr")rnZtodorrrrrs   zFieldStorage.read_binarycCs@|jrt|_|_nt|_|_|jr4|n|dSr$)rrrx_FieldStorage__filerrread_lines_to_outerboundaryread_lines_to_eofrprrrrs  zFieldStorage.read_linescCsv|jdurF|jt|dkrF||_|j}|j|d|_|jrZ|j|n|j||j |j dS)Ni) rtellrZrrxrr"rr<r(rK)rnrerrrrZ__writes    zFieldStorage.__writecCs:|jd}|jt|7_|s*d|_q6||qdS)Nra)r?r~rrZr_FieldStorage__write)rnrerrrrs  zFieldStorage.read_lines_to_eofc CsJd|j}|d}d}d}d}|jdurFd|jkr>|krFnnqF|jd}|jt|7_|t|7}|s~d|_qF|dkr||}d}|dr|r|}||krqF||krd|_qF|}| d rd }|dd }d}nL| d r d }|dd}d}n*| dr.d}|dd}d }nd}d }| ||qdS) NrrQTrrra r2s  F) rrr?r~rrZr startswithrstripendswithr) rn next_boundary last_boundaryZdelimlast_line_lfendZ_readre strippedlineZodelimrrrrsN $        z(FieldStorage.read_lines_to_outerboundarycCs|jr |jrdSd|j}|d}d}|jd}|jt|7_|sPd|_q|dr|r|}||krpq||krd|_q|d}q&dS)NrTrrar2r)rrr?r~rrZrr[)rnrrrrerrrrrs$   zFieldStorage.skip_linescCs&|jrtdStjd|jddSdS)Nzwb+zw+r!)r(newline)rtempfileZ TemporaryFiler(rprrrr(s  zFieldStorage.make_file)N)N) rrrsrtosr@rorrrrqrrrrrrLrrrrrrrrrrrrrrrrrrrrr s@+ &   E   2r cCstdttjt_zNt}ttt|t|t dd}|fdd}td|Wnt Yn0tdda z&t}ttt|t|Wnt Yn0dS) NzContent-type: text/htmlcSs tddS)Nz,testing print_exception() -- italics?)execrrrrr^[sztest..fcSs |dSr$r)r^rrrg]sztest..gz9

What follows is a test, not an actual exception:

z*

Second try with a small maxlen...

2) printr3stdoutstderrr rrrrrrr9)r@formr^rrrrr Js4    r c Csx|durt\}}}ddl}ttd||||||}tdtd|ddt|df~dS)Nrz+

Traceback (most recent call last):

z
%s%s
rra) r3exc_info tracebackr format_tbformat_exception_onlyhtmlescapejoin)rwrktbrrrvrrrrqs   rc Cs\t|}ttdtd|D]"}tdt|dt||q&tdtdS)Nz

Shell Environment:





)sortedrrrr)r@rrgrrrrs  rcCst|}ttd|s&tdtd|D]Z}tdt|ddd||}tdttt|d td tt|q2td tdS) Nz

Form Contents:

z

No form fields.rr: )r]zzrr)rrrrrreprrw)rrrgrkrrrrs rc Cslttdz t}Wn8tyR}z tdtt|WYd}~nd}~00tt|tdS)Nz#

Current Working Directory:

zOSError:)rrgetcwdrrrstr)pwdmsgrrrrs *rcCs(ttdtttjtdS)Nz

Command Line Arguments:

)rr3r=rrrrrs  rcCs tddS)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
)rrrrrrsrcCs(ddl}t|trd}nd}|||S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer6rmatch)r\rZ _vb_patternrrrrs  r__main__)rFrGr')NNNN)+ __version__iorrrcollections.abcrr3rZ urllib.parser>Z email.parserrZ email.messagerrrr__all__rrr rrr&rr9r@r r r_r rr r rrrrrrrrrrrrrsR   #  F  :'   /