
    2\h_                     x   	 d Z g dZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ dZdZ G d dej                  Z G d	 d
ej        e          Z G d dej                  Z G d de          Zd Z da!d Z"d Z# G d de          Z$d Z%eedddfdZ&e'dk    rddl(Z(ddl)Z) e(j*                    Z+e+,                    ddd           e+,                    dddd !           e+,                    d"d# ej-                    d$%           e+,                    d&d'd(dd)*           e+,                    d+de.d,d-.           e+/                                Z0e0j1        re$Z2neZ2 G d/ d0e          Z3 e&e2e3e0j4        e0j5        e0j6        1           dS dS )2z0.6)
HTTPServerThreadingHTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandler    N)
HTTPStatusaD  <!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c                       e Zd ZdZd ZdS )r      c                     	 t           j                            |            | j        d d         \  }}t	          j        |          | _        || _        d S )N   )socketserver	TCPServerserver_bindserver_addresssocketgetfqdnserver_nameserver_port)selfhostports      5/opt/python-3.11.14/usr/lib/python3.11/http/server.pyr   zHTTPServer.server_bind   sQ    <**4000(!,
d!>$//    N)__name__
__module____qualname__allow_reuse_addressr    r   r   r   r      s)                 r   r   c                       e Zd ZdZdS )r   TN)r   r   r   daemon_threadsr   r   r   r   r      s        NNNr   r   c            
          e Zd Z	 dej                                        d         z   Zdez   Ze	Z
eZdZd Zd Zd Zd Zd"d
Zd#dZd#dZd Zd Zd Zd$dZd Ze                    d  ej         ed           edd                    D                       Zde e d          <   d Z!d Z"d#dZ#d Z$g dZ%g dZ&d Z'd Z(e)j*        j+        Z,d! e-j.        /                                D             Z0d	S )%r   zPython/r   z	BaseHTTP/HTTP/0.9c                    	 d | _         | j        x| _        }d| _        t	          | j        d          }|                    d          }|| _        |                                }t          |          dk    rdS t          |          dk    rp|d         }	 |
                    d          st          |                    d	d
          d
         }|                    d          }t          |          dk    rt          t          d |D                       rt          d          t          d |D                       rt          d          t          |d                   t          |d
                   f}n;# t          t          f$ r' |                     t           j        d|z             Y dS w xY w|dk    r| j        dk    rd| _        |dk    r%|                     t           j        d|z             dS || _        dt          |          cxk    rdk    s'n |                     t           j        d|z             dS |d d         \  }}t          |          dk    r2d| _        |dk    r%|                     t           j        d|z             dS ||c| _         | _        | j        
                    d          r"d	| j                            d	          z   | _        	 t,          j                            | j        | j                  | _        n# t,          j        j        $ r9}|                     t           j        dt	          |                     Y d }~dS d }~wt,          j        j        $ r9}|                     t           j        dt	          |                     Y d }~dS d }~ww xY w| j                            dd          }	|	                                 dk    rd| _        n*|	                                 d k    r| j        dk    rd| _        | j                            d!d          }
|
                                 d"k    r,| j        dk    r!| j        dk    r| !                                sdS dS )#NTz
iso-8859-1
r   F   zHTTP//r
   .r   c              3   @   K   | ]}|                                  V  d S N)isdigit.0	components     r   	<genexpr>z7BaseHTTPRequestHandler.parse_request.<locals>.<genexpr>/  s1      OO99,,...OOOOOOr   znon digit in http versionc              3   <   K   | ]}t          |          d k    V  dS )
   N)lenr,   s     r   r/   z7BaseHTTPRequestHandler.parse_request.<locals>.<genexpr>1  s-      KKys9~~*KKKKKKr   z unreasonable length http versionzBad request version (%r))r
   r
   zHTTP/1.1)r   r   zInvalid HTTP version (%s)zBad request syntax (%r)GETzBad HTTP/0.9 request type (%r)z//)_classzLine too longzToo many headers
