PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oYҫ @s\dZddddgZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZdZd Zd d ZGd dde jZGd dde jZGdddeZddZdaddZddZGdddeZ eedddddZ!e"dkrXej#Z$e$j%ddddd e$j%d!d"d#dd$d%dd&e$j%d'dd(d#dd)e&d*d+dd,e$j'Z(e(j)r3e Z*neZ*e!d-e*d'e(j+d.e(j,dS)/z0.6 HTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN) HTTPStatusa Error response

Error response

Error code: %(code)d

Message: %(message)s.

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

ztext/html;charset=utf-8cCs(|jddjddjddS)N&z&z>)replace)htmlr %/opt/python35/lib/python3.5/server.py _quote_htmlsrc@s"eZdZdZddZdS)rcCsNtjj||jjdd\}}tj||_||_dS)N) socketserver TCPServer server_bindsocket getsocknamegetfqdn server_name server_port)selfhostportr r r rszHTTPServer.server_bindN)__name__ __module__ __qualname__Zallow_reuse_addressrr r r r rs c @seZdZdejjdZdeZe Z e Z dZ ddZddZd d Zd d Zd d ddZd ddZd ddZddZddZddZddddZddZdd Zd!d"Zd d#d$Zd%d&Zd'd(d)d*d+d,d-gZd d.d/d0d1d2d3d4d5d6d7d8d9g Zd:d;Z d<Z!e"j#j$Z%d=d>e&j'j(DZ)d S)?rzPython/rz BaseHTTP/zHTTP/0.9c Csyd|_|j|_}d|_t|jd}|jd}||_|j}t |dkr|\}}}|dddkr|j t j d|dSya|jd d d }|jd }t |d krt t|d t|d f}Wn3t tfk r@|j t j d|dSYnX|dkre|jdkred|_|dkr|j t jd|dSnvt |d kr|\}}d|_|dkr|j t j d|dSn%|sdS|j t j d|dS||||_|_|_y%tjj|jd|j|_Wnytjjk rx|j t j ddSYnKtjjk r}z%|j t jdt|dSWYdd}~XnX|jjdd} | jdkrd|_n*| jdkr |jdkr d|_|jjdd} | jdkru|jdkru|jdkru|jsudSdS)NTz iso-8859-1z zHTTP/zBad request version (%r)F/r.rrzHTTP/1.1zInvalid HTTP Version (%s)GETzBad HTTP/0.9 request type (%r)zBad request syntax (%r)Z_classz Line too longzToo many headers Connectionclosez keep-aliveZExpectz 100-continue)rr)rr)commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstrip requestlinesplitlen send_errorrZ BAD_REQUEST ValueErrorint IndexErrorprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDpathhttpclientZ parse_headersrfile MessageClassheadersZ LineTooLongZ HTTPExceptionZREQUEST_HEADER_FIELDS_TOO_LARGEgetlowerhandle_expect_100) rversionr.wordsr'r6Zbase_version_numberZversion_numbererrZconntypeexpectr r r parse_request s     $              z$BaseHTTPRequestHandler.parse_requestcCs|jtj|jdS)NT)send_response_onlyrZCONTINUE end_headers)rr r r r>ks z(BaseHTTPRequestHandler.handle_expect_100cCs,y|jjd|_t|jdkr\d|_d|_d|_|jtj dS|jsrd|_ dS|j sdSd|j}t ||s|jtj d|jdSt||}||jjWnEtjk r'}z"|jd|d|_ dSWYdd}~XnXdS)Niir%TZdo_zUnsupported method (%r)zRequest timed out: %r)r9readliner,r0r.r)r'r1rZREQUEST_URI_TOO_LONGr*rChasattrNOT_IMPLEMENTEDgetattrwfileflushrtimeout log_error)rZmnamemethoder r r handle_one_request}s4        z)BaseHTTPRequestHandler.handle_one_requestcCs1d|_|jx|js,|jqWdS)NT)r*rP)rr r r handles   zBaseHTTPRequestHandler.handleNcCs^y|j|\}}Wntk r7d\}}YnX|dkrJ|}|dkr\|}|jd|||j|||jddd}|dkr+|tjtjtjfkr+|j d|dt |dt |i}|j d d }|jd |j |jd t t||j|jd krZ|rZ|jj|dS)N???zcode %d, message %sr$r&codemessageexplainzUTF-8r z Content-TypezContent-LengthZHEAD)rRrR) responsesKeyErrorrM send_response send_headerrZ NO_CONTENTZ RESET_CONTENTZ NOT_MODIFIEDerror_message_formatrencodeerror_content_typer3r0rEr'rJwrite)rrTrUrVZshortmsgZlongmsgZbodyZcontentr r r r1s4       z!BaseHTTPRequestHandler.send_errorcCsM|j||j|||jd|j|jd|jdS)NZServerZDate) log_requestrDrZversion_stringdate_time_string)rrTrUr r r rYs z$BaseHTTPRequestHandler.send_responsecCs|dkr5||jkr/|j|d}nd}|jdkrt|ds\g|_|jjd|j||fjdddS)Nrr%zHTTP/0.9_headers_bufferz %s %d %s zlatin-1strict)rWr)rGrbappendr5r\)rrTrUr r r rDs   z)BaseHTTPRequestHandler.send_response_onlycCs|jdkrMt|ds'g|_|jjd||fjdd|jdkr|jdkr}d|_n|jd krd |_dS) NzHTTP/0.9rbz%s: %s zlatin-1rc connectionr&Tz keep-aliveF)r)rGrbrdr\r=r*)rkeywordvaluer r r rZs   z"BaseHTTPRequestHandler.send_headercCs-|jdkr)|jjd|jdS)NzHTTP/0.9s )r)rbrd flush_headers)rr r r rEsz"BaseHTTPRequestHandler.end_headerscCs8t|dr4|jjdj|jg|_dS)Nrb)rGrJr^joinrb)rr r r rhsz$BaseHTTPRequestHandler.flush_headers-cCsAt|tr|j}|jd|jt|t|dS)Nz "%s" %s %s) isinstancerrg log_messager.r+)rrTsizer r r r_s  z"BaseHTTPRequestHandler.log_requestcGs|j||dS)N)rm)rformatargsr r r rMs z BaseHTTPRequestHandler.log_errorcGs1tjjd|j|j||fdS)Nz%s - - [%s] %s )sysstderrr^address_stringlog_date_time_string)rrorpr r r rm,s   z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_version)rr r r r`Bsz%BaseHTTPRequestHandler.version_stringc Css|dkrtj}tj|\ }}}}}}}} } d|j|||j|||||f} | S)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtime weekdayname monthname) rZ timestampyearmonthdayhhmmssZwdyzsr r r raFs  * z'BaseHTTPRequestHandler.date_time_stringc Cs]tj}tj|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)rx localtimer{) rZnowr|r}r~rrrxrrrr r r rtQs  * z+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS)Nr)client_address)rr r r rs_sz%BaseHTTPRequestHandler.address_stringzHTTP/1.0cCs%i|]}|j|jf|qSr )phrase description).0vr r r ns z!BaseHTTPRequestHandler.)*rrrrqr?r/rw __version__rvDEFAULT_ERROR_MESSAGEr[DEFAULT_ERROR_CONTENT_TYPEr]r(rCr>rPrQr1rYrDrZrErhr_rMrmr`rartrzr{rsr5r7r8Z HTTPMessager:r __members__valuesrWr r r r rs< i  b  % 5           c @seZdZdeZddZddZddZdd Zd d Z d d Z ddZ e j s}e je jjZejddddddddidS)rz SimpleHTTP/c Cs;|j}|r7z|j||jWd|jXdS)N) send_headcopyfilerJr&)rfr r r do_GETs  zSimpleHTTPRequestHandler.do_GETcCs |j}|r|jdS)N)rr&)rrr r r do_HEADs z SimpleHTTPRequestHandler.do_HEADc Cs|j|j}d}tjj|r tjj|j}|jjds|jt j |d|d|dd|d|df}tjj |}|j d||j dSxIdD]4}tjj||}tjj|r|}PqW|j|S|j|}yt|d }Wn)tk rW|jt jd dSYnXy}|jt j|j d |tj|j}|j d t|d|j d|j|j|j |SWn|jYnXdS)Nr!rrrrZLocation index.html index.htmrbzFile not foundz Content-typezContent-Lengthz Last-Modified)rr)translate_pathr6osisdirurllibparseZurlsplitendswithrYrZMOVED_PERMANENTLYZ urlunsplitrZrErjexistslist_directory guess_typeopenOSErrorr1 NOT_FOUNDOKfstatfilenor+rast_mtimer&) rr6rpartsZ new_partsZnew_urlindexZctypefsr r r rsF        z"SimpleHTTPRequestHandler.send_headc Cs`ytj|}Wn)tk r>|jtjddSYnX|jdddg}ytjj |j dd}Wn$t k rtjj |}YnXt j |}tj}d|}|jd|jd |jd ||jd ||jd ||jd x|D]}tj j||}|} } tj j|rr|d} |d} tj j|r|d} |jdtjj| ddt j | fq'W|jddj|j|d} tj} | j| | jd|jtj|jdd||jdtt| |j| S)NzNo permission to list directorykeycSs |jS)N)r=)ar r r sz9SimpleHTTPRequestHandler.list_directory..errors surrogatepasszDirectory listing for %szZz z@z%s z

