
    h&              	          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  S SK	J
r
JrJr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  SS
KJr  SSKJrJrJr  SSK J!r!  SSK"J#r#J$r$J%r%  \RL                  " \'5      r( " S S\5      r) " S S\RT                  5      r+ " S S\+5      r, " S S\%\+\RZ                  SS9r.g)    N)TemporaryDirectory)ListOptionalSequenceTuple)ferny)make_bootloader)Variantbus   )BridgeBeibootHelper)
JsonObjectget_str)BridgeConfig)ConfiguredPeerPeer	PeerError)PolkitAgent)RouterRoutingErrorRoutingRulec                   v   ^  \ rS rSr% \R
                  \S'   S\S\S\R
                  4U 4S jjr	SS jr
SrU =r$ )	SuperuserPeer*   	responderrouterconfigc                 0   > [         TU ]  X5        X0l        g N)super__init__r   )selfr   r   r   	__class__s       3/usr/lib/python3/dist-packages/cockpit/superuser.pyr!   SuperuserPeer.__init__-   s    ("    c                   #    [         R                  " 5        IS h  vN nSU R                  ;   aM  [        R	                  SU R                  5        UR                  [        U R                  5      5      I S h  vN   O [        R	                  SU R                  5        U R                  /nSU R                  ;   ao  [        R	                  SU R                  5        [        U S/5      nUR                  U5        [        UR                  [        R                  S9R                  5       nOS n[        R                  " U5      nSU R                   ;   a6  UR#                  [%        5       5      n[        R&                  " U5      nS	U 3/nOU R                   nU R)                  U R                  XS
S9I S h  vN n	Ub  U	R+                  U5         UR-                  5       I S h  vN   S S S 5      IS h  vN   g  GN GN NH N! [        R.                   a  n
[1        S[3        U
5      S9U
eS n
A
ff = f N?! , IS h  vN  (       d  f       g = f7f)Npkexecz-connecting polkit superuser peer transport %rz1connecting non-polkit superuser peer transport %rz# cockpit-bridgez$going to beiboot superuser bridge %rz--privileged)gadgetszSUDO_ASKPASS=ferny-askpasszSUDO_ASKPASS=T)stderrstart_new_sessionzauthentication-failed)message)
contextlibAsyncExitStackargsloggerdebugenter_async_contextr   r   r   appendr	   stepsr   BEIBOOT_GADGETSencodeInteractionAgentenventer_contextr   write_askpass_to_tmpdirspawnwritecommunicateInteractionErrorr   str)r"   context
respondershelperstage1agenttmpdirferny_askpassr8   	transportexcs              r$   do_connect_transport"SuperuserPeer.do_connect_transport1   s    ,,..'499$LdiiX11+dnn2MNNNPRVR[R[\<@NN;KJ!TYY.CTYYO,TN3CD!!&)(u?T?TU\\^**:6E+txx7 ../A/CD % = =f E(5m_&E%Fhh"jjCY]j^^I!'T'')))A /.. O. _ *)) T 7SJPSSTC /...s   IG5IAH18G89D9H12G;3H1G?G= G?$I/H/0I8H1;H1=G??H,H''H,,H1/I1I7H:8II)r   returnN)__name__
__module____qualname____firstlineno__r   AskpassHandler__annotations__r   r   r!   rI   __static_attributes____classcell__r#   s   @r$   r   r   *   s;    ####v #| #H\H\ ##T #Tr&   r   c            
       <    \ rS rSrSrS\S\S\\   S\SS4
S	 jr	S
r
g)CockpitResponderW   )zferny.askpasscockpit.send-stderrcommandr/   fdsr*   rL   Nc           
      0  #    US:X  a{  [         R                   " US   S9 nUR                  S5        UR                  S/[         R                  [         R                  [
        R
                  " SS/5      4/5        S S S 5        g g ! , (       d  f       g = f7f)NrY   r   )fileno    i   )socketpopsendmsg
SOL_SOCKET
SCM_RIGHTSarray)r"   rZ   r/   r[   r*   socks         r$   do_custom_command"CockpitResponder.do_custom_commandZ   st     ++c!f-
eW(9(96;L;LekkZ]`a_bNc'd&ef .- ,--s   BAB;
B
BB )rM   rN   rO   rP   commandsr?   r   r   intrh   rS   rj   r&   r$   rW   rW   W   s;    7Hgs g% gd3i gY\ gae gr&   rW   c                   <    \ rS rSrS\4S jrS\S\S\SS4S	 jrS
rg)AuthorizeResponderb   r   c                     Xl         SU l        g )NF)r   authorize_attempted)r"   r   s     r$   r!   AuthorizeResponder.__init__c   s    #( r&   messagesprompthintrL   z
str | Nonec                 >  #    U R                   (       a  [        R                  S5        g SU l         SR                  S [        R
                  " 5       R                  S5       5       5      nU R                  R                  SU 35      I S h  vN nUS:X  a  S $ U$  N7f)NzAnoninteractive authorize during init already attempted, rejectingT c              3   (   #    U  H  oS  v   M
     g7f)02xNrj   ).0cs     r$   	<genexpr>0AuthorizeResponder.do_askpass.<locals>.<genexpr>m   s     P.OsG*.Os   asciizplain1:)	rq   r0   infojoingetpassgetuserr6   r   request_authorization)r"   rs   rt   ru   hexuserpasswords         r$   
do_askpassAuthorizeResponder.do_askpassg   s     ##KK[\#' ''Pgoo.?.F.Fw.OPP::WWI;NOO2~t383 Ps   B
BBB)rq   r   N)	rM   rN   rO   rP   r   r!   r?   r   rS   rj   r&   r$   rn   rn   b   s/    )v )	4 	4c 	4 	4 	4r&   rn   c            	         ^  \ rS rSr% Sr\\   \S'   \\	R                     \S'   \\   \S'   \R                  R                  SSSSS5      r\R                  R!                  S/ S	9r\R                  R!                  SS
S	9r\R                  R!                  S0 S	9rS\S\\   4S jrS\S\S\S\\   4S jrSS.S\S\4U 4S jjjrS rS\S\R<                  SS4S jrS\\   4S jr S r!S  r"S!\SS4S" jr#S*S# jr$\R                  RK                  S/S$9S\SS4S% j5       r&\R                  RK                  5       S+S& j5       r'\R                  RK                  S/S$9S'\SS4S( j5       r(S)r)U =r*$ ),SuperuserRoutingRules   rj   superuser_configspending_promptpeersbas)valuenonea{sv}optionsrL   c                     UR                  S5      nU(       a  U R                  S:X  a  g U R                  (       d  US:X  a  U R                  $ [        S5      e)N	superuserroottryzaccess-denied)getcurrentr   r   )r"   r   r   s      r$   
apply_ruleSuperuserRoutingRule.apply_rule   sH    KK,	DLLF2YY)u, 99 //r&   rs   rt   ru   c                 *  #    U R                   b   eUS:H  n[        R                  " 5       R                  5       U l          [        R                  SU5        U R                  SUSXA5        U R                   I S h  vN S U l         $  N! S U l         f = f7f)Nconfirmzprompting for %srw   )r   asyncioget_running_loopcreate_futurer0   r1   rt   )r"   rs   rt   ru   echos        r$   r   SuperuserRoutingRule.do_askpass   s     ""***y %668FFH	'LL+V4 KKFB7,,,"&D -"&Ds/   =B 9B 9B:B =BB 	BBF)
privilegedr   r   c                   > [         TU ]  U5        S U l        S U l        S U l        U(       d  [
        R                  " 5       S:X  a  SU l        g g )Nr   r   )r    r!   r   r   startuposgetuidr   )r"   r   r   r#   s      r$   r!   SuperuserRoutingRule.__init__   sB     "	)!DL *r&   c                      SU l         S U l        g )Nr   )r   r   r"   s    r$   	peer_doneSuperuserRoutingRule.peer_done   s    	r&   namer   Nc                 (  #    U R                   S:w  a  [        R                  " SS5      eU R                  b   eU R                  b   eU R
                   H  nXR                  S4;   d  M    O   [        R                  " SSU S35      eSU l         [        U R                  X25      U l        U R                  R                  U R                  5         U R                  R                  U R                  R                  S9I S h  vN   U R                  R$                  R                  U l         g  N*! [        R                   a    [        R                  " S	S
5      S e[        [         4 a&  n[        R                  " S[#        U5      5      UeS nAff = f7f)Nr   zcockpit.Superuser.Errorz Superuser bridge already runninganyzUnknown superuser bridge type ""init)	init_hostz!cockpit.Superuser.Error.CancelledzOperation aborted)r   r   BusErrorr   r   r   r   r   r   add_done_callbackr   startr   r   CancelledErrorOSErrorr   r?   r   )r"   r   r   r   rH   s        r$   goSuperuserRoutingRule.go   sP    <<6!,,8:\]]yy   ||###,,FU++ - ,,8<[\`[aab:cdd!$++vA			##DNN3	M))//DKK,A,A/BBB yy'',, C%% 	c,,BDWX^bb# 	M,,8#c(CL	MsC   A$F*A&F0D. D,D. &F,D. .;F)!F

FFconfigsc           
         [         R                  S[        U5      5        U Vs/ s H  o"R                  (       d  M  UPM     nn[	        U5      U l        U R
                   Vs/ s H  o"R                  PM     snU l        U Vs0 s HA  o3R                  (       d  M  UR                  [        S[        UR                  5      0S5      _MC     snU l
        [         R                  SU R                  5        U R                  bj  U R                  R                  U R
                  ;  aE  [         R                  SU R                  R                  R                  5        U R                  5         g g g s  snf s  snf s  snf )Nzset_configs() with %d itemslabelr   z  bridges are now %sz=  stopping superuser bridge '%s': it disappeared from configs)r0   r1   lenr   tupler   r   bridgesr   r
   methodsr   r   stop)r"   r   r   r{   s       r$   set_configs SuperuserRoutingRule.set_configs   s   2CLA(/Ef3D3D6E!&w262H2HI2H2HIX_kX_STcjcjN'71773C)Dg!NNX_k+T\\: 99 yyt'='==\^b^g^g^n^n^s^st		 > ! FIks   E+E+"E0E50E5c                 b    U R                   b"  U R                   R                  5         S U l         g g r   )r   cancelr   s    r$   cancel_prompt"SuperuserRoutingRule.cancel_prompt   s-    *&&("&D +r&   c                     U R                  5         U R                  b  U R                  R                  5         U R                  b   eg r   )r   r   closer   s    r$   shutdownSuperuserRoutingRule.shutdown   s8    99 IIOO yy   r&   paramsc                     [        USS5      n[        U R                  5      n[        R                  " U R                  X#5      5      U l        U R                  R                  U R                  5        g )Nidr   )	r   rn   r   r   create_taskr   
_init_taskr   
_init_done)r"   r   r   r   s       r$   r   SuperuserRoutingRule.init   sO    vtU+&t{{3	!--dggd.FG))$//:r&   c                     [         R                  SUR                  5       5        U R                  R	                  SS9  U ?g )Nzsuperuser init done! %szsuperuser-init-done)rZ   )r0   r1   	exceptionr   write_controlr   )r"   tasks     r$   r   SuperuserRoutingRule._init_done   s3    .0@A!!*?!@Or&   )in_typesc                 B   #    U R                  X5      I S h  vN   g  N7fr   )r   )r"   r   s     r$   r   SuperuserRoutingRule.start   s     ggd!!!s   c                 $    U R                  5         g r   )r   r   s    r$   r   SuperuserRoutingRule.stop   s    r&   replyc                     U R                   b1  [        R                  S5        U R                   R                  U5        g [        R                  S5        g )Nzresponding to pending promptz!got Answer, but no prompt pending)r   r0   r1   
set_result)r"   r   s     r$   answerSuperuserRoutingRule.answer   s<    *LL78**51LL<=r&   )r   r   r   r   r   r   r   r   )r   zasyncio.Task[None]rL   NrK   )+rM   rN   rO   rP   r   r   r   rR   r   r   Futurer   r   	InterfaceSignalrt   Propertyr   r   r   r   r   r   r?   r   r   boolr!   r   r   rQ   r   r   r   r   r   r   Methodr   r   r   rS   rT   rU   s   @r$   r   r   s   s   02x-2W^^,,
=
!! ]]!!#sCc:F mm$$T$4Gmm$$S$7Gmm$$WB$7G0* 0$ 0' 'c ' 'RU ' >C "v "d " "-S -U-A-A -d -48L#9 '
!;: ;$ ; 	]]C5)" " " *" 	]]  	]]C5)>C >D > *>r&   r   zcockpit.Superuser)	interface)/rf   r   r-   r   loggingr   ra   tempfiler   typingr   r   r   r   cockpit._vendorr   cockpit._vendor.bei.bootloaderr	   cockpit._vendor.systemd_ctypesr
   r   beipackr   jsonutilr   r   packagesr   r   r   r   r   polkitr   r   r   r   r   	getLoggerrM   r0   r   rQ   rW   rn   Objectr   rj   r&   r$   <module>r      s   $      	  ' 2 2 ! : 7 ( ) " 1 1  5 5			8	$*TN *TZgu++ g4) 4"J>;(8#**Pc J>r&   