U ¡ê,a–¸ã@sþdZdddddgZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZdd 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)dkrú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, 0¡Z1e1j2rÈe&Z3nee!e1j4d0Z3Gd1d2„d2eƒZ5e(e3e5e1j6e1j7d3dS)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ú0/opt/alt/python38/lib64/python3.8/http/server.pyr ˆs  zHTTPServer.server_bindN)Ú__name__Ú __module__Ú __qualname__Zallow_reuse_addressr rrrrr„sc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsc @seZdZdej ¡dZdeZe Z e Z dZ dd„Zdd„Zd d „Zd d „Zd?dd„Zd@dd„ZdAdd„Zdd„Zdd„Zdd„ZdBdd„Zdd„Zdd „Zd!d"„ZdCd#d$„Zd%d&„Zd'd(d)d*d+d,d-gZd d.d/d0d1d2d3d4d5d6d7d8d9g Zd:d;„Z d„e&j' (¡DƒZ)d S)DrzPython/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|||_|_ztjj|j|jd|_Wn‚tjjk r}z| tjdt|ƒ¡WY¢dSd}~XYnBtjjk rH}z| tjdt|ƒ¡WY¢dSd}~XYnX|j dd¡} |  ¡dkrnd|_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_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Ú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_request s¨        þ þþ þ ÿ ýýÿÿþ z$BaseHTTPRequestHandler.parse_requestcCs| tj¡| ¡dS©NT)Úsend_response_onlyrZCONTINUEÚ end_headers©rrrrr:ps 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)r5Ú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%rLrBrrrÚ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)ú???rNzcode %d, message %srr éÈF©Úquote)ÚcodeÚmessageÚexplainzUTF-8Úreplacez Content-TypeúContent-LengthZHEAD)Ú responsesÚKeyErrorrIÚ send_responseÚ send_headerrZ NO_CONTENTZ RESET_CONTENTÚ NOT_MODIFIEDÚerror_message_formatÚhtmlÚescapeÚencodeÚerror_content_typer&r+rAr"rGÚwrite)rrRrSrTZshortmsgZlongmsgZbodyZcontentrrrr0¯s:  þÿ  ý z!BaseHTTPRequestHandler.send_errorcCs:| |¡| ||¡| d| ¡¡| d| ¡¡dS)NZServerZDate)Ú log_requestr@rZÚversion_stringÚdate_time_string©rrRrSrrrrYä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$rWrDrfÚappendr1r_rerrrr@ñs    ÿþz)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dƒsg|_|j d||f dd¡¡| ¡dkrh| ¡dkrVd|_n| ¡d krhd |_dS) Nrrfz%s: %s rgrhZ connectionr Tr!F)r$rDrfrir_r9r%)rÚkeywordÚvaluerrrrZÿs  ÿ   z"BaseHTTPRequestHandler.send_headercCs"|jdkr|j d¡| ¡dS)Nrs )r$rfriÚ flush_headersrBrrrrA s  z"BaseHTTPRequestHandler.end_headerscCs(t|dƒr$|j d |j¡¡g|_dS)Nrfó)rDrGraÚjoinrfrBrrrrls z$BaseHTTPRequestHandler.flush_headersú-cCs.t|tƒr|j}| d|jt|ƒt|ƒ¡dS)Nz "%s" %s %s)Ú isinstancerrkÚ log_messager)r&)rrRÚsizerrrrbs ÿz"BaseHTTPRequestHandler.log_requestcGs|j|f|žŽdS©N)rq©rÚformatÚargsrrrrI#s z BaseHTTPRequestHandler.log_errorcGs&tj d| ¡| ¡||f¡dS)Nz%s - - [%s] %s )ÚsysÚstderrraÚaddress_stringÚlog_date_time_stringrtrrrrq1s þÿz"BaseHTTPRequestHandler.log_messagecCs|jd|jS)Nú )Úserver_versionÚ sys_versionrBrrrrcGsz%BaseHTTPRequestHandler.version_stringcCs |dkrt ¡}tjj|ddS)NT)Zusegmt)ÚtimeÚemailÚutilsZ formatdate)rZ timestamprrrrdKsz'BaseHTTPRequestHandler.date_time_stringc CsBt ¡}t |¡\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r~Ú localtimeÚ monthname) rZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsrrrrzQsÿz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS©Nr)Úclient_addressrBrrrry_sz%BaseHTTPRequestHandler.address_stringúHTTP/1.0cCsi|]}||j|jf“qSr)ÚphraseZ description)Ú.0ÚvrrrÚ nsÿz!BaseHTTPRequestHandler.)NN)N)N)roro)N)*rrrrwr;r*r}Ú __version__r|ÚDEFAULT_ERROR_MESSAGEr\ÚDEFAULT_ERROR_CONTENT_TYPEr`r#r>r:rLrMr0rYr@rZrArlrbrIrqrcrdrzZ weekdaynamer‚ryr1r3r4Z HTTPMessager6rÚ __members__ÚvaluesrWrrrrr”sTic% 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||ŽdSrs)ÚosÚgetcwdr”ÚsuperÚ__init__)rr”rvÚkwargs©Ú __class__rrr˜ƒsz!SimpleHTTPRequestHandler.__init__cCs.| ¡}|r*z| ||j¡W5| ¡XdSrs)Ú send_headr ÚcopyfilerG©rÚfrrrÚdo_GET‰s zSimpleHTTPRequestHandler.do_GETcCs| ¡}|r| ¡dSrs)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-typerVéz Last-Modified),Útranslate_pathr2r•ÚisdirÚurllibÚparseZurlsplitÚendswithrYrZMOVED_PERMANENTLYZ urlunsplitrZrArnÚexistsÚlist_directoryÚ guess_typer0Ú NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor7rr€Zparsedate_to_datetimeÚ TypeErrorr/Ú OverflowErrorr-r¤rUÚdatetimeÚtimezoneZutcZ fromtimestampÚst_mtimer[r ÚOKr&rd) 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  |¡}YnXt j |dd}t ¡}d |}| d ¡| d ¡| d |¡| d |¡| d|¡| d¡|D]v}tj  ||¡}|} } tj  |¡r"|d} |d} tj  |¡r8|d} | dtjj| ddt j | ddf¡qê| d¡d |¡ |d¡} t ¡} |  | ¡|  d¡| tj¡| dd|¡| dtt| ƒƒ¡| ¡| S)NzNo permission to list directorycSs| ¡Srs)r9)ÚarrrÚþrmz9SimpleHTTPRequestHandler.list_directory..)ÚkeyÚ surrogatepass©ÚerrorsFrPzDirectory listing for %szZz z@z%s z

