U e5dï»ã@sdZdddddgZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlmZdd lmZd Zd ZGd d„dejƒZGd d„dejeƒZGdd„dej ƒZ!Gdd„de!ƒZ"dd„Z#da$dd„Z%dd„Z&Gdd„de"ƒZ'dd„Z(e!edddfdd„Z)e*dk�rddl+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,de0d-d.d/�e- 1¡Z2e2j3�rÐe'Z4nee"e2j5d0�Z4Gd1d2„d2eƒZ6e)e4e6e2j7e2j8d3�dS)4z0.6Ú HTTPServerÚThreadingHTTPServerÚBaseHTTPRequestHandlerÚSimpleHTTPRequestHandlerÚCGIHTTPRequestHandleréN)Úpartial)Ú 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ÚsocketZgetfqdnÚ server_nameÚ server_port)ÚselfÚhostÚport©rú#/usr/lib64/python3.8/http/server.pyr ‰s  zHTTPServer.server_bindN)Ú__name__Ú __module__Ú __qualname__Zallow_reuse_addressr rrrrr…sc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrr‘sc @sFeZdZdej ¡dZdeZe Z e Z dZ dd„Zdd„Zd d „Zd d „ZdEdd„ZdFdd„ZdGdd„Zdd„Zdd„Zdd„ZdHdd„Zdd„Ze dd „e ed!ƒed"d#ƒ¡Dƒ¡Zd$ee d%ƒ<d&d'„Z!d(d)„Z"dId*d+„Z#d,d-„Z$d.d/d0d1d2d3d4gZ%d d5d6d7d8d9d:d;dd?d@g Z&dAdB„Z'dCZ(e)j*j+Z,dDd „e-j. /¡DƒZ0d S)JrzPython/rz BaseHTTP/úHTTP/0.9c Csôd|_|j|_}d|_t|jdƒ}| d¡}||_| ¡}t |ƒdkrLdSt |ƒdk�r&|d}zT|  d¡srt ‚| d d ¡d }| d ¡}t |ƒd krœt ‚t |dƒt |d ƒf}Wn,t t fk râ| tjd |¡YdSX|dk�r|jdk�rd|_|dk�r | tjd|¡dS||_d t |ƒk�rBdk�sZn| tjd|¡dS|dd …\}}t |ƒd k�ržd|_|dk�rž| tjd|¡dS|||_|_|j  d¡�rÌd |j d ¡|_ztjj|j|jd�|_Wn‚tjjk �r(}z| tjdt|ƒ¡WY¢dSd}~XYnBtjjk �rh}z| tjdt|ƒ¡WY¢dSd}~XYnX|j dd¡} |  ¡dk�rŽd|_n |  ¡dk�r®|jdk�r®d|_|j dd¡} |  ¡dk�rð|jdk�rð|jdk�rð|  ¡�sðdSdS)NTz iso-8859-1z rFééÿÿÿÿzHTTP/ú/r Ú.r zBad request version (%r))r r zHTTP/1.1)r rzInvalid HTTP version (%s)zBad request syntax (%r)ZGETzBad HTTP/0.9 request type (%r)z//)Z_classz Line too longzToo many headersÚ ConnectionÚÚcloseú keep-aliveZExpectz 100-continue)!ÚcommandÚdefault_request_versionÚrequest_versionÚclose_connectionÚstrÚraw_requestlineÚrstripÚ requestlineÚsplitÚlenÚ startswithÚ ValueErrorÚintÚ IndexErrorÚ send_errorrZ BAD_REQUESTÚprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDÚpathÚlstripÚhttpÚclientZ parse_headersÚrfileÚ MessageClassÚheadersZ LineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZ HTTPExceptionÚgetÚlowerÚhandle_expect_100) rÚversionr)ÚwordsZbase_version_numberZversion_numberr"r2ÚerrZconntypeZexpectrrrÚ parse_requests¬        þ þþ þ ÿ ýýÿÿþ z$BaseHTTPRequestHandler.parse_requestcCs| tj¡| ¡dS©NT)Úsend_response_onlyrZCONTINUEÚ end_headers©rrrrr;xs z(BaseHTTPRequestHandler.handle_expect_100c Csîz¬|j d¡|_t|jƒdkrBd|_d|_d|_| tj ¡WdS|jsTd|_ WdS|  ¡sbWdSd|j}t ||ƒs�| tj d|j¡WdSt||ƒ}|ƒ|j ¡Wn<tjk rè}z| d|¡d|_ WY¢dSd}~XYnXdS)NiirTZdo_zUnsupported method (%r)zRequest timed out: %r)r6Úreadliner'r+r)r$r"r0rZREQUEST_URI_TOO_LONGr%r?ÚhasattrÚNOT_IMPLEMENTEDÚgetattrÚwfileÚflushrZtimeoutÚ log_error)rZmnameÚmethodÚerrrÚhandle_one_requestŠs6   þ  z)BaseHTTPRequestHandler.handle_one_requestcCs"d|_| ¡|js| ¡qdSr@)r%rMrCrrrÚhandle¯szBaseHTTPRequestHandler.handleNcCs z|j|\}}Wntk r.d\}}YnX|dkr<|}|dkrH|}| d||¡| ||¡| dd¡d}|dkrâ|tjtjtjfkrâ|j |t j |dd�t j |dd�dœ}|  d d ¡}| d |j ¡| d tt|ƒƒ¡| ¡|jd k�r|�r|j |¡dS)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+rBr"rHÚwrite)rrSrTrUZshortmsgZlongmsgZbodyZcontentrrrr0·s:  þÿ  ý z!BaseHTTPRequestHandler.send_errorcCs:| |¡| ||¡| d| ¡¡| d| ¡¡dS)NZServerZDate)Ú log_requestrAr[Úversion_stringÚdate_time_string©rrSrTrrrrZìs  z$BaseHTTPRequestHandler.send_responsecCsd|jdkr`|dkr0||jkr,|j|d}nd}t|dƒs@g|_|j d|j||f dd¡¡dS)NrrrÚ_headers_bufferz %s %d %s úlatin-1Ústrict)r$rXrErgÚappendr1r`rfrrrrAùs    ÿþz)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dƒsg|_|j d||f dd¡¡| ¡dkrh| ¡dkrVd|_n| ¡d krhd |_dS) Nrrgz%s: %s rhriZ connectionr Tr!F)r$rErgrjr`r:r%)rÚkeywordÚvaluerrrr[s  ÿ   z"BaseHTTPRequestHandler.send_headercCs"|jdkr|j d¡| ¡dS)Nrs )r$rgrjÚ flush_headersrCrrrrBs  z"BaseHTTPRequestHandler.end_headerscCs(t|dƒr$|j d |j¡¡g|_dS)Nrgó)rErHrbÚjoinrgrCrrrrms z$BaseHTTPRequestHandler.flush_headersú-cCs.t|tƒr|j}| d|jt|ƒt|ƒ¡dS)Nz "%s" %s %s)Ú isinstancerrlÚ log_messager)r&)rrSÚsizerrrrc s ÿz"BaseHTTPRequestHandler.log_requestcGs|j|f|žŽdS©N)rr)rÚformatÚargsrrrrJ+s z BaseHTTPRequestHandler.log_errorcCsi|]}|d|d›�“qS)z\xZ02xr)Ú.0ÚcrrrÚ ;sz!BaseHTTPRequestHandler.é éé z\\ú\cGs2||}tj d| ¡| ¡| |j¡f¡dS)Nz%s - - [%s] %s )ÚsysÚstderrrbÚaddress_stringÚlog_date_time_stringÚ translateÚ_control_char_table)rrurvrTrrrrr>s þÿz"BaseHTTPRequestHandler.log_messagecCs|jd|jS)Nú )Úserver_versionÚ sys_versionrCrrrrdXsz%BaseHTTPRequestHandler.version_stringcCs |dkrt ¡}tjj|dd�S)NT)Zusegmt)ÚtimeÚemailÚutilsZ formatdate)rZ timestamprrrre\sz'BaseHTTPRequestHandler.date_time_stringc CsBt ¡}t |¡\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r‡Ú localtimeÚ monthname) rZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsrrrr�bsÿz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS©Nr)Úclient_addressrCrrrr€psz%BaseHTTPRequestHandler.address_stringúHTTP/1.0cCsi|]}||j|jf“qSr)ÚphraseZ description)rwÚvrrrrysÿ)NN)N)N)rprp)N)1rrrr~r<r*r†Ú __version__r…ÚDEFAULT_ERROR_MESSAGEr]ÚDEFAULT_ERROR_CONTENT_TYPErar#r?r;rMrNr0rZrAr[rBrmrcrJr&Ú maketransÚ itertoolsÚchainÚrangerƒÚordrrrdrer�Z weekdaynamer‹r€r1r4r5Z HTTPMessager7rÚ __members__ÚvaluesrXrrrrr•s\ij% 5  ÿ  þ þcsŽeZdZdeZddœ‡fdd„ Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z e jshe  ¡e j ¡Ze dddddœ¡‡ZS)rz SimpleHTTP/N©Ú directorycs(|dkrt ¡}||_tƒj||ŽdSrt)ÚosÚgetcwdr ÚsuperÚ__init__)rr rvÚkwargs©Ú __class__rrr¤”sz!SimpleHTTPRequestHandler.__init__cCs.| ¡}|r*z| ||j¡W5| ¡XdSrt)Ú send_headr ÚcopyfilerH©rÚfrrrÚdo_GETšs zSimpleHTTPRequestHandler.do_GETcCs| ¡}|r| ¡dSrt)r¨r rªrrrÚdo_HEAD£sz SimpleHTTPRequestHandler.do_HEADc Cs^| |j¡}d}tj |¡rÂtj |j¡}|j d¡sŒ| t j ¡|d|d|dd|d|df}tj  |¡}|  d|¡|  ¡dSdD]&}tj ||¡}tj |¡r�|}qÂq�| |¡S| |¡}| d¡rè| t jd ¡dSzt|d ƒ}Wn&tk �r| t jd ¡YdSX�z"t | ¡¡}d |jk�röd |jk�röztj |jd ¡} Wnttttfk �r|YnzX| j dk�rš| j!t"j#j$d �} | j t"j#j$k�röt"j" %|j&t"j#j$¡} | j!dd�} | | k�rö| t j'¡|  ¡| (¡WdS| t j)¡|  d|¡|  dt*|dƒ¡|  d| +|j&¡¡|  ¡|WS| (¡‚YnXdS)Nrrr r réZLocation)z index.htmlz index.htmzFile not foundÚrbzIf-Modified-Sincez If-None-Match)Útzinfo)Z microsecondú Content-typerWéz Last-Modified),Útranslate_pathr2r¡ÚisdirÚurllibÚparseZurlsplitÚendswithrZrZMOVED_PERMANENTLYZ urlunsplitr[rBroÚexistsÚlist_directoryÚ guess_typer0Ú NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor8rˆr‰Zparsedate_to_datetimeÚ TypeErrorr/Ú OverflowErrorr-r°rVÚdatetimeÚtimezoneZutcZ fromtimestampÚst_mtimer\r ÚOKr&re) rr2r«ÚpartsZ new_partsZnew_urlÚindexZctypeZfsZimsZ last_modifrrrr¨©s€    ÿ       ÿÿ ÿ      ÿz"SimpleHTTPRequestHandler.send_headc CsØzt |¡}Wn$tk r2| tjd¡YdSX|jdd„d�g}ztjj |j dd�}Wn"t k r€tj  |j ¡}YnXt j |dd�}t ¡}d |}| d ¡| d ¡| d |¡| d |¡| d|¡| d¡|D]v}tj  ||¡}|} } tj  |¡�r$|d} |d} tj  |¡�r:|d} | dtjj| dd�t j | dd�f¡qì| d¡d |¡ |d¡} t ¡} |  | ¡|  d¡| tj¡| dd|¡| dtt| ƒƒ¡| ¡| S)NzNo permission to list directorycSs| ¡Srt)r:)ÚarrrÚrnz9SimpleHTTPRequestHandler.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½r0rr»Úsortrµr¶Úunquoter2ÚUnicodeDecodeErrorr^r_r~Úgetfilesystemencodingrjror´ÚislinkrRr`ÚioÚBytesIOrbÚseekrZrÅr[r&r+rB) rr2ÚlistÚrZ displaypathÚencÚtitleÚnameÚfullnameZ displaynameZlinknameZencodedr«rrrr¹shþ ÿ   ÿ ÿ þÿ    z'SimpleHTTPRequestHandler.list_directorycCsÎ| dd¡d}| dd¡d}| ¡ d¡}ztjj|dd�}Wn tk rbtj |¡}YnXt |¡}| d¡}t d|ƒ}|j }|D]0}t j   |¡sŒ|t jt jfkr®qŒt j  ||¡}qŒ|rÊ|d7}|S)Nú?r rú#rrËrÌ)r*r(r·rµr¶rÓrÔÚ posixpathÚnormpathÚfilterr r¡r2ÚdirnameÚcurdirÚpardirro)rr2Ztrailing_slashr=Zwordrrrr³:s$    z'SimpleHTTPRequestHandler.translate_pathcCst ||¡dSrt)ÚshutilZ copyfileobj)rÚsourceZ outputfilerrrr©Xsz!SimpleHTTPRequestHandler.copyfilecCsLt |¡\}}||jkr"|j|S| ¡}||jkr>|j|S|jdSdS)Nr)râÚsplitextÚextensions_mapr:)rr2ÚbaseZextrrrrºhs    z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz text/plain)rú.pyz.cz.h)rrrr•r…r¤r¬r­r¨r¹r³r©rºÚ mimetypesZinitedZinitZ types_mapÚcopyrëÚupdateÚ __classcell__rrr¦rr…s$  W: üc 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*Úpoprjro) r2Ú_ÚqueryÚ path_partsZ head_partsÚpartZ tail_partZ splitpathÚcollapsed_pathrrrÚ_url_collapse_path�s.      rùcCsrtrtSz ddl}Wntk r*YdSXz| d¡daWn.tk rldtdd„| ¡DƒƒaYnXtS)NrrÚnobodyr r css|]}|dVqdS)r Nr)rwrŒrrrÚ Ësznobody_uid..)rúÚpwdÚ ImportErrorÚgetpwnamrYÚmaxZgetpwall)rürrrÚ nobody_uid¿s  rcCst |tj¡Srt)r¡ÚaccessÚX_OK)r2rrrÚ 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_cgir0rrFrCrrrÚdo_POSTås  þzCGIHTTPRequestHandler.do_POSTcCs| ¡r| ¡St |¡SdSrt)rrrr¨rCrrrr¨ószCGIHTTPRequestHandler.send_headcCsPt|jƒ}| dd¡}|d|…||dd…}}||jkrL||f|_dSdS)Nrr TF)rùr2ÚfindÚcgi_directoriesÚcgi_info)rrøZdir_sepÚheadÚtailrrrrús    zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|ƒSrt)r)rr2rrrÚ is_executablesz#CGIHTTPRequestHandler.is_executablecCstj |¡\}}| ¡dkS)N)ríz.pyw)r¡r2rêr:)rr2r r rrrÚ is_pythonszCGIHTTPRequestHandler.is_pythonc) Cs¦|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| | ¡} |j�sF| �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|ƒdk�r¸ddl"}ddl#}|d|d<|d $¡dk�r¸z"|d %d¡}| &|¡ 'd¡}Wn|j(t)fk �r’Yn&X| !d¡}t|ƒdk�r¸|d|d<|j  d¡dk�rÚ|j *¡|d<n|jd|d<|j  d¡}|�r||d<|j  d ¡}|�r||d!<g}|j +d"¡D]>}|dd…d#k�rR| ,| -¡¡n||d$d… !d%¡}�q,d% .|¡|d&<|j  d'¡}|�r”||d(<t/d|j 0d)g¡ƒ}d* .|¡}|�rÀ||d+<d,D]}| 1|d¡�qÄ| 2t j3d-¡| 4¡|  5d.d/¡}|j�r| g}d0|k�r| ,|¡t6ƒ}|j7 8¡t 9¡}|dk�r”t :|d¡\}}t; ;|jd1|¡dSz\zt ?|¡Wnt@k �rºYnXt A|j< B¡d¡t A|j7 B¡d¡t C| ||¡Wn(|j D|jE|j¡t Fd2¡YnX�n„ddlG} | g}!| | ¡�rrtHjI}"|" $¡ Jd3¡�rf|"dd4…|"d5d…}"|"d6g|!}!d0| k�r†|! ,| ¡| Kd7|  L|!¡¡z tM|ƒ}#WntNtOfk �rÂd}#YnX| jP|!| jQ| jQ| jQ|d8�}$|j $¡d9k�r|#dk�r|j< =|#¡}%nd}%t; ;|j|j�q |$ T|%¡\}&}'|j7 U|&¡|'�rj| >d:|'¡|$jV W¡|$jX W¡|$jY}(|(�r˜| >d1|(¡n | Kd;¡dS)Ss¤þ   s 0  þ  ÿ ÿÿýÿü