
    h/                     4   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJrJrJrJrJrJrJr  S SKJr  S SKJrJr  SSKJr  SSKJr  SSKJr  SS	KJ r   SS
K!J"r"J#r#  SSK$J%r%  SSK&J'r'J(r(J)r)J*r*  SSK+J,r,J-r-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8  \Rr                  " \:5      r; " S S5      r< " S S\4\.5      r=S%S jr>S r?S\@4S jrAS\@SS4S jrBS\CS\\C\C4   4S jrDS%S jrES S!.S"\@SS4S# jjrF\:S$:X  a  \F" 5         gg)&    N)DictIterableListOptionalSequenceTupleType)interaction_client)bus	run_async   )	polyfills)__version__)ChannelRoutingRule)CHANNEL_TYPES)ConfigEnvironment)EXPORTS)	JsonError
JsonObject	JsonValueget_dict)BridgeConfigPackagesPackagesListener)PeersRoutingRule)HostRoutingRule)Router)SuperuserRoutingRule)StdioTransportc                       \ rS rSr% \\R                     \S'   S\\	\
\\R                     4      4S jrS\
S\R                  SS4S	 jrS
rg)InternalBus4   	exporteesexportsc           	      t   [         R                  " 5       u  p#[        R                  R	                  UR                  5       S9U l        [        R                  R	                  UR                  5       SS9U l        U VVs/ s H%  u  pEU R                  R                  XE" 5       5      PM'     snnU l	        g s  snnf )N)fdT)r'   server)
socket
socketpairr   Busnewdetachclientr(   
add_objectr$   )selfr%   client_socketserver_socketpathclss         0/usr/lib/python3/dist-packages/cockpit/bridge.py__init__InternalBus.__init__7   s    '-'8'8':$ggkk]%9%9%;k<ggkk]%9%9%;DkIOVWw)$$++00su=wWWs   >,B4r3   objreturnNc                 l    U R                   R                  U R                  R                  X5      5        g N)r$   appendr(   r/   )r0   r3   r8   s      r5   exportInternalBus.export=   s#    dkk44T?@    )r.   r$   r(   )__name__
__module____qualname____firstlineno__r   r   Slot__annotations__r   r   strr	   
BaseObjectr6   r=   __static_attributes__ r?   r5   r"   r"   4   sX    CHH~XsD4H/H)I J XA3 AS^^ A Ar?   r"   c                      ^  \ rS rSr% \\S'   \\S'   \\   \S'   \	\
   \S'   \R                  \S'   S\R                  4U 4S jjrS\4S	 jr\S\4S
 j5       rS\SS4S jrSS jrSS jrSrU =r$ )BridgeA   channelsinternal_buspackagesbridge_configsargsc                 Z  > [        [        5      U l        / U l        Xl        [        XR                  S9U l        U R                  R                  SU R                  5        U R                  R                  S[        5       5        U R                  R                  S[        5       5        [        U 5      U l        UR                  (       a4  U R                  R                  [        S/ SQS/S.5      45        S U l        O_UR                  (       a  S U l        OF[#        U 5      U l        U R                  R                  S	U R                   5        U R%                  5         ['        U [(        5      U l        [,        TU ]]  [1        U 5      U R                  U R*                  U R                  /5        g )
N)
privilegedz
/superuserz/configz/environmentT)sudoz-kz-Apython3z-icz# cockpit-bridge--privilegedzSUDO_ASKPASS=ferny-askpass)rS   spawnenvironz	/packages)r"   r   rN   rP   rQ   r   rS   superuser_ruler=   r   r   r   
peers_rulebeipackset_configsr   rO   r   packages_loadedr   r   rM   superr6   r   )r0   rQ   	__class__s     r5   r6   Bridge.__init__H   sF   '0 	24OOT  t/B/BC  FH5  ?*40<<++"&g <= -  !DM__ DM$TNDM$$[$--@  "*4?D!MMOO	
 	r?   r9   c                 Z   [         R                  " [        R                  " 5       5      n[        R
                  " UR                  5      R                  nU/n[        R                  " 5        HL  nUR                  UR                  ;   d  M  UR                  U;  d  M1  UR                  UR                  5        MN     U R                  R                  5       U R                  5       UR                  UR                  UUUR                   UR                  UR"                  UR$                  S.S.$ )N)fullnamegidgroupgroupshomenameshelluid)rM   
os_releaseuser)pwdgetpwuidosgetuidgrpgetgrgidpw_gidgr_namegetgrallpw_namegr_memr<   rM   capabilitiesget_os_releasepw_gecospw_dirpw_shellpw_uid)r0   pwrd   re   grs        r5   infoBridge.infoo   s    \\"))+& RYY'//,,.BzzRYY&2::V+Cbjj) !
 224--/KKyy 		

yy	
 	
r?   c                       [        SSS9n [	        U R                  5       5      $ ! [         a7     [        SSS9n  N0! [         a    [        R                  S5        0 s s $ f = ff = f)Nz/etc/os-releasezutf-8)encodingz/usr/lib/os-releasez6Neither /etc/os-release nor /usr/lib/os-release exists)openFileNotFoundErrorloggerwarningparse_os_releaseread)files    r5   rx   Bridge.get_os_release   sk    	)G<D  		,, ! 	1GD$ WX		s$   
% 
A&
<!A"A&!A""A&messageNc                     [         R                  " [        5         [        US5      nU R                  R                  U5        S S S 5        g ! , (       d  f       g = f)N	superuser)
contextlibsuppressr   r   rY   init)r0   r   r   s      r5   do_initBridge.do_init   s>       + +6I$$Y/ ,++s   (A
Ac                     SS0SU R                  5       SS.nU R                  b,  [        R                  U R                  R                  5      US'   U R	                  U5        g )Nzexplicit-superuserTr   r   )rw   commandz
os-releaseversionrO   )rx   rO   dictfromkeyswrite_control)r0   	init_argss     r5   do_send_initBridge.do_send_init   sZ    148--/	-
	 ==$$(MM$--2H2H$IIj!9%r?   c                     U R                   (       d   eU R                   R                  5       nU R                  U:w  a=  U R                  R	                  U5        U R
                  R	                  U5        Xl        g g r;   )rO   get_bridge_configsrP   rY   r\   rZ   )r0   rP   s     r5   r]   Bridge.packages_loaded   s_    }}}99;.0++N;OO''7"0 1r?   )rQ   rP   rM   rN   rO   rZ   rY   r9   N)r@   rA   rB   rC   r   rE   r"   r   r   r   r   argparse	Namespacer6   r   r   staticmethodrx   r   r   r]   rH   __classcell__)r_   s   @r5   rK   rK   A   s      x  \**


%X// %N
j 
4 
-J 
- 
-0z 0d 0&1 1r?   rK   r9   c                 @  #    [         R                  S5        [        R                  " [        R
                  " 5       5      nUR                  [        R                  S'   UR                  [        R                  S'   UR                  [        R                  S'   [         R                  S5        [        U 5      n[        [        R                  " 5       U5        [         R                  S5         UR                  5       I S h  vN   g  N! [        [         4 a     g f = f7f)NzHi. How are you today?HOMESHELLUSERzStarting the router.z/Startup done.  Looping until connection closes.)r   debugrl   rm   rn   ro   rz   rX   r{   ru   rK   r    asyncioget_running_loopcommunicateBrokenPipeErrorConnectionResetError)rQ   merouters      r5   runr      s     
LL)* 
biik	"BBJJv++BJJwBJJv
LL'(D\F7++-v6
LLBC  """12 s<   C*D-D  DD DD DDDDc                  0    [         R                  " 5       u  pU    U   [        R                  " SSUR	                  5       /S9  S S S 5        [         R
                  " U SS5      u  p#pES S S 5         Wu  n[        R                  " SS5        [        R                  " US5        U H  n[        R                  " U5        M     g ! , (       d  f       N= f! , (       d  f       Nr= f! [         a     g f = f! W H  n[        R                  " U5        M     f = f)N   zcockpit.send-stderr)fdsr   z	ferny.end)
r)   r*   r
   r   filenorecv_fdsOSErrorrn   dup2close)ourstheirs_msgr   _flags_addr	stderr_fdr'   s           r5   try_to_receive_stderrr      s    ((*"**1.C&--/IZ[ '-tQ'B$Dv 	
	 	""1k2
	1BHHRL   T   BHHRL sQ   C$ C&C#C'C$ 02C4 
C	C
C!C$ !C$ $
C10C14!Dc                     [         R                  " [        R                  " S5      R                  5      (       d  g SS Kn [        R                  R                  U R                  R                  5       5        g! [         a     gf = f)Nr   Fr   T)statS_ISSOCKrn   fstatst_modesystemd.journalImportErrorloggingroot
addHandlerjournalJournalHandler)systemds    r5   setup_journaldr      sd    
 ==!,,--
 LLGOO::<=  s   A8 8
BBr   c                    [         R                  " SS5      n[        5       (       d  [        R                  " SS9  U (       d  US:X  a1  [        R
                  " 5       R                  [        R                  S9  gU(       ae  UR                  S5       HO  nUR                  5       nU(       d  M  [        R
                  " U5      R                  [        R                  5        MQ     gg)	zOSetup our logger with optional filtering of modules if COCKPIT_DEBUG env is setCOCKPIT_DEBUG z#%(name)s-%(levelname)s: %(message)s)formatall)level,N)
rn   getenvr   r   basicConfig	getLoggersetLevelDEBUGsplitstrip)r   modulesmodules      r5   setup_loggingr      s     ii,G #HI5 $$7==$9	mmC(F\\^Ff%..w}}= ) 
r?   textc                 D   0 nU R                  5        Hb  nUR                  5       nU(       a  UR                  S5      (       a  M2   UR                  S5      u  p4[        R                  " U5      u  nXQU'   Md     U$ ! [
         a    [        R                  SU5         M  f = f)N#=z'Ignoring invalid line in os-release: %r)
splitlinesr   
startswithr   shlex
ValueErrorr   r   )r   rj   linekvv_parseds         r5   r   r     s    J!zz|ts++	::c?DA ;;q>LX !1 " 	  	NNDdK	s   +A;; BBc                  H    [         R                  " / SQ[         R                  [         R                  SS9n U R                  c   e[        R                  " U R                  R                  5       SS9 H?  nUR                  S5      (       d  M  UR                  SSS5      [        R                  S'     g    U R                  5         U R                  5         g ! [         a    [        R                  S	5         g [         a   n[        R!                  S
U5         S nAg S nAff = f)N)z	ssh-agentshz-ecz)echo SSH_AUTH_SOCK=$SSH_AUTH_SOCK; read aT)stdinstdoutuniversal_newlines)punctuation_charszSSH_AUTH_SOCK=r   r   SSH_AUTH_SOCKz,Couldn't start ssh-agent (FileNotFoundError)zCould not start ssh-agent: %s)
subprocessPopenPIPEr   r   readliner   replacern   rX   	terminatewaitr   r   r   r   r   )proctokenexcs      r5   start_ssh_agentr     s    = g&0oojoobfh{{&&&
 [[!5!5!74PE 011.3mm<LbRS.T

?+ Q
 NNIIK ECD =6<<=s*   BC %C 4"C D!8	D!DD!F)r[   r[   c                    [         R                  " 5         [        R                  " SS9nUR	                  SSSS9  UR	                  SSSS9  UR	                  S	SS
S9  UR	                  SSSS9  UR	                  SSSS9  UR                  5       nXl        UR                  (       a
  [        5         [        UR                  S9  UR                  (       a  [        5       R                  5         g UR                  (       a  [        S[          S35        g UR"                  (       aO  [        [$        R&                  " [        5       R)                  5        Vs/ s H  o3R*                  PM     snSS95        g S[,        R.                  ;  a  UR                  (       d
  [1        5         [3        [5        U5      UR                  S9  g s  snf )Nz@cockpit-bridge is run automatically inside of a Cockpit session.)descriptionrV   
store_truezPrivileged copy of the bridge)actionhelpz
--packagesz Show Cockpit package informationz	--bridgesz Show Cockpit bridges informationz--debugz"Enable debug output (very verbose)z	--versionz Show Cockpit version information)r   z	Version: z
Protocol: 1r   )indentr   )r   installr   ArgumentParseradd_argument
parse_argsr[   rS   r   r   r   rO   r   showr   printr   bridgesjsondumpsr   __dict__rn   rX   r   r   r   )r[   parserrQ   configs       r5   mainr  1  s`   $$1stF
|Bab
\@bc
L?ab
	,=ab
L?abD L 

# }}
		+m45	djj
8U8U8WX8Wf//8WXabcd bjj( c$itzz* Ys   F?__main__r   )Gr   r   r   rp   r
  r   rn   rl   r   r)   r   r   typingr   r   r   r   r   r   r	   cockpit._vendor.fernyr
   cockpit._vendor.systemd_ctypesr   r   r   r   _versionr   channelr   rM   r   r  r   r   internal_endpointsr   jsonutilr   r   r   r   rO   r   r   r   peerr   remoter   r   r   r   r   
transportsr    r   r@   r   r"   rK   r   r   boolr   r   rF   r   r   r  rI   r?   r5   <module>r     s  $    
   	 
     H H H 4 9  ! ' # ' ' @ @ > > " #  + &			8	$
A 
Ap1V% p1f,, &>D >T >(3 4S>  =4 " (+T (+d (+V zF r?   