%s

z
    rú@z
  • %s
  • z

Ú Úsurrogateescaperr¥ztext/html; charset=%srV) r•Úlistdirr±r0rr¯Úsortr©rªÚunquoter2ÚUnicodeDecodeErrorr]r^rwÚgetfilesystemencodingrirnr¨ÚislinkrQr_ÚioÚBytesIOraÚseekrYr¹rZr&r+rA) 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Úpardirrn)rr2Ztrailing_slashr<Zwordrrrr§)s$    z'SimpleHTTPRequestHandler.translate_pathcCst ||¡dSrs)ÚshutilZ copyfileobj)rÚsourceZ outputfilerrrrGsz!SimpleHTTPRequestHandler.copyfilecCsLt |¡\}}||jkr"|j|S| ¡}||jkr>|j|S|jdSdS)Nr)rÖÚsplitextÚextensions_mapr9)rr2ÚbaseZextrrrr®Ws    z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz text/plain)rú.pyz.cz.h)rrrrŽr|r˜r r¡rœr­r§rr®Ú mimetypesZinitedZinitZ types_mapÚcopyrßÚupdateÚ __classcell__rrršrrts$  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*Úpoprirn) 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)r‹rƒrrrÚ ºsznobody_uid..)rîÚpwdÚ ImportErrorÚgetpwnamrXÚmaxZgetpwall)rðrrrÚ nobody_uid®s  rôcCst |tj¡Srs)r•ÚaccessÚX_OK)r2rrrÚ executable¾sr÷c@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_cgir0rrErBrrrÚdo_POSTÔs  þzCGIHTTPRequestHandler.do_POSTcCs| ¡r| ¡St |¡SdSrs)rùrúrrœrBrrrrœâ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|ƒSrs)r÷)rr2rrrÚ is_executablesz#CGIHTTPRequestHandler.is_executablecCstj |¡\}}| ¡dkS)N)ráz.pyw)r•r2rÞr9)rr2rÿrrrrÚ 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¢þ   c 0  þ  ÿ ÿÿýÿü