a ´ig¼ã@sêdZgd¢ZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZdZdZGdd„dejƒZGd d „d ejeƒZGd d „d ejƒZGd d„deƒZdd„Z da!dd„Z"dd„Z#Gdd„deƒZ$dd„Z%eedddfdd„Z&e'dkræddl(Z(ddl)Z)e( *¡Z+e+j,ddd d!e+j,d"d#d$d%d&e+j,d'd(e  -¡d)d*e+j,d+d,de.d-d.d/e+ /¡Z0e0j1r¾e$Z2neZ2Gd0d1„d1eƒZ3e&e2e3e0j4e0j5d2dS)3z0.6)Ú HTTPServerÚThreadingHTTPServerÚBaseHTTPRequestHandlerÚSimpleHTTPRequestHandlerÚCGIHTTPRequestHandleréN)Ú HTTPStatusa¹ Error response

Error response

Error code: %(code)d

Message: %(message)s.

Error code explanation: %(code)s - %(explain)s.

ztext/html;charset=utf-8c@seZdZdZdd„ZdS)récCs4tj |¡|jdd…\}}t |¡|_||_dS)Né)Ú socketserverÚ TCPServerÚ server_bindZserver_addressÚsocketÚgetfqdnÚ server_nameÚ server_port)ÚselfÚhostÚport©rú#/usr/lib64/python3.9/http/server.pyr ‡s  zHTTPServer.server_bindN)Ú__name__Ú __module__Ú __qualname__Zallow_reuse_addressr rrrrrƒsrc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsrc @s&eZdZdej ¡dZdeZe Z e Z dZ dd„Zdd„Zd d „Zd d „Zd4dd„Zd5dd„Zd6dd„Zdd„Zdd„Zdd„Zd7dd„Zdd„Ze dd „e ed!ƒed"d#ƒ¡Dƒ¡Zd$ee d%ƒ<d&d'„Z!d(d)„Z"d8d*d+„Z#d,d-„Z$gd.¢Z%gd/¢Z&d0d1„Z'd2Z(e)j*j+Z,d3d „e-j. /¡DƒZ0d S)9rzPython/rz BaseHTTP/úHTTP/0.9c Csêd|_|j|_}d|_t|jdƒ}| d¡}||_| ¡}t |ƒdkrLdSt |ƒdkr |d}zT|  d¡srt ‚| d d ¡d }| d ¡}t |ƒd krœt ‚t |dƒt |d ƒf}Wn*t t fyà| tjd |¡YdS0|dkrú|jdkrúd|_|dkr| tjd|¡dS||_d t |ƒkr9rsz!BaseHTTPRequestHandler.é éé z\\ú\cGs2||}tj d| ¡| ¡| |j¡f¡dS)Nz%s - - [%s] %s )ÚsysÚstderrreÚaddress_stringÚlog_date_time_stringÚ translateÚ_control_char_table)rrzr{rWrrrrw<s þÿz"BaseHTTPRequestHandler.log_messagecCs|jd|jS)Nú )Úserver_versionÚ sys_versionrErrrrhVsz%BaseHTTPRequestHandler.version_stringcCs |durt ¡}tjj|ddS)NT)Zusegmt)ÚtimeÚemailÚutilsZ formatdate)rZ timestamprrrriZsz'BaseHTTPRequestHandler.date_time_stringc CsBt ¡}t |¡\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)rŒÚ localtimeÚ monthname) rZnowZyearZmonthZdayZhhZmmÚssÚxÚyÚzÚsrrrr†`s ÿz+BaseHTTPRequestHandler.log_date_time_string)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS©Nr)Úclient_addressrErrrr…nsz%BaseHTTPRequestHandler.address_stringúHTTP/1.0cCsi|]}||j|jf“qSr)ÚphraseÚ description)r|Úvrrrr~}sÿ)NN)N)N)ruru)N)1rrrrƒr=r+r‹Ú __version__rŠÚDEFAULT_ERROR_MESSAGEr`ÚDEFAULT_ERROR_CONTENT_TYPErdr$rAr<rPrQr1r]rCr^rDrrrgrMr'Ú maketransÚ itertoolsÚchainÚrangerˆÚordrwrhrir†Z weekdaynamerr…r2r5r6Z HTTPMessager8rÚ __members__Úvaluesr[rrrrr“sBij% 5  ÿ   þrcsteZdZdeZdddddœZZddœ‡fd d „ Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Z‡ZS)rz SimpleHTTP/zapplication/gzipúapplication/octet-streamzapplication/x-bzip2zapplication/x-xz)z.gzz.Zz.bz2z.xzN©Ú directorycs2|durt ¡}t |¡|_tƒj|i|¤ŽdSry)ÚosÚgetcwdÚfspathr¨ÚsuperÚ__init__)rr¨r{Úkwargs©Ú __class__rrr­˜s z!SimpleHTTPRequestHandler.__init__cCs6| ¡}|r2z| ||j¡W| ¡n | ¡0dSry)Ú send_headÚcopyfilerJr!©rÚfrrrÚdo_GETžs zSimpleHTTPRequestHandler.do_GETcCs| ¡}|r| ¡dSry)r±r!r³rrrÚdo_HEAD§sz SimpleHTTPRequestHandler.do_HEADc Csf| |j¡}d}tj |¡rÎtj |j¡}|j d¡s˜| t j ¡|d|d|dd|d|df}tj  |¡}|  d|¡|  dd ¡|  ¡dSd D]&}tj ||¡}tj |¡rœ|}qÎqœ| |¡S| |¡}| d¡rô| t jd ¡dSzt|d ƒ}Wn$ty&| t jd ¡YdS0z t | ¡¡}d |jvrþd|jvrþztj |jd ¡} Wnttttfy„Ynz0| j dur¢| j!t"j#j$d} | j t"j#j$urþt"j" %|j&t"j#j$¡} | j!dd} | | krþ| t j'¡|  ¡| (¡WdS| t j)¡|  d|¡|  dt*|dƒ¡|  d| +|j&¡¡|  ¡|WS| (¡‚Yn0dS)Nrrrr réZLocationrZÚ0)z index.htmlz index.htmzFile not foundÚrbzIf-Modified-Sincez If-None-Match)Útzinfo)Z microsecondú Content-typeéz Last-Modified),Útranslate_pathr3r©ÚisdirÚurllibÚparseÚurlsplitÚendswithr]rZMOVED_PERMANENTLYÚ urlunsplitr^rDrtÚexistsÚlist_directoryÚ guess_typer1Ú NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor9rrŽZparsedate_to_datetimeÚ TypeErrorr0Ú OverflowErrorr.rºrYÚdatetimeÚtimezoneZutcZ fromtimestampÚst_mtimer_r!ÚOKr'ri) rr3r´ÚpartsZ new_partsZnew_urlÚindexZctypeÚfsZimsZ last_modifrrrr±­s~     ÿ        ÿÿ  ÿ      ÿz"SimpleHTTPRequestHandler.send_headc CsÔzt |¡}Wn"ty0| tjd¡YdS0|jdd„dg}ztjj |j dd}Wn t y|tj  |j ¡}Yn0t j |dd}t ¡}d |}| d ¡| d ¡| d |¡| d |¡| d|¡| d¡|D]v}tj  ||¡}|} } tj  |¡r |d} |d} tj  |¡r6|d} | dtjj| ddt j | ddf¡qè| d¡d |¡ |d¡} t ¡} |  | ¡|  d¡| tj¡| dd|¡| dtt| ƒƒ¡| ¡| S)NzNo permission to list directorycSs| ¡Sry)r;)ÚarrrÚrsz9SimpleHTTPRequestHandler.list_directory..)ÚkeyÚ surrogatepass©ÚerrorsFrTzDirectory listing for %szZz z@z%s z