Connection close
keep-aliveExpectz100-continue)"commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstriprequestlinesplitr2   
startswith
ValueErroranyint
IndexError
send_errorr   BAD_REQUESTprotocol_versionHTTP_VERSION_NOT_SUPPORTEDpathlstriphttpclientparse_headersrfileMessageClassheadersLineTooLongREQUEST_HEADER_FIELDS_TOO_LARGEHTTPExceptiongetlowerhandle_expect_100)r   versionrA   wordsbase_version_numberversion_numberr:   rL   errconntypeexpects              r   parse_requestz$BaseHTTPRequestHandler.parse_request  s   		 )-)EEw $$.==!((00&!!##u::??5u::??BiG))'22 %$$&-mmC&;&;A&>#!4!:!:3!?!? ~&&!++$$OOOOOOO B$%@AAAKKNKKKKK I$%GHHH!$^A%6!7!7^A=N9O9O!O
+   *.8: : : uu	
 ''D,AZ,O,O(-%''9/2EEG G G u#*D CJJ####!####OO&)K79 9 9 5bqb	u::??$(D!%*4w>@ @ @ u")4di 9%% 	4di..s333DI	;44TZ<@<M 5 O ODLL{& 	 	 	OO:C   55555{( 	 	 	OO:"C  
 55555	 <##L"55>>w&&$(D!!nn,..#z11$)D!!!(B//LLNNn,,%33$
22))++ uts7   C!E7 74F/.F/0L N$ .MN$+.NN$c                 n    	 |                      t          j                   |                                  dS NT)send_response_onlyr   CONTINUEend_headersr   s    r   rY   z(BaseHTTPRequestHandler.handle_expect_100y  s7    	 	
 3444tr   c                    	 	 | j                             d          | _        t          | j                  dk    r6d| _        d| _        d| _        |                     t          j	                   d S | j        s	d| _
        d S |                                 sd S d| j        z   }t          | |          s*|                     t          j        d| j        z             d S t          | |          } |             | j                                         d S # t"          $ r(}|                     d|           d| _
        Y d }~d S d }~ww xY w)Ni  i   r6   Tdo_zUnsupported method (%r)zRequest timed out: %r)rQ   readliner?   r2   rA   r<   r:   rH   r   REQUEST_URI_TOO_LONGr=   ra   hasattrNOT_IMPLEMENTEDgetattrwfileflushTimeoutError	log_error)r   mnamemethodes       r   handle_one_requestz)BaseHTTPRequestHandler.handle_one_request  sd   		#':#6#6u#=#=D 4'((500#% ')$!
 ?@@@' (,%%%'' DL(E4'' .-<> > > T5))FFHHHJ 	 	 	NN2A666$(D!FFFFF		s1   A+D 0D  D AD 3D 
ED<<Ec                     	 d| _         |                                  | j         s|                                  | j         d S d S rc   )r=   rv   rg   s    r   handlezBaseHTTPRequestHandler.handle  s]    4 $!!!' 	&##%%% ' 	& 	& 	& 	& 	&r   Nc                    	 	 | j         |         \  }}n# t          $ r d\  }}Y nw xY w||}||}|                     d||           |                     ||           |                     dd           d }|dk    r|t
          j        t
          j        t
          j        fvr| j	        |t          j        |d          t          j        |d          dz  }|                    d	d
          }|                     d| j                   |                     dt          t          |                               |                                  | j        dk    r|r| j                            |           d S d S d S )N)???rz   zcode %d, message %sr5   r7      Fquote)codemessageexplainzUTF-8replacezContent-TypeContent-LengthHEAD)	responsesKeyErrorrr   send_responsesend_headerr   
NO_CONTENTRESET_CONTENTNOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer>   r2   rf   r:   ro   write)r   r~   r   r   shortmsglongmsgbodycontents           r   rH   z!BaseHTTPRequestHandler.send_error  s   	"	- $t 4Hgg 	- 	- 	- ,Hggg	-?G?G,dG<<<4)))w///
 CKK.#1#02 2 2
 0;we<<<;we<<<4 4 G
 >>'955D^T-DEEE-s3t99~~>>><6!!d!JT""""" "!!!s    &&c                     	 |                      |           |                     ||           |                     d|                                            |                     d|                                            d S )NServerDate)log_requestrd   r   version_stringdate_time_stringr   r~   r   s      r   r   z$BaseHTTPRequestHandler.send_response  s}    	 	g...4#6#6#8#8999!6!6!8!899999r   c                    	 | j         dk    rs||| j        v r| j        |         d         }nd}t          | d          sg | _        | j                            d| j        ||fz                      dd                     d S d S )Nr"   r   r6   _headers_bufferz
