
    hJ                         S SK r S SKrS SKrS SKrS SKJr  SSKJrJr  SSK	J
r
JrJrJrJrJrJrJr  SSKJrJrJr  \R,                  " \5      r " S S\5      r " S	 S
\\5      rg)    N)Dict   )ChannelErrorProtocolChannel)JsonDict
JsonObjectget_boolget_enumget_int
get_objectget_strget_strv)SubprocessProtocolSubprocessTransport
WindowSizec                   V    \ rS rSrSrS\R                  S\S\R                  4S jr	Sr
g)	SocketStreamChannel   streamloopoptionsreturnc                   ^ #    SU;   a  SU;   a
  [        SSS9e SU;   a2  [        US5      nSU 3nUR                  U 4S jU5      I S h  vN u  pVORSU;   aB  [        US5      n[        USS	5      nS
U SU 3nUR	                  U 4S jX5      I S h  vN u  pVO
[        SSS9e[
        R                  SU5        T R                  5         [        U[        R                  5      (       d   eU$  N N\! [         aJ  n	[
        R                  SWU	5        [        U	[        5      (       a  Sn
OSn
[        U
[        U	5      S9U	eS n	A	ff = f7f)Nunixportprotocol-errorz-cannot specify both "port" and "unix" optionsmessagezUnix socket c                     > T $ N selfs   9/usr/lib/python3/dist-packages/cockpit/channels/stream.py<lambda>6SocketStreamChannel.create_transport.<locals>.<lambda>+   s        address	localhostzTCP socket :c                     > T $ r    r!   r"   s   r$   r%   r&   3   s    Dr'   z7no "port" or "unix" or other address option for channelz$SocketStreamChannel: connected to %sz0SocketStreamChannel: connecting to %s failed: %s	not-found
terminated)r   r   create_unix_connectionr   create_connectionloggerdebugOSErrorinfo
isinstanceConnectionRefusedErrorstrclose_on_eofasyncio	Transport)r#   r   r   pathlabel	transport_r   hosterrorproblems   `          r$   create_transport$SocketStreamChannel.create_transport"   sa    W7!2/9hii	G w/&tf-%)%@%@t%TT	1 7"w/w	;?%dV1TF3%)%;%;L$%UU	1"#3+df f LL?G 	)W%6%67777/  U  V  	GKKJESXY%!788%&wE
;F	GsN   E	0C2 C.AC2 C0'C2 ;3E	.C2 0C2 2
E<AEEE	r!   N)__name__
__module____qualname____firstlineno__payloadr8   AbstractEventLoopr   r9   rA   __static_attributes__r!   r'   r$   r   r      s.    G 7+D+D  z  ^e^o^o  r'   r   c                   d    \ rS rSrSrSrSS jrS\4S jrS r	S	\
R                  S
\S\4S jrSrg)SubprocessStreamChannelE   r   ))spawnNr   Nc                 $    U R                  5         g r    )r7   r"   s    r$   process_exited&SubprocessStreamChannel.process_exitedI   s    r'   c                     [        U R                  [        5      (       d   eSU R                  R                  5       0nU R                  R	                  5       nUb  X!S'   U$ )Nzexit-statusr   )r4   
_transportr   get_returncode
get_stderr)r#   argsstderrs      r$   _get_close_args'SubprocessStreamChannel._get_close_argsL   sU    $//+>????')G)G)IJ++-$Or'   c                 f    [        US[        S 5      nUb  U R                  R                  U5        g g )Nwindow)r   r   rR   set_window_size)r#   r   rZ   s      r$   
do_options"SubprocessStreamChannel.do_optionsT   s/    GXz4@OO++F3 r'   r   r   c                 0  #    [        US5      n[        US/ SQS5      n[        USS5      n[        USSS	9n[	        US
[
        S 5      n[        US/ 5      nUS:X  a  [        R                  n	O'US:X  a  [        R                  n	O[        R                  n	[        [        R                  5      n
 U
R                  [        S U 5       5      5         [!        XX6XzXYS9nUR#                  5       nSU0U l        [&        R)                  SX<5        U$ ! [         a    [        SSS9S ef = f! [*         a  n[        S5      UeS nAf[,         a  n[        S5      UeS nAf[.         a1  n[&        R1                  SU[3        U5      5        [        S5      UeS nAff = f7f)NrM   err)outignorer   r   	directory.ptyF)defaultrZ   environr`   ra   c              3   D   #    U  H  oR                  S S5      v   M     g7f)=   N)split).0es     r$   	<genexpr>;SubprocessStreamChannel.create_transport.<locals>.<genexpr>j   s     =WGGCOOWs    r   z+invalid "environ" option for stream channelr   )rd   rZ   envcwdrV   pidzSpawned process args=%s pid=%ir,   zaccess-deniedzFailed to spawn %s: %szinternal-error)r   r
   r   r	   r   r   
subprocessSTDOUTDEVNULLPIPEdictosrf   update
ValueErrorr   r   get_pid_ready_infor0   r1   FileNotFoundErrorPermissionErrorr2   r3   r6   )r#   r   r   rU   r_   rp   rd   rZ   rf   rV   ro   r<   rq   r?   s                 r$   rA   (SubprocessStreamChannel.create_transportY   s}    )w'CYOg{C0wu5GXz4@7Ir2%<&&FH_''F__F"2::.	rJJt=W==>	<+DfcfvI##%C %s|DLL94E  	r/9fgmqq	r ! 	7{+6 	;/U: 	<KK0$E
C/0e;	<sT   B+F.!D <D& FD##F&
F0D<<F	EF",FFF)r{   )r   N)rC   rD   rE   rF   rG   restrictionsrO   r   rW   r\   r8   rH   r   rA   rI   r!   r'   r$   rK   rK   E   sC    G%L 4
!<7+D+D !<z !<^q !<r'   rK   )r8   loggingrw   rr   typingr   channelr   r   jsonutilr   r   r	   r
   r   r   r   r   
transportsr   r   r   	getLoggerrC   r0   r   rK   r!   r'   r$   <module>r      sT   $   	   3 g g g L L			8	$#/ #L5<o/A 5<r'   