%s

z
    rú@z
  • %s
  • z

Ú Úsurrogateescaperr»ztext/html; charset=%srZ) r©ÚlistdirrÉr1rrÇÚsortr¿rÀÚunquoter3ÚUnicodeDecodeErrorrarbrƒÚgetfilesystemencodingrnrtr¾ÚislinkrUrcÚioÚBytesIOreÚseekr]rÑr^r'r,rD) rr3ÚlistÚrZ displaypathÚencÚtitleÚnameÚfullnameZ displaynameZlinknameÚencodedr´rrrrÅsh þ ÿ    ÿ ÿ þÿ    z'SimpleHTTPRequestHandler.list_directorycCsÌ| dd¡d}| dd¡d}| ¡ d¡}ztjj|dd}Wnty`tj |¡}Yn0t |¡}| d¡}t d|ƒ}|j }|D]0}t j   |¡sŠ|t jt jfvr¬qŠt j  ||¡}qŠ|rÈ|d7}|S)Nú?rrú#rrØrÙ)r+r)rÂr¿rÀràráÚ posixpathÚnormpathÚfilterr¨r©r3ÚdirnameÚcurdirÚpardirrt)rr3Ztrailing_slashr>Zwordrrrr½?s$     z'SimpleHTTPRequestHandler.translate_pathcCst ||¡dSry)ÚshutilÚ copyfileobj)rÚsourceZ outputfilerrrr²]sz!SimpleHTTPRequestHandler.copyfilecCsXt |¡\}}||jvr"|j|S| ¡}||jvr>|j|St |¡\}}|rT|SdS)Nr¦)rðÚsplitextÚextensions_mapr;Ú mimetypesrÆ)rr3ÚbaseÚextZguessÚ_rrrrÆms    z#SimpleHTTPRequestHandler.guess_type)rrrrœrŠrúZ_encodings_map_defaultr­rµr¶r±rÅr½r²rÆÚ __classcell__rrr¯rrƒs ü  X:rc CsÎ| d¡\}}}tj |¡}| d¡}g}|dd…D],}|dkrL| ¡q6|r6|dkr6| |¡q6|r˜| ¡}|rœ|dkrŠ| ¡d}qœ|dkrœd}nd}|r®d ||f¡}dd |¡|f}d |¡}|S)Nrîrrz..rr )Ú partitionr¿rÀràr+Úpoprnrt) r3rþÚqueryÚ path_partsZ head_partsÚpartZ tail_partZ splitpathÚcollapsed_pathrrrÚ_url_collapse_path‰s.      rcCsntrtSz ddl}Wnty(YdS0z| d¡daWn,tyhdtdd„| ¡DƒƒaYn0tS)NrrÚnobodyr rcss|]}|dVqdS)r Nr)r|r’rrrÚ Çrsznobody_uid..)rÚpwdÚ ImportErrorÚgetpwnamr\ÚmaxÚgetpwall)r rrrÚ nobody_uid»s    rcCst |tj¡Sry)r©ÚaccessÚX_OK)r3rrrÚ executableËsrc@sReZdZeedƒZdZdd„Zdd„Zdd„Z d d gZ d d „Z d d„Z dd„Z dS)rÚforkrcCs$| ¡r| ¡n| tjd¡dS)NzCan only POST to CGI scripts)Úis_cgiÚrun_cgir1rrHrErrrÚdo_POSTás  þzCGIHTTPRequestHandler.do_POSTcCs| ¡r| ¡St |¡SdSry)rrrr±rErrrr±ïszCGIHTTPRequestHandler.send_headcCszt|jƒ}| dd¡}|dkrB|d|…|jvrB| d|d¡}q|dkrv|d|…||dd…}}||f|_dSdS)NrrrTF)rr3ÚfindÚcgi_directoriesÚcgi_info)rrZdir_sepÚheadÚtailrrrrös   zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|ƒSry)r)rr3rrrÚ is_executablesz#CGIHTTPRequestHandler.is_executablecCstj |¡\}}| ¡dvS)N)z.pyz.pyw)r©r3rùr;)rr3rrrrrÚ is_pythonszCGIHTTPRequestHandler.is_pythonc) Csl|j\}}|d|}| dt|ƒd¡}|dkrˆ|d|…}||dd…}| |¡}tj |¡rˆ||}}| dt|ƒd¡}q*qˆq*| d¡\}}} | d¡}|dkrÆ|d|…||d…} }n |d} }|d| } | | ¡} tj | ¡s |  t j d| ¡dStj  | ¡s.|  t j d| ¡dS| | ¡} |jsF| sh| | ¡sh|  t j d| ¡dSt tj¡}| ¡|d <|jj|d <d |d <|j|d <t|jjƒ|d<|j|d<tj |¡}||d<| |¡|d<| |d<| rð| |d<|jd|d<|j  d¡}|r¶| !¡}t|ƒdkr¶ddl"}ddl#}|d|d<|d $¡dkr¶z"|d %d¡}| &|¡ 'd¡}Wn|j(t)fyYn&0| !d¡}t|ƒdkr¶|d|d<|j  d¡durØ|j *¡|d<n|jd|d<|j  d¡}|r||d<|j  d ¡}|r||d!<|j +d"d#¡}d$ ,|¡|d%<|j  d&¡}|rP||d'<t-d|j +d(g¡ƒ}d) ,|¡}|r|||d*<d+D]}| .|d¡q€| /t j0d,¡| 1¡|  2d-d.¡}|jræ| g}d/|vrØ| 3|¡t4ƒ}|j5 6¡t 7¡}|dkr^t 8|d¡\}}t9 9|j:gggd¡dr:|j: ;d¡s q:q t <|¡}|rZ| =d0|›¡dSzZzt >|¡Wnt?y‚Yn0t @|j: A¡d¡t @|j5 A¡d¡t B| ||¡Wn(|j C|jD|j¡t Ed1¡Yn0n‚ddlF} | g}!| | ¡r:tGjH}"|" $¡ Id2¡r.|"dd3…|"d4d…}"|"d5g|!}!d/| vrN|! 3| ¡| Jd6|  K|!¡¡z tL|ƒ}#WntMtNfyˆd}#Yn0| jO|!| jP| jP| jP|d7}$|j $¡d8krÌ|#dkrÌ|j: ;|#¡}%nd}%t9 9|j:jQgggd¡dr|j:jQ Rd¡sÐqqÐ|$ S|%¡\}&}'|j5 T|&¡|'r0| =d9|'¡|$jU V¡|$jW V¡|$jX}(|(r^| =d:|(¡n | Jd;¡dS)SsŒ  s0  þ  ÿ ÿÿ þ ü