%s %d %s
latin-1strict)r<   r   rl   r   appendrJ   r   r   s      r   rd   z)BaseHTTPRequestHandler.send_response_only  s    ,:--4>))"nT215GG G4!233 *')$ ''*D':*;<BF!8=- =-. . . . . .-r   c                 l   	 | j         dk    rKt          | d          sg | _        | j                            |d|d                    dd                     |                                dk    rB|                                dk    r	d	| _        d S |                                d
k    rd| _        d S d S d S )Nr"   r   z: r$   r   r   
connectionr7   Tr8   F)r<   rl   r   r   r   rX   r=   )r   keywordvalues      r   r   z"BaseHTTPRequestHandler.send_header  s    7:--4!233 *')$ ''!(%%%088HMMO O O ==??l**{{}}''(,%%%,..(-%%%	 +* /.r   c                 ~    	 | j         dk    r0| j                            d           |                                  d S d S )Nr"   s   
)r<   r   r   flush_headersrg   s    r   rf   z"BaseHTTPRequestHandler.end_headers  sJ    ::-- ''000      .-r   c                     t          | d          r;| j                            d                    | j                             g | _        d S d S )Nr   r   )rl   ro   r   joinr   rg   s    r   r   z$BaseHTTPRequestHandler.flush_headers  sR    4*++ 	&JSXXd&:;;<<<#%D   	& 	&r   -c                     	 t          |t                    r|j        }|                     d| j        t          |          t          |                     d S )Nz
"%s" %s %s)
isinstancer   r   log_messagerA   r>   )r   r~   sizes      r   r   z"BaseHTTPRequestHandler.log_request!  sa    	
 dJ'' 	:D)3t99c$ii	A 	A 	A 	A 	Ar   c                 $    	  | j         |g|R   d S r*   )r   )r   formatargss      r   rr   z BaseHTTPRequestHandler.log_error,  s*    		 	'$''''''r   c                     i | ]	}|d |d
S )z\x02xr   )r-   cs     r   
<dictcomp>z!BaseHTTPRequestHandler.<dictcomp><  s"    VVV!QaVVVr             z\\\c           	          	 ||z  }t           j                            |                                 d|                                 d|                    | j                  d           d S )Nz - - [z] 
)sysstderrr   address_stringlog_date_time_string	translate_control_char_table)r   r   r   r   s       r   r   z"BaseHTTPRequestHandler.log_message?  s    	& 4-
--////335555!++D,DEEEEG 	H 	H 	H 	H 	Hr   c                 (    	 | j         dz   | j        z   S )N )server_versionsys_versionrg   s    r   r   z%BaseHTTPRequestHandler.version_stringY  s    8"S(4+;;;r   c                 p    	 |t          j                     }t          j                            |d          S )NT)usegmt)timeemailutils
formatdate)r   	timestamps     r   r   z'BaseHTTPRequestHandler.date_time_string]  s1    N	I{%%i%===r   c           	          	 t          j                     }t          j        |          \	  }}}}}}}}	}
d|| j        |         ||||fz  }|S )Nz%02d/%3s/%04d %02d:%02d:%02d)r   	localtime	monthname)r   nowyearmonthdayhhmmssxyzss               r   r   z+BaseHTTPRequestHandler.log_date_time_stringc  sZ    <ikk04s0C0C-eS"b"aA*T^E*D"b".> >r   )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc                     	 | j         d         S Nr   )client_addressrg   s    r   r   z%BaseHTTPRequestHandler.address_stringq  s    ("1%%r   HTTP/1.0c                 ,    i | ]}||j         |j        fS r   )phrasedescription)r-   vs     r   r   z!BaseHTTPRequestHandler.<dictcomp>  s3        	
AHam$  r   )NNr*   )r   r   )1r   r   r   r   rZ   rB   r   __version__r   DEFAULT_ERROR_MESSAGEr   DEFAULT_ERROR_CONTENT_TYPEr   r;   ra   rY   rv   rx   rH   r   rd   r   rf   r   r   rr   r>   	maketrans	itertoolschainranger   ordr   r   r   r   weekdaynamer   r   rJ   rN   rO   HTTPMessagerR   r   __members__valuesr   r   r   r   r   r      s7       dN ck//11!44K
 !;.N03 )l l l\  $# # #J& & &3# 3# 3# 3#j: : : :. . . .. . .! ! !& & &
	A 	A 	A 	A( ( ( --VVyuuT{{EE$tDTDT'U'UVVVX X%*D		"H H H4< < <> > > >   DCCK; ; ;I& & & " ;*L '..00  IIIr   r   c                   l     e Zd Z	 dez   ZdddddxZZdd fd	
Zd
 Zd Z	d Z
d Zd Zd Zd Z xZS )r   zSimpleHTTP/zapplication/gzipapplication/octet-streamzapplication/x-bzip2zapplication/x-xz)z.gzz.Zz.bz2z.xzN	directoryc                    |t          j                    }t          j        |          | _         t	                      j        |i | d S r*   )osgetcwdfspathr  super__init__)r   r  r   kwargs	__class__s       r   r
  z!SimpleHTTPRequestHandler.__init__  sG    	I9--$)&)))))r   c                     	 |                                  }|rK	 |                     || j                   |                                 d S # |                                 w xY wd S r*   )	send_headcopyfilero   r7   r   fs     r   do_GETzSimpleHTTPRequestHandler.do_GET  sd    "NN 	a,,,											 	s   A
 
A c                 `    	 |                                  }|r|                                 d S d S r*   )r  r7   r  s     r   do_HEADz SimpleHTTPRequestHandler.do_HEAD  s7    #NN 	GGIIIII	 	r   c                 f   	 |                      | j                  }d }t          j                            |          rCt          j                            | j                  }|j                            d          s|                     t          j
                   |d         |d         |d         dz   |d         |d         f}t          j                            |          }|                     d|           |                     dd	           |                                  d S d
D ]E}t          j                            ||          }t          j                            |          r|} nF|                     |          S |                     |          }|                    d          r"|                     t          j        d           d S 	 t)          |d          }n1# t*          $ r$ |                     t          j        d           Y d S w xY w	 t          j        |                                          }d| j        v r6d| j        vr,	 t2          j                            | j        d                   }	|	j        %|	                    t<          j        j                   }	|	j        t<          j        j         u rt<          j        !                    |j"        t<          j        j                   }
|
                    d          }
|
|	k    rI|                     t          j#                   |                                  |$                                 d S n## tJ          tL          tN          tP          f$ r Y nw xY w|                     t          j)                   |                     d|           |                     dtU          |d                              |                     d| +                    |j"                             |                                  |S #  |$                                  xY w)Nr'   r   r
   r   r%      Locationr   0)z
index.htmlz	index.htmzFile not foundrbzIf-Modified-SincezIf-None-Match)tzinfo)microsecondContent-type   zLast-Modified),translate_pathrL   r  isdirurllibparseurlsplitendswithr   r   MOVED_PERMANENTLY
urlunsplitr   rf   r   isfilelist_directory
guess_typerH   	NOT_FOUNDopenOSErrorfstatfilenorS   r   r   parsedate_to_datetimer  r   datetimetimezoneutcfromtimestampst_mtimer   r7   	TypeErrorrG   OverflowErrorrD   OKr>   r   )r   rL   r  parts	new_partsnew_urlindexctypefsims
last_modifs              r   r  z"SimpleHTTPRequestHandler.send_head  s   		 ""49--7== 	1L))$)44E:&&s++ 	"":#?@@@"1XuQxqC"1XuQx1	 ,11)<<  W555  !13777  """t2 1 1T5117>>%((  DE **4000%% == 	OOJ02BCCC4	T4  AA 	 	 	OOJ02BCCC44	'	!((**%%B#t|33't|;;(+;;%89; ;C z) "kk1B1FkGGzX%6%:::%-%6%D%DK):)>&@ &@
 &0%7%7A%7%F%F
%,, ..z/FGGG ,,...GGIII#'4' ":}jI   D* z}---^U333-s2a5zz:::_%%bk224 4 4H	GGIIIsJ   G *HH:P *M 6CP P M41P 3M44B$P P0c           
         	 	 t          j        |          }n1# t          $ r$ |                     t          j        d           Y d S w xY w|                    d            g }	 t          j        	                    | j
        d          }n4# t          $ r' t          j        	                    | j
                  }Y nw xY wt          j        |d          }t          j                    }d| }|                    d	           |                    d
           |                    d           |                    d| d           |                    d| d           |                    d| d           |                    d           |D ]}t           j
                            ||          }|x}	}
t           j
                            |          r
|dz   }	|dz   }
t           j
                            |          r|dz   }	|                    dt          j                            |
d          dt          j        |	d          d           |                    d           d                    |                              |d          }t-          j                    }|                    |           |                    d           |                     t          j                   |                     dd|z             |                     dt;          t=          |                               |                                  |S )NzNo permission to list directoryc                 *    |                                  S r*   )rX   )as    r   <lambda>z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>  s    		 r   )keysurrogatepasserrorsFr|   zDirectory listing for z<!DOCTYPE HTML>z<html lang="en">z<head>z<meta charset="z">z<title>z</title>
</head>z<body>
<h1>z</h1>z	<hr>
<ul>r'   @z<li><a href="z	</a></li>z</ul>
<hr>
</body>
</html>
r   surrogateescaper   r  ztext/html; charset=%sr   ) r  listdirr+  rH   r   r)  sortr   r!  unquoterL   UnicodeDecodeErrorr   r   r   getfilesystemencodingr   r   r  islinkr}   r   ioBytesIOr   seekr   r6  r   r>   r2   rf   )r   rL   listrdisplaypathenctitlenamefullnamedisplaynamelinknameencodedr  s                r   r'  z'SimpleHTTPRequestHandler.list_directory  s_   		:d##DD 	 	 	OO$13 3 3 44		
 			))	***	: ,..ty6E / G GKK! 	: 	: 	: ,..ty99KKK	:k+U;;;'))666	"###	#$$$		*3***+++	35333444	,,,,---	 	? 	?Dw||D$//H%))K(w}}X&& &"Sj#:w~~h'' )"SjHHH|))(1@ * B B B B{;e<<<<<> ? ? ? ? 	
2333))A,,%%c+<==JLL		q			:=))))@3)FGGG)3s7||+<+<===s!    *AA#&B
 
.B;:B;c                    	 |                     dd          d         }|                     dd          d         }|                                                    d          }	 t          j                            |d          }n/# t          $ r" t          j                            |          }Y nw xY wt          j        |          }|                     d          }t          d |          }| j
        }|D ]\}t          j                            |          s|t          j        t          j        fv r<t          j                            ||          }]|r|dz  }|S )N?r
   r   #r'   rD  rE  )rB   r@   r#  r   r!  rK  rL  	posixpathnormpathfilterr  r  rL   dirnamecurdirpardirr   )r   rL   trailing_slashr[   words        r   r  z'SimpleHTTPRequestHandler.translate_pathA  sF   	 zz#a  #zz#a  #//44	.<''_'EEDD! 	. 	. 	.<''--DDD	.!$''

3tU##~ 	, 	,Dwt$$ BI0F(F(F7<<d++DD 	CKDs   "!B )B0/B0c                 2    	 t          j        ||           d S r*   )shutilcopyfileobj)r   source
outputfiles      r   r  z!SimpleHTTPRequestHandler.copyfile_  s"    	 	6:.....r   c                     	 t          j        |          \  }}|| j        v r| j        |         S |                                }|| j        v r| j        |         S t	          j        |          \  }}|r|S dS )Nr  )r_  splitextextensions_maprX   	mimetypesr(  )r   rL   baseextguess_s         r   r(  z#SimpleHTTPRequestHandler.guess_typeo  s    	 &t,,	c$%%%&s++iikk$%%%&s++'--q 	L))r   )r   r   r   r   r   rn  _encodings_map_defaultr
  r  r  r  r'  r  r  r(  __classcell__r  s   @r   r   r     s        	 #[0N!(%!	/ / N+ )- * * * * * * *    V V Vp7 7 7r  </ / / * * * * * * *r   r   c                 @   	 |                      d          \  } }}t          j                            |           } |                     d          }g }|d d         D ]:}|dk    r|                                 |r|dk    r|                    |           ;|r<|                                }|r%|dk    r|                                 d}n|dk    rd}nd}|rd                    ||f          }dd                    |          z   |f}d                    |          }|S )Nr]  r'   r&   z..r(   r6   )	partitionr   r!  rK  rB   popr   r   )	rL   rs  query
path_parts
head_partspart	tail_part	splitpathcollapsed_paths	            r   _url_collapse_pathr    sJ    ^^C((ND!U<%%D CJJ3B3 & &4<<NN 	&dckkt%%% 	NN$$	 	D     		c!!		 1HHi/00	sxx
+++Y7IXXi((Nr   c                     	 t           rt           S 	 dd l} n# t          $ r Y dS w xY w	 |                     d          d         a n># t          $ r1 dt          d |                                 D                       z   a Y nw xY wt           S )Nr   r&   nobodyr   r
   c              3   &   K   | ]}|d          V  dS )r   Nr   )r-   r   s     r   r/   znobody_uid.<locals>.<genexpr>  s&      66!1666666r   )r  pwdImportErrorgetpwnamr   maxgetpwall)r  s    r   
nobody_uidr    s    . 



   rr7h''* 7 7 7S66s||~~6666667Ms    
$$A 8A?>A?c                 B    	 t          j        | t           j                  S r*   )r  accessX_OK)rL   s    r   
executabler    s    #9T27###r   c                   X    e Zd Z	  eed          ZdZd Zd Zd Z	ddgZ
d Zd	 Zd
 ZdS )r   forkr   c                     	 |                                  r|                                  d S |                     t          j        d           d S )NzCan only POST to CGI scripts)is_cgirun_cgirH   r   rm   rg   s    r   do_POSTzCGIHTTPRequestHandler.do_POST  sS    	 ;;== 	0LLNNNNNOO*.0 0 0 0 0r   c                     	 |                                  r|                                 S t                              |           S r*   )r  r  r   r  rg   s    r   r  zCGIHTTPRequestHandler.send_head  s7    ;;;== 	<<<>>!+55d;;;r   c                 :   	 t          | j                  }|                    dd          }|dk    rA|d |         | j        vr0|                    d|dz             }|dk    r|d |         | j        v0|dk    r"|d |         ||dz   d          }}||f| _        dS dS )Nr'   r
   r   TF)r  rL   findcgi_directoriescgi_info)r   r  dir_sepheadtails        r   r  zCGIHTTPRequestHandler.is_cgi  s    	 ,DI66 %%c1--kk.'":d>R"R"R$))#wqy99G kk.'":d>R"R"RQ;;'1>'!)**3M$D $JDM4ur   z/cgi-binz/htbinc                 "    	 t          |          S r*   )r  )r   rL   s     r   is_executablez#CGIHTTPRequestHandler.is_executable  s    ?$r   c                 t    	 t           j                            |          \  }}|                                dv S )N)z.pyz.pyw)r  rL   rm  rX   )r   rL   r  r  s       r   	is_pythonzCGIHTTPRequestHandler.is_python  s1    <W%%d++
dzz||..r   c                 R   	 | j         \  }}|dz   |z   }|                    dt          |          dz             }|dk    r}|d |         }||dz   d          }|                     |          }t          j                            |          r+||}}|                    dt          |          dz             }nn|dk    }|                    d          \  }}}	|                    d          }|dk    r|d |         ||d          }}
n|d}}
|dz   |
z   }|                     |          }t          j                            |          s%| 	                    t          j        d|z             d S t          j                            |          s%| 	                    t          j        d|z             d S |                     |          }| j        s|s:|                     |          s%| 	                    t          j        d|z             d S t#          j        t          j                  }|                                 |d	<   | j        j        |d
<   d|d<   | j        |d<   t1          | j        j                  |d<   | j        |d<   t6          j                            |          }||d<   |                     |          |d<   ||d<   |	|d<   | j        d         |d<   | j                             d          }|r|!                                }t          |          dk    rdd l"}dd l#}|d         |d<   |d         $                                dk    r	 |d         %                    d          }|&                    |          '                    d          }|!                    d          }t          |          dk    r|d         |d<   n# |j(        tR          f$ r Y nw xY w| j                             d          | j        *                                |d<   n| j        d         |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           | /                    t          j0        d,           | 1                                 |	2                    d-d.          }| j        r|
g}d/|vr|3                    |           ti                      }| j5        6                                 t	          j7                    }|dk    rt	          j8        |d          \  }}ts          j9        | j:        gg g d          d         r>| j:        ;                    d          sn#ts          j9        | j:        gg g d          d         >t	          j<        |          }|r| =                    d0|            d S 	 	 t	          j>        |           n# t~          $ r Y nw xY wt	          j@        | j:        A                                d           t	          j@        | j5        A                                d           t	          jB        |||           d S #  | j        C                    | jD        | j                   t	          jE        d1           Y d S xY wdd lF} |g}!|                     |          rOt          jH        }"|"$                                I                    d2          r|"d d3         |"d4d          z   }"|"d5g|!z   }!d/|	vr|!3                    |	           | J                    d6| K                    |!                     	 t          |          }#n# t          t          f$ r d}#Y nw xY w| O                    |!| jP        | jP        | jP        |7          }$| j        $                                d8k    r!|#dk    r| j:        ;                    |#          }%nd }%ts          j9        | j:        jQ        gg g d          d         rH| j:        jQ        R                    d          sn(ts          j9        | j:        jQ        gg g d          d         H|$S                    |%          \  }&}'| j5        T                    |&           |'r| =                    d9|'           |$jU        V                                 |$jW        V                                 |$jX        }(|(r| =                    d:|(           d S | J                    d;           d S )<Nr'   r
   r   r]  r6   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)SERVER_SOFTWARESERVER_NAMEzCGI/1.1GATEWAY_INTERFACESERVER_PROTOCOLSERVER_PORTREQUEST_METHOD	PATH_INFOPATH_TRANSLATEDSCRIPT_NAMEQUERY_STRINGREMOTE_ADDRauthorizationr   	AUTH_TYPEbasicascii:REMOTE_USERzcontent-typeCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERacceptr   ,HTTP_ACCEPTz
user-agentHTTP_USER_AGENTcookiez, HTTP_COOKIE)r  REMOTE_HOSTr  r  r  r  zScript output follows+r   =zCGI script exit code r   zw.exez-uzcommand: %s)stdinstdoutr   envpostz%szCGI script exit status %#xzCGI script exited OK)Yr  r  r2   r  r  rL   r  rx  existsrH   r   r)  r&  	FORBIDDENr  	have_forkr  copydeepcopyenvironr   serverr   rJ   r>   r   r:   r   r!  rK  r   rS   rW   rB   base64binasciirX   r   decodebytesdecodeErrorUnicodeErrorget_content_typeget_allr   ra  
setdefaultr   r6  r   r   r   r  ro   rp   r  waitpidselectrQ   readwaitstatus_to_exitcoderr   setuidr+  dup2r-  execvehandle_errorrequest_exit
subprocessr   r  r#  r   list2cmdlinerF   r4  rD   PopenPIPE_sockrecvcommunicater   r   r7   r  
returncode))r   dirrestrL   inextdirnextrest	scriptdirrs  rz  script
scriptname
scriptfileispyr  uqrestr  r  r  lengthr  r  uaco
cookie_strkdecoded_queryr   r  pidstsexitcoder  cmdlineinterpnbytespdatar  r   statuss)                                            r   r  zCGIHTTPRequestHandler.run_cgi  s
   #M	TSy4IIc3s88A:&&1ff2A2hGAaCDDzH++G44Iw}}Y'' #XTIIc3s88A:.. 1ff ,,a IIcNN668T!""XDFFDF3Y'
((44
w~~j)) 	OO$)J68 8 8 Fw~~j)) 	OO$5
BD D D F~~j))> 	 	%%j11 (7*DF F F  mBJ''!%!4!4!6!6![4M#, !%!6 !899M $%%d++!K!%!4!4V!<!<'M#N!03M((99 	B)//11M=!!Q&&''''''''#0#3K  #))++w66	B(5a(8(?(?(H(H(.(:(:=(I(I(.w &
 )6(;(;C(@(@}--221>q1AC. %NL9    <N++3"&,"?"?"A"AC"&,~">C!!"233 	+$*C !,""9-- 	*")C%%h33 XXf--M\l++ 	(%'C!"D$,..x<<==YYr]]
 	,!+CD 	" 	"ANN1b!!!!:=*ABBBc3//> I	98D-''M***\\FJ'))Caxx:c1--SmTZL"b!<<Q? :??1--  mTZL"b!<<Q?  4S99 GNN#E8#E#EFFF
If%%%%   D
))++Q///
))++Q///	*dC00000((t7JKKK !lG~~j)) 3<<>>**733 7#CRC[6"##;6F!4.72%u%%%]J,C,CG,L,LMMMVz*     '1(2(2'*	 ! # #A |!!##v--&1**zv..-!1 2BA>>qA z',,Q//  -!1 2BA>>qA  ]]400NFFJV$$$ -tV,,,HNNHNN\F 9;VDDDDD  !788888sP   AO OO/Z \ 
Z\ ZA1\ ;]3` ``N)r   r   r   rl   r  r  rbufsizer  r  r  r  r  r  r  r   r   r   r   r     s         F##I H0 0 0< < <  4 "8,O     / / /
x9 x9 x9 x9 x9r   r   c                      t          j        | t           j        t           j        d}t	          t          |                    \  }}}}}||fS )N)typeflags)r   getaddrinfoSOCK_STREAM
AI_PASSIVEnextiter)addressinfosfamilyr  proto	canonnamesockaddrs          r   _get_best_familyr    sS    	  E
 04DKK/@/@,FD%H8r   r   i@  c                    	 t          ||          \  |_        }|| _         |||           5 }|j                                        d d         \  }}d|v rd| dn|}t          d| d| d| d| d	           	 |                                 n3# t          $ r& t          d	           t          j	        d
           Y nw xY wd d d            d S # 1 swxY w Y   d S )Nr   r  []zServing HTTP on z port z	 (http://z/) ...z&
Keyboard interrupt received, exiting.r   )
r  address_familyrJ   r   getsocknameprintserve_foreverKeyboardInterruptr   exit)	HandlerClassServerClassprotocolr   bindaddrhttpdr   url_hosts	            r   testr"    sw   
 (8d'C'C$K$,L!	T<	(	( E\--//3
d"%++;t;;;;4/t / /4 / // /"&/ / /	
 	
 	
	!!!!  	 	 	;<<<HQKKKKK	                 s6   AC;BC-C =C?C  CCC__main__z--cgi
store_truezrun as CGI server)actionhelpz-bz--bindADDRESSz.bind to this address (default: all interfaces))metavarr&  z-dz--directoryz1serve this directory (default: current directory))defaultr&  z-pz
--protocolVERSIONz3conform to this HTTP version (default: %(default)s))r(  r)  r&  r   r]  z(bind to this port (default: %(default)s))r)  r  nargsr&  c                   $     e Zd Z fdZd Z xZS )DualStackServerc                    t          j        t                    5  | j                            t          j        t          j        d           d d d            n# 1 swxY w Y   t                                                      S r   )	
contextlibsuppress	Exceptionr   
setsockoptIPPROTO_IPV6IPV6_V6ONLYr	  r   )r   r  s    r   r   zDualStackServer.server_bind  s    $Y// @ @&&');Q@ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 77&&(((s   1AAAc                 L    |                      ||| t          j                   d S )Nr  )RequestHandlerClassr   r  )r   r  r   s      r   finish_requestzDualStackServer.finish_request  s4    $$Wnd/3~ % ? ? ? ? ?r   )r   r   r   r   r7  ru  rv  s   @r   r-  r-    sG        	) 	) 	) 	) 	)	? 	? 	? 	? 	? 	? 	?r   r-  )r  r  r   r  r  )7r   __all__r  r/  email.utilsr   r   http.clientrN   rO  r   ro  r  r_  r  rh  r   r   r   r   urllib.parser   r   r   r   r   r   ThreadingMixInr   StreamRequestHandlerr   r   r  r  r  r  r   r  r"  r   argparser/  ArgumentParserparseradd_argumentr  rF   
parse_argsr   cgihandler_classr-  r   r  r  r   r   r   <module>rE     s  d   
            				         				            



              7 	  	  	  	  	 ' 	  	  	     ,5z   q q q q q\> q q qh@* @* @* @* @*5 @* @* @*J, , ,` 
   $ $ $
C9 C9 C9 C9 C94 C9 C9 C9L   -(4d   . zOOO$X$&&F
0  2 2 2
h	9  : : : mYRY[[<  = = = lI *6  7 7 7 3c6  7 7 7 Dx 1-0? ? ? ? ?- ? ? ? 	D"#YY     Q r   