o ?OgO¼ã@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&e2e3e0j4e0j5d2dSdS)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écCs6 tj |¡|jdd…\}}t |¡|_||_dS)Né)Ú socketserverÚ TCPServerÚ server_bindZserver_addressÚsocketZgetfqdnÚ server_nameÚ server_port)ÚselfÚhostÚport©rú2/opt/alt/python310/lib64/python3.10/http/server.pyr ‡s    zHTTPServer.server_bindN)Ú__name__Ú __module__Ú __qualname__Zallow_reuse_addressr rrrrrƒs rc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsrc @s(eZdZ dej ¡dZdeZe Z e Z dZ dd„Zdd„Zd d „Zd d „Zd4dd„Zd5dd„Zd5dd„Zdd„Zdd„Zdd„Zd6dd„Zdd„Ze dd „e ed!ƒed"d#ƒ¡Dƒ¡Zd$ee d%ƒ<d&d'„Z!d(d)„Z"d5d*d+„Z#d,d-„Z$gd.¢Z%gd/¢Z&d0d1„Z'd2Z(e)j*j+Z,d3d „e-j. /¡DƒZ0d S)7rzPython/rz BaseHTTP/úHTTP/0.9c CsÞ d|_|j|_}d|_t|jdƒ}| d¡}||_| ¡}t |ƒdkr'dSt |ƒdkr|d}z*|  d¡s9t ‚| d d ¡d }| d ¡}t |ƒd krNt ‚t |dƒt |d ƒf}Wnt t fyp| tjd |¡YdSw|dkr}|jdkr}d|_|dkrŒ| tjd|¡dS||_d t |ƒkr›dks§n| tjd|¡dS|dd …\}}t |ƒd krÇd|_|dkrÇ| tjd|¡dS|||_|_|j  d¡rÝd |j d ¡|_z tjj|j|jd|_Wn?tjjy }z| tjdt|ƒ¡WYd}~dSd}~wtjjy)}z| tjdt|ƒ¡WYd}~dSd}~ww|j dd¡} |  ¡dkrÚhasattrÚNOT_IMPLEMENTEDÚgetattrÚwfileÚflushÚ TimeoutErrorÚ log_error)rZmnameÚmethodÚerrrÚhandle_one_requestˆs<   þ  €üz)BaseHTTPRequestHandler.handle_one_requestcCs, d|_| ¡|js| ¡|jr dSdSr?)r$rMrBrrrÚhandle­s ÿzBaseHTTPRequestHandler.handleNcCs z |j|\}}Wn tyd\}}Ynw|dur|}|dur$|}| d||¡| ||¡| dd¡d}|dkrq|tjtjtjfvrq|j |t j |ddt j |dddœ}|  d d ¡}| d |j ¡| d tt|ƒƒ¡| ¡|jd kr„|r†|j |¡dSdSdS)N)ú???rOzcode %d, message %srréÈF©Úquote)ÚcodeÚmessageÚexplainzUTF-8Úreplacez Content-TypeúContent-LengthZHEAD)Ú responsesÚKeyErrorrJÚ send_responseÚ send_headerrZ NO_CONTENTZ RESET_CONTENTÚ NOT_MODIFIEDÚerror_message_formatÚhtmlÚescapeÚencodeÚerror_content_typer%r*rAr!rGÚwrite)rrSrTrUZshortmsgZlongmsgÚbodyZcontentrrrr/µs>  ÿ  þ  ý ÿz!BaseHTTPRequestHandler.send_errorcCs< | |¡| ||¡| d| ¡¡| d| ¡¡dS)NZServerZDate)Ú log_requestr@r[Úversion_stringÚdate_time_string©rrSrTrrrrZês   z$BaseHTTPRequestHandler.send_responsecCsj |jdkr3|dur||jvr|j|d}nd}t|dƒs!g|_|j d|j||f dd¡¡dSdS)NrrrÚ_headers_bufferz %s %d %s úlatin-1Ústrict)r#rXrDrhÚappendr0r`rgrrrr@÷s     ÿÿÿøz)BaseHTTPRequestHandler.send_response_onlycCsx |jdkrt|dƒsg|_|j d||f dd¡¡| ¡dkr8| ¡dkr-d|_dS| ¡d kr:d |_dSdSdS) Nrrhz%s: %s rirjZ connectionrTr F)r#rDrhrkr`r9r$)rÚkeywordÚvaluerrrr[s  ÿ     üz"BaseHTTPRequestHandler.send_headercCs( |jdkr|j d¡| ¡dSdS)Nrs )r#rhrkÚ flush_headersrBrrrrAs    þz"BaseHTTPRequestHandler.end_headerscCs,t|dƒr|j d |j¡¡g|_dSdS)Nrhó)rDrGrbÚjoinrhrBrrrrns  þz$BaseHTTPRequestHandler.flush_headersú-cCs0 t|tƒr |j}| d|jt|ƒt|ƒ¡dS)Nz "%s" %s %s)Ú isinstancerrmÚ log_messager(r%)rrSÚsizerrrrds  ÿz"BaseHTTPRequestHandler.log_requestcGs |j|g|¢RŽdS©N)rs)rÚformatÚargsrrrrJ)s z BaseHTTPRequestHandler.log_errorcCsi|] }|d|d›“qS)z\xZ02xr)Ú.0ÚcrrrÚ 9sz!BaseHTTPRequestHandler.é éé z\\ú\cGs4 ||}tj d| ¡| ¡| |j¡f¡dS)Nz%s - - [%s] %s )ÚsysÚstderrrbÚaddress_stringÚlog_date_time_stringÚ translateÚ_control_char_table)rrvrwrTrrrrs<s þ ÿz"BaseHTTPRequestHandler.log_messagecCs |jd|jS)Nú )Úserver_versionÚ sys_versionrBrrrreVsz%BaseHTTPRequestHandler.version_stringcCs" |dur t ¡}tjj|ddS)NT)Zusegmt)ÚtimeÚemailÚutilsZ formatdate)rZ timestamprrrrfZsz'BaseHTTPRequestHandler.date_time_stringc CsD t ¡}t |¡\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)rˆÚ localtimeÚ monthname) rZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsrrrr‚`sÿz+BaseHTTPRequestHandler.log_date_time_string)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS©Nr)Úclient_addressrBrrrrns z%BaseHTTPRequestHandler.address_stringúHTTP/1.0cCsi|] }||j|jf“qSr)ÚphraseÚ description)rxÚvrrrrz}s ÿÿ)NNru)rqrq)1rrrrr;r)r‡Ú __version__r†ÚDEFAULT_ERROR_MESSAGEr]ÚDEFAULT_ERROR_CONTENT_TYPErar"r>r:rMrNr/rZr@r[rArnrdrJr%Ú maketransÚ itertoolsÚchainÚranger„Úordrsrerfr‚Z weekdaynamerŒrr0r3r4Z HTTPMessager6rÚ __members__ÚvaluesrXrrrrr“sFgj%  5   ÿ    þrcsveZdZ deZdddddœ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|¤ŽdSru)ÚosÚgetcwdÚfspathr£ÚsuperÚ__init__)rr£rwÚkwargs©Ú __class__rrr¨˜s z!SimpleHTTPRequestHandler.__init__cCs: | ¡}|rz| ||j¡W| ¡dS| ¡wdSru)Ú send_headÚcopyfilerGr©rÚfrrrÚdo_GETžsüzSimpleHTTPRequestHandler.do_GETcCs | ¡}|r | ¡dSdSru)r¬rr®rrrÚdo_HEAD§s  ÿz SimpleHTTPRequestHandler.do_HEADc CsN | |j¡}d}tj |¡rhtj |j¡}|j d¡sM| t j ¡|d|d|dd|d|df}tj  |¡}|  d|¡|  dd ¡|  ¡dSd D]}tj ||¡}tj |¡rb|}nqO| |¡S| |¡}| d¡r{| t jd ¡dSzt|d ƒ}Wnty“| t jd ¡YdSwzŠt | ¡¡}d |jvrød|jvrøz tj |jd ¡} Wn ttttfy¾Yn:w| 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| (¡‚)Nrrrr réZLocationrWÚ0)z index.htmlz index.htmzFile not foundÚrbzIf-Modified-Sincez If-None-Match)Útzinfo)Z microsecondú Content-typeéz Last-Modified),Útranslate_pathr1r¤ÚisdirÚurllibÚparseZurlsplitÚendswithrZrZMOVED_PERMANENTLYZ urlunsplitr[rArpÚisfileÚlist_directoryÚ guess_typer/Ú NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor7r‰rŠZparsedate_to_datetimeÚ TypeErrorr.Ú OverflowErrorr,rµrVÚdatetimeÚtimezoneZutcZ fromtimestampÚst_mtimer\rÚOKr%rf) rr1r¯ÚpartsZ new_partsZnew_urlÚindexZctypeZfsZimsZ last_modifrrrr¬­s„     ÿ    þ    þ  ÿþ  ÿ     ÿz"SimpleHTTPRequestHandler.send_headc CsÒ zt |¡}Wnty| tjd¡YdSw|jdd„dg}z tjj |j dd}Wnt y?tj  |j ¡}Ynwt j |dd}t ¡}d |}| d ¡| d ¡| d |¡| d |¡| d|¡| d¡|D]9}tj  ||¡}|} } tj  |¡r|d} |d} tj  |¡rš|d} | dtjj| ddt j | ddf¡qu| d¡d |¡ |d¡} t ¡} |  | ¡|  d¡| tj¡| dd|¡| dtt| ƒƒ¡| ¡| S)NzNo permission to list directorycSs| ¡Sru)r9)ÚarrrÚsz9SimpleHTTPRequestHandler.list_directory..)ÚkeyÚ surrogatepass©ÚerrorsFrQzDirectory listing for %szZz z@z%s z

%s

z
    rú@z
  • %s
  • z

Ú Úsurrogateescaperr¶ztext/html; charset=%srW) r¤ÚlistdirrÂr/rrÀÚsortrºr»Úunquoter1ÚUnicodeDecodeErrorr^r_rÚgetfilesystemencodingrkrpr¹ÚislinkrRr`ÚioÚBytesIOrbÚseekrZrÊr[r%r*rA) rr1ÚlistÚrZ displaypathÚencÚtitleÚnameÚfullnameZ displaynameZlinknameZencodedr¯rrrr¾sn þü  ÿ ÿ  ÿ   ÿ þÿ    z'SimpleHTTPRequestHandler.list_directorycCsÎ | dd¡d}| dd¡d}| ¡ d¡}z tjj|dd}Wnty1tj |¡}Ynwt |¡}| d¡}t d|ƒ}|j }|D]}t j   |¡sV|t jt jfvrWqFt j  ||¡}qF|re|d7}|S)Nú?rrú#rrÐrÑ)r)r'r¼rºr»rØrÙÚ posixpathÚnormpathÚfilterr£r¤r1ÚdirnameÚcurdirÚpardirrp)rr1Ztrailing_slashr<Zwordrrrr¸?s( ÿ   z'SimpleHTTPRequestHandler.translate_pathcCs t ||¡dSru)ÚshutilZ copyfileobj)rÚsourceZ outputfilerrrr­]s z!SimpleHTTPRequestHandler.copyfilecCsZ t |¡\}}||jvr|j|S| ¡}||jvr |j|St |¡\}}|r+|SdS)Nr¡)rçÚsplitextÚextensions_mapr9Ú mimetypesr¿)rr1ÚbaseZextZguessÚ_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]}|dkr'| ¡q|r2|dkr2| |¡q|rM| ¡}|rL|dkrF| ¡d}n |dkrLd}nd}|rXd ||f¡}dd |¡|f}d |¡}|S)Nrårrz..rr)Ú partitionrºr»rØr)Úpoprkrp) r1róÚqueryÚ path_partsZ head_partsÚpartZ tail_partZ splitpathÚcollapsed_pathrrrÚ_url_collapse_path‰s4     €€ rûcCsp trtSzddl}Wn tyYdSwz | d¡daWtSty7dtdd„| ¡DƒƒaYtSw)NrrÚnobodyr rcss|]}|dVqdS)r Nr)rxrrrrÚ Çs€znobody_uid..)rüÚpwdÚ ImportErrorÚgetpwnamrYÚmaxZgetpwall)rþrrrÚ nobody_uid»s  ÿ þþrcCs t |tj¡Sru)r¤ÚaccessÚX_OK)r1rrrÚ executableËsrc@sTeZdZ eedƒZdZdd„Zdd„Zdd„Z d d gZ d d „Z d d„Z dd„Z dS)rÚforkrcCs( | ¡r | ¡dS| tjd¡dS)NzCan only POST to CGI scripts)Úis_cgiÚrun_cgir/rrErBrrrÚdo_POSTás þzCGIHTTPRequestHandler.do_POSTcCs | ¡r | ¡St |¡Sru)rrrr¬rBrrrr¬ïs zCGIHTTPRequestHandler.send_headcCs” t|jƒ}| dd¡}|dkr.|d|…|jvr.| d|d¡}|dkr.|d|…|jvs|dkrH|d|…||dd…}}||f|_dSdS)NrrrTF)rûr1ÚfindÚcgi_directoriesÚcgi_info)rrúZdir_sepÚheadÚtailrrrrös  ÿ zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCs t|ƒSru)r)rr1rrrÚ is_executablesz#CGIHTTPRequestHandler.is_executablecCs tj |¡\}}| ¡dvS)N)z.pyz.pyw)r¤r1rïr9)rr1r rrrrÚ is_pythons zCGIHTTPRequestHandler.is_pythonc) CsŽ |j\}}|d|}| dt|ƒd¡}|dkrH|d|…}||dd…}| |¡}tj |¡rC||}}| dt|ƒd¡}nn|dks| d¡\}}} | d¡}|dkrg|d|…||d…} }n|d} }|d| } | | ¡} tj | ¡sˆ|  t j d| ¡dStj  | ¡s™|  t j d| ¡dS| | ¡} |js£| s³| | ¡s³|  t j d| ¡dSt tj¡}| ¡|d <|jj|d <d |d <|j|d <t|jjƒ|d<|j|d<tj |¡}||d<| |¡|d<| |d<| |d<|jd|d<|j  d¡}|rW| !¡}t|ƒdkrWddl"}ddl#}|d|d<|d $¡dkrWz|d %d¡}| &|¡ 'd¡}Wn |j(t)fyDYnw| !d¡}t|ƒdkrW|d|d<|j  d¡durh|j *¡|d<n|jd|d<|j  d¡}|r|||d<|j  d ¡}|r‰||d!<|j +d"d#¡}d$ ,|¡|d%<|j  d&¡}|r¤||d'<t-d|j +d(g¡ƒ}d) ,|¡}|rº||d*<d+D] }| .|d¡q¼| /t j0d,¡| 1¡|  2d-d.¡}|jrx| g}d/|vrè| 3|¡t4ƒ}|j5 6¡t 7¡}|dkr5t 8|d¡\}}t9 9|j:gggd¡dr#|j: ;d¡sn t9 9|j:gggd¡dst <|¡}|r3| =d0|›¡dSz.zt >|¡Wn t?yGYnwt @|j: A¡d¡t @|j5 A¡d¡t B| ||¡WdS|j C|jD|j¡t Ed1¡YdSddlF} | g}!| | ¡r¢tGjH}"|" $¡ Id2¡rœ|"dd3…|"d4d…}"|"d5g|!}!d/| vr¬|! 3| ¡| Jd6|  K|!¡¡ztL|ƒ}#WntMtNfyÉd}#Ynw| jO|!| jP| jP| jP|d7}$|j $¡d8krë|#dkrë|j: ;|#¡}%nd}%t9 9|j:jQgggd¡dr|j:jQ Rd¡snt9 9|j:jQgggd¡dsû|$ S|%¡\}&}'|j5 T|&¡|'r(| =d9|'¡|$jU V¡|$jW V¡|$jX}(|(r@| =d:|(¡dS| Jd;¡dS)s’R  s0  þÿ ÿÿ þ  üÜ