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*dkrddl+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¡Z2e2j3rÐe'Z4nee"e2j5d0Z4Gd1d2„d2eƒZ6e)e4e6e2j7e2j8d3dS)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 |ƒdkr&|d}zT|  d¡srt ‚| d d ¡d }| d ¡}t |ƒd krœt ‚t |dƒt |d ƒf}Wn,t t fk râ| tjd |¡YdSX|dkr|jdkrd|_|dkr | tjd|¡dS||_d t |ƒkrBdksZn| tjd|¡dS|dd …\}}t |ƒd kržd|_|dkrž| 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¡} |  ¡dkrŽd|_n |  ¡dkr®|jdkr®d|_|j dd¡} |  ¡dkrð|jdkrð|jdkrð|  ¡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 |ddt j |dddœ}|  d d ¡}| d |j ¡| d tt|ƒƒ¡| ¡|jd kr|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|ddS)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Úsrrrrbsÿ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ƒÚordrrrdrerZ 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 ¡YdSXz"t | ¡¡}d |jkröd |jkröztj |jd ¡} Wnttttfk r|YnzX| j dkrš| j!t"j#j$d } | j t"j#j$kröt"j" %|j&t"j#j$¡} | j!dd} | | krö| 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„dg}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| ddt j | ddf¡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_paths.      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| | ¡} |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)fk r’Yn&X| !d¡}t|ƒdkr¸|d|d<|j  d¡dkrÚ|j *¡|d<n|jd|d<|j  d¡}|r||d<|j  d ¡}|r||d!<g}|j +d"¡D]>}|dd…d#krR| ,| -¡¡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/¡}|jr| g}d0|kr| ,|¡t6ƒ}|j7 8¡t 9¡}|dkr”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¡YnXn„ddlG} | g}!| | ¡rrtHjI}"|" $¡ Jd3¡rf|"dd4…|"d5d…}"|"d6g|!}!d0| kr†|! ,| ¡| Kd7|  L|!¡¡z tM|ƒ}#WntNtOfk rÂd}#YnX| jP|!| jQ| jQ| jQ|d8}$|j $¡d9kr|#dkr|j< =|#¡}%nd}%t; ;|j|jq |$ T|%¡\}&}'|j7 U|&¡|'rj| >d:|'¡|$jV W¡|$jX W¡|$jY}(|(r˜| >d1|(¡n | Kd;¡dS)Ss¤þ   s 0  þ  ÿ ÿÿýÿü