%s

z
    r!@z
  • %s
  • z

 surrogateescaperz Content-typeztext/html; charset=%szContent-Length) rlistdirrr1rrsortrrunquoter6UnicodeDecodeErrorr escaperqgetfilesystemencodingrdrjrislinkquoter\ioBytesIOr^seekrYrrZr+r0rE) rr6listrZ displaypathenctitlenamefullnameZ displaynameZlinknameencodedrr r r rs\                     z'SimpleHTTPRequestHandler.list_directoryc Cs$|jddd}|jddd}|jjd}ytjj|dd}Wn$tk rtjj|}YnXtj|}|jd}t d|}t j }xP|D]H}t j j |s|t jt jfkrqt j j||}qW|r |d7}|S)N?rr#r!rr)r/r-rrrrr posixpathnormpathfilterrgetcwdr6dirnamecurdirpardirrj)rr6Ztrailing_slashr@Zwordr r r rs$    * z'SimpleHTTPRequestHandler.translate_pathcCstj||dS)N)shutil copyfileobj)rsourceZ outputfiler r r rsz!SimpleHTTPRequestHandler.copyfilecCsdtj|\}}||jkr/|j|S|j}||jkrU|j|S|jdSdS)Nr%)rsplitextextensions_mapr=)rr6baseextr r r r+s   z#SimpleHTTPRequestHandler.guess_typer%zapplication/octet-streamz.pyz text/plainz.cz.hN)rrrrrvrrrrrrr mimetypesZinitedZinitZ types_mapcopyrupdater r r r rts   1 :     c Cs+|jd\}}}tjj|}|jd}g}xP|ddD]>}|dkro|jqP|rP|dkrP|j|qPW|r|j}|r|dkr|jd}q|dkrd}nd}|rdj||f}ddj||f}dj|}|S)Nrr!rz..r"r%) partitionrrrr/poprdrj) r6_query path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathr r r _url_collapse_pathPs.        rcCstr tSyddl}Wntk r2dSYnXy|jddaWn5tk rdtdd|jDaYnXtS)Nrrnobodyrcss|]}|dVqdS)rNr )rrr r r sznobody_uid..r)rpwd ImportErrorgetpwnamrXmaxgetpwall)rr r r nobody_uids   (rcCstj|tjS)N)raccessX_OK)r6r r r executablesrc@syeZdZeedZdZddZddZddZ d d gZ d d Z d dZ ddZ dS)rforkrcCs0|jr|jn|jtjddS)NzCan only POST to CGI scripts)is_cgirun_cgir1rrH)rr r r do_POSTs   zCGIHTTPRequestHandler.do_POSTcCs'|jr|jStj|SdS)N)rrrr)rr r r rs  zCGIHTTPRequestHandler.send_headcCslt|j}|jdd}|d|||dd}}||jkrh||f|_dSdS)Nr!rTF)rr6findcgi_directoriescgi_info)rrZdir_sepheadtailr r r rs%zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCs t|S)N)r)rr6r r r is_executablesz#CGIHTTPRequestHandler.is_executablecCs(tjj|\}}|jdkS)N.py.pyw)rr)rr6rr=)rr6rrr r r is_pythonszCGIHTTPRequestHandler.is_pythonc)Cs|j\}}|d|}|jdt|d}x|dkr|d|}||dd}|j|}tjj|r||}}|jdt|d}q<Pq<W|jd\}}} |jd}|dkr|d|||d} }n |d} }|d| } |j| } tjj| sl|j t j d| dStjj | s|j t j d| dS|j| } |js| r|j| s|j t j d| dStjtj}|j|d <|jj|d d1|dSyoytj?|Wnt@k r6YnXtjA|j<jBdtjA|j7jBdtjC| ||Wq|jjD|jE|jtjFd2YqXnddlG} | g}!|j| r!tHjI}"|"j$jJd3r|"dd@|"dAd}"|"d6g|!}!d0| kr:|!j,| |jKd7| jL|!ytM|}#WntNtOfk rd}#YnX| jP|!d8| jQd9| jQd:| jQd;|}$|jj$d<kr|#dkr|j<j=|#}%nd}%x?t;j;|j<jRgggddr1|j<jRjSdsPqW|$jT|%\}&}'|j7jU|&|'rm|j>d=|'|$jVjW|$jXjW|$jY}(|(r|j>d1|(n |jKd>dS)BNr!rrrr%zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZ SERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZ SERVER_PORTZREQUEST_METHODZ PATH_INFOZPATH_TRANSLATEDZ SCRIPT_NAME QUERY_STRINGZ REMOTE_ADDR authorizationrZ AUTH_TYPEZbasicascii:Z REMOTE_USERz content-typeZ CONTENT_TYPEzcontent-lengthCONTENT_LENGTHreferer HTTP_REFERERacceptz ,Z HTTP_ACCEPTz user-agentHTTP_USER_AGENTZcookiez, HTTP_COOKIE REMOTE_HOSTzScript output follows+ru=zCGI script exit status %#xzw.exer rz-uz command: %sstdinstdoutrrenvZpostz%szCGI script exited OK)rr rrrr)Zrrr0rrr6rrrr1rrisfileZ FORBIDDENr have_forkrrdeepcopyenvironr`Zserverrr5r+rr'rrrrr;r<r/base64binasciir=r\Z decodebytesdecodeError UnicodeErrorZget_content_typeZgetallmatchingheadersrdstriprjrZget_all setdefaultrYrrhr rrJrKrwaitpidselectr9readrMsetuidrdup2rexecveZ handle_errorZrequest_exit subprocessrqrrrm list2cmdliner3 TypeErrorr2PopenPIPE_sockrecv communicater^rrr&r returncode))rdirrestr6iZnextdirZnextrestZ scriptdirrrZscriptZ scriptnameZ scriptfileZispyrZuqrestrrrlengthrrlineZuacoZ cookie_strkZ decoded_queryrprpidstsr$ZcmdlineZinterpnbytespdatarrrstatusr r r rs4  $              !            %            !(   zCGIHTTPRequestHandler.run_cgiN)rrrrGrrZrbufsizerrrrrrrr r r r rs       zHTTP/1.0i@r%c Cs||f}||_|||}|jj}td|dd|ddy|jWn3tk rtd|jtjdYnXdS)NzServing HTTP onrrrz...z& Keyboard interrupt received, exiting.) r5rrprintZ serve_foreverKeyboardInterruptZ server_closerqexit) HandlerClassZ ServerClassprotocolrbindZserver_addressZhttpdsar r r tests     rA__main__z--cgiaction store_truehelpzRun as CGI Serverz--bindz-bdefaultmetavarZADDRESSz8Specify alternate bind address [default: all interfaces]rstoretypenargsrz&Specify alternate port [default: 8000]r=r?)-r__all__r Z http.clientr7rrrrrrrrrqrxZ urllib.parserrargparserrrrrrZStreamRequestHandlerrrrrrrrrArArgumentParserparser add_argumentr3 parse_argsrpZcgiZ handler_classrr?r r r r Ss`                   0