+
    i]0  c            	       s   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^RIHt ^R	IHtHt ^R
IHt ^RIHtH t H!t! ^RI"H#t# ^RI$H%t%H&t&H't' ]PP                  ! ])4      t*R R lt+R R lt, ! R R]4      t- ! R R]P\                  4      t/ ! R R]/4      t0 ! R R]']/]Pb                  RR7      t2R# )i    N)basename)TemporaryDirectory)Sequence)ferny)make_bootloader)BusVariantbus)BridgeBeibootHelper)
JsonObjectget_str)BridgeConfig)ConfiguredPeerPeer	PeerError)PolkitAgent)RouterRoutingErrorRoutingRulec                0    V ^8  d   QhR\         R\        /# )   	sudo_pathreturn)strboolformat   "6/usr/lib/python3.14/site-packages/cockpit/superuser.py__annotate__r   !   s      S T     c                 s     \         P                  ! V R R.\         P                  \         P                  \         P                  RR7       R#   \         P                  \        3 d     R# i ; i)z-Az--helpT)ZstdinZstdoutstderrZcheckF)
subprocessZrunZDEVNULLZCalledProcessErrorOSError)r      &r   sudo_supports_askpassr#   !   s]    h'$$%%%%	
 ))73 s   AA A+*A+c                r   )r   configr   )r   r   r   r   r   r   r   0   s      l t r   c                 s    V P                   '       g   R # \        P                  ! V P                  ^ ,          4      pVf   R # \	        V4      R8X  d   \        V4      '       g   R # R# )FZsudoT)
privilegedshutilwhichspawnr    r#   )r$   command   & r   is_valid_superuser_configr+   0   sM    ll6<<?+GF"+@+I+Ir   c                   sn   a a ] tR t^;t oV3R lV 3R lltV3R lR ltV3R lR ltV3R ltRtVt	V ;t
# )	SuperuserPeerc                s@   < V ^8  d   QhRS[ RS[RS[P                  /# )r   routerr$   	responder)r   r   r   AskpassHandlerr   __classdict__   "r   r   SuperuserPeer.__annotate__>   s(     # #v #| #H\H\ #r   c                s2   < \         SV `  W4       W0n        R # N)super__init__r.   )selfr-   r$   r.   	__class__s   &&&&r   r6   ZSuperuserPeer.__init__>   s    ("r   c                s>   < V ^8  d   QhRRRS[ RS[P                  /# )r   argszSequence[str]r   r   )ZobjectasyncioZ	Transportr0   r2   r   r   r3   B   s)     ( ( ( (SZSdSd (r   c                sp  a "   \         P                  ! \         P                  \         P                  4      w  r4\        P
                  ! 4       pR \        P                  ! 4        R2p\        P                  ! 4       pVP                  RRRRRVRRR	R
RR/3RR	R
RR/3RR	R
RR/3RR	RRV/3RR	RRV/3RR	RRV/3RR	RR\        P                  ! V^ ,          4      VR3./3.. 4	      pVP                  R4       VP                  V4      G Rj  xL
  VP                  V 3R lVR7      G Rj  xL
 w  rV	#  L' L
5i)zcockpit-superuser-z.servicezorg.freedesktop.systemd1z/org/freedesktop/systemd1z org.freedesktop.systemd1.ManagerStartTransientUnitzssa(sv)a(sa(sv))ZfailZDescriptionZtsZvzCockpit privileged bridgeZTypeZexecZUserrootZStandardInputFileDescriptorZhZStandardOutputFileDescriptorZStandardErrorFileDescriptorZ	ExecStartza(sasb)FTNc                  s   < S # r4    r7   s   r   Z<lambda>Z4SuperuserPeer.start_transient_unit.<locals>.<lambda>h   s    4r   )sock)socketZ
socketpairZAF_UNIXZSOCK_STREAMr:   get_running_looposZgetpidr   Zdefault_systemZmessage_new_method_callr&   r'   Z#set_allow_interactive_authorizationZ
call_asyncZcreate_connection)r7   r9   r   ZoursZtheirsZloopZ	unit_nameZsystemZmsg	transportZprotocols   f&&        r   start_transient_unitZ"SuperuserPeer.start_transient_unitB   sb    ((9K9KL'')(X>	##%,,&'. c30K LM#sC01#sC01.c30GH/#sC1HI.c30GHsIsfll476KTSX5Y4Z[\ #
& 	//5 $$$$($:$:<d$:$SS		 	%Ss$   DD6
D2D6)D4*	D64D6c                   < V ^8  d   QhRR/# r   r   Nr>   r0   r2   r   r   r3   l   s     &T &TD &Tr   c           	     sj  "   \         P                  ! 4       ;_uu_4       GR j  xL
 pV P                  P                  '       dN   \        P                  RV P                  4       VP                  \        V P                  4      4      G R j  xL
  M \        P                  RV P                  4       V P                  .pRV P                  9   ds   \        P                  RV P                  4       \        V R.4      pVP                  V4       \        VP                  \        P                  R7      P!                  4       pMR p\        P"                  ! V4      pRV P$                  9   d7   VP'                  \)        4       4      p\        P*                  ! V4      pRV 2.pMV P$                  pV P                  P,                  R	8X  d'   V P/                  V P                  VR
7      G R j  xL
 p	M&V P1                  V P                  WRR7      G R j  xL
 p	Ve   V	P3                  V4        VP5                  4       G R j  xL
  R R R 4      GR j  xL
  R #  EL0 EL Lq LL L   \        P6                   d   p
\9        R\;        T
4      R7      T
hR p
?
ii ; i LF  + GR j  xL 
 '       g   i     R # ; i5i)Nz-connecting polkit superuser peer transport %rz1connecting non-polkit superuser peer transport %rz# cockpit-bridgez$going to beiboot superuser bridge %rz--privileged)ZgadgetszSUDO_ASKPASS=ferny-askpasszSUDO_ASKPASS=r;   )r   T)r   Zstart_new_sessionzauthentication-failed)Zmessage)
contextlibZAsyncExitStackr$   polkitloggerdebugr9   Zenter_async_contextr   r.   r   Zappendr   Zstepsr   ZBEIBOOT_GADGETSencodeZInteractionAgentenvZenter_contextr   Zwrite_askpass_to_tmpdirZmethodrE   r(   ZwriteZcommunicateZInteractionErrorr   r   )r7   ZcontextZ
respondersZhelperZstage1ZagentZtmpdirZferny_askpassrM   rD   excs   &          r   do_connect_transportZ"SuperuserPeer.do_connect_transportl   s    ,,...'{{!!!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{{!!%99"&";";DIIe";"TT	"&**TYY]a*"bb	!'T'')))G /.. O0 Ub *)) T 7SJPSSTI /...s   "J3IJ3A$JIEJ(I)&JIJ*I =I>I J3JJ3JJJI  J5JJJJ3J0	J
J0	(J0	*	J3c                s:   < V ^8  d   Qh/ S[ P                  ;R&   # )r   r.   )r   r/   r0   r2   r   r   r3   ;   s     ### r   )r.   )__name__
__module____qualname____firstlineno__r6   rE   rO   __annotate_func____static_attributes____classdictcell____classcell__r8   r1      @@r   r,   r,   ;   s.     # #( (T&T &Tc  r   r,   c                   s6   a  ] tR t^t o RtV 3R lR ltRtV tR# )CockpitResponderc          
      s2   < V ^8  d   QhRS[ RRRRRS[ RR/# )	r   r)   r9   ztuple[object, ...]fdsz	list[int]r   r   Nr   r0   r2   r   r   ZCockpitResponder.__annotate__   s<     g gg"6g=HgRUg	gr   c                sZ  "   VR 8X  d   \         P                   ! V^ ,          R7      ;_uu_ 4       pVP                  ^ 4       VP                  R.\         P                  \         P                  \
        P
                  ! R^.4      3.4       RRR4       R# R#   + '       g   i     R# ; i5i)cockpit.send-stderr)Zfilenos    ZiN)rA   ZpopZsendmsgZ
SOL_SOCKETZ
SCM_RIGHTSarray)r7   r)   r9   r[   r   r@   s   &&&&& r   do_custom_commandZ"CockpitResponder.do_custom_command   s|      ++c!f--
eW(9(96;L;LekkZ]`a_bNc'd&ef .- ,---s   .B+ABB+B(	"	B+r>   N)zferny.askpassr]   )rP   rQ   rR   rS   Zcommandsr_   rU   rV   r1      @r   rZ   rZ      s     7Hg gr   rZ   c                   sD   a  ] tR t^t o V 3R lR ltV 3R lR ltRtV tR# )AuthorizeResponderc                s    < V ^8  d   QhRS[ /# )r   r-   )r   r0   r2   r   r   AuthorizeResponder.__annotate__   s     ) )v )r   c                s     Wn         R V n        R# )FN)r-   authorize_attempted)r7   r-      &&r   r6   ZAuthorizeResponder.__init__   s    #( r   c                0   < V ^8  d   QhRS[ RS[ RS[ RR/# r   messagesprompthintr   z
str | Noner\   r0   r2   r   r   rc      s)     	4 	4 	4c 	4 	4 	4r   c                sD  "   V P                   '       d   \        P                  R 4       R# RV n         RP                  R \        P
                  ! 4       P                  R4       4       4      pV P                  P                  RV 24      G Rj  xL
 pVR8X  d   R# T#  L5i)zAnoninteractive authorize during init already attempted, rejectingNT c              3   s(   "   T F  qR  x  K
  	  R# 5i)Z02xNr>   )Z.0cr*   r   Z	<genexpr>Z0AuthorizeResponder.do_askpass.<locals>.<genexpr>   s     P.OsG*.Os   Zasciizplain1:)	rd   rJ   ZinfoZjoingetpassZgetuserrL   r-   Zrequest_authorization)r7   rh   ri   rj   ZhexuserZpasswords   &&&&  r   
do_askpassZAuthorizeResponder.do_askpass   s     ###KK[\#' ''Pgoo.?.F.Fw.OPP::WWI;NOO2~t383 Ps   BB BB )rd   r-   N)rP   rQ   rR   rS   r6   rn   rU   rV   r`   ra   r   rb   rb      s     ) )	4 	4r   rb   c                   s  a a ] tR t^t oR&t]P                  P                  RRRRR4      t]P                  P                  R. R7      t
]P                  P                  RRR7      t]P                  P                  R/ R7      tV3R lR ltV3R	 lR
 ltRR/V3R lV 3R llltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR lt]P                  P/                  R.R7      V3R lR l4       t]P                  P/                  4       V3R  lR! l4       t]P                  P/                  R.R7      V3R" lR# l4       tV3R$ ltR%tVtV ;t# )'SuperuserRoutingRuler<   ZbZas)Zvaluenonea{sv}c                $   < V ^8  d   QhRS[ RR/# )r   optionsr   zPeer | Noner	   r0   r2   r   r   !SuperuserRoutingRule.__annotate__   s     0 0* 0 0r   c                s    VP                  R 4      pV'       d   V P                  R8X  d   R# V P                  '       g   VR8X  d   V P                  # \        R4      h)	superuserr=   NZtryzaccess-denied)Zgetcurrentpeerr   )r7   rs   rv   s   && r   
apply_ruleZSuperuserRoutingRule.apply_rule   sJ    KK,	DLLF2YYY)u, 99 //r   c                rf   rg   r\   r0   r2   r   r   ru      s)     ' ' 'c ' ' 'r   c                s  "   VR 8H  p\         P                  ! 4       P                  4       V n         \        P                  RV4       V P                  RVRWA4       V P                  G Rj  xL
 RV n        #  L  RT n        i ; i5i)Zconfirmzprompting for %srk   N)r:   rB   Zcreate_futurepending_promptrJ   rK   ri   )r7   rh   ri   rj   Zechos   &&&& r   rn   ZSuperuserRoutingRule.do_askpass   ss     y %668FFH	'LL+V4 KKFB7,,,"&D -"&Ds.   .B9A8 *A6+A8 .B6A8 8	BBr%   Fc                s&   < V ^8  d   QhRS[ RS[/# )r   r-   r%   )r   r   r0   r2   r   r   ru      s     " "v "d "r   c               s   < \         SV `  V4       R V n        R V n        R V n        V'       g   \
        P                  ! 4       ^ 8X  d
   RV n        R # R # )Nr=   )r5   r6   rz   rx   startuprC   Zgetuidrw   )r7   r-   r%   r8   s   &&$r   r6   ZSuperuserRoutingRule.__init__   sB     "	)!DL *r   c                rF   rG   r>   r0   r2   r   r   ru      s      4 r   c                s"    R V n         RV n        R# )rp   N)rw   rx   r?   r"   r   	peer_doneZSuperuserRoutingRule.peer_done   s    	r   c                s>   < V ^8  d   QhRS[ RS[P                  RR/# )r   namer.   r   N)r   r   r/   r0   r2   r   r   ru      s(     - -S -U-A-A -d -r   c                s  "   V P                   R 8w  d   \        P                  ! RR4      hV P                   F  pWP                  R39   g   K   M	  \        P                  ! RRV R24      hRV n         \        V P                  W24      V n        V P                  P                  V P                  4        V P                  P                  V P                  P                  R7      G Rj  xL
  T P                  P"                  P                  T n         R#  L+  \        P                   d    \        P                  ! R	R
4      Rh\        \        3 d'   p\        P                  ! R\!        T4      4      ThRp?ii ; i5i)rp   zcockpit.Superuser.Errorz Superuser bridge already runninganyzUnknown superuser bridge type "Z"init)	init_hostNz!cockpit.Superuser.Error.CancelledzOperation aborted)rw   r   ZBusErrorsuperuser_configsr}   r,   r-   rx   add_done_callbackr|   startr   r:   ZCancelledErrorr!   r   r   r$   )r7   r}   r.   r$   rN   s   &&&  r   goZSuperuserRoutingRule.go   s2    <<6!,,8:\]]
 ,,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sI   AE<A&E<53D (D)D -'E<D ;E9E9!E44E99E<c                s4   < V ^8  d   QhRS[ S[,          RR/# )r   configsr   Nr   r   r0   r2   r   r   ru     s         8L#9  d  r   c           
     s   \         P                  R \        V4      4       V Uu. uF  p\        V4      '       g   K  VNK  	  pp\	        V4      V n        V P
                   Uu. uF  q"P                  NK  	  upV n        V Uu/ uFB  q3P                  '       g   K  VP                  \        R\        VP                  4      /R4      bKD  	  upV n
        \         P                  RV P                  4       V P                  en   V P                  P                  V P
                  9  dG   \         P                  RV P                  P                  P                  4       V P                  4        R# R# R# u upi u upi u upi )zset_configs() with %d itemslabelrq   z  bridges are now %sNz=  stopping superuser bridge '%s': it disappeared from configs)rJ   rK   Zlenr+   Ztupler   r}   bridgesr   r   methodsrx   r$   shutdown)r7   r   r$   rl      &&  r   set_configsZ SuperuserRoutingRule.set_configs  s   2CLA(/Uf3LV3T66U!&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 > ! VIks   E/E/"E4E90E9c                rF   rG   r>   r0   r2   r   r   ru     s     ' 't 'r   c                sh    V P                   e$   V P                   P                  4        R V n         R # R # r4   )rz   Zcancelr?   r"   r   cancel_promptZ"SuperuserRoutingRule.cancel_prompt  s-    *&&("&D +r   c                rF   rG   r>   r0   r2   r   r   ru     s     ! !$ !r   c                sz    V P                  4        V P                  e   V P                  P                  4        R # R # r4   )r   rx   Zcloser?   r"   r   r   ZSuperuserRoutingRule.shutdown  s+    99 IIOO !r   c                rr   )r   paramsr   Nrt   r0   r2   r   r   ru   #  s     ; ;: ;$ ;r   c                s    \        VR R4      p\        V P                  4      p\        P                  ! V P                  W#4      4      V n        V P                  P                  V P                  4       R# )Zidr~   N)	r
   rb   r-   r:   Zcreate_taskr   
_init_taskr   
_init_done)r7   r   r}   r.   r   r   r   ZSuperuserRoutingRule.init#  sO    vtU+&t{{3	!--dggd.FG))$//:r   c                s"   < V ^8  d   QhRRRR/# )r   taskzasyncio.Task[None]r   Nr>   r0   r2   r   r   ru   )  s      3  r   c                s    \         P                  R VP                  4       4       V P                  P	                  RR7       V =R# )zsuperuser init done! %szsuperuser-init-done)r)   N)rJ   rK   Z	exceptionr-   Zwrite_controlr   )r7   r   re   r   r   ZSuperuserRoutingRule._init_done)  s3    .0@A!!*?!@Or   )Zin_typesc                rr   )r   r}   r   Nr\   r0   r2   r   r   ru   0  s     " " " "r   c                sD   "   V P                  W4      G R j  xL
  R #  L5ir4   )r   )r7   r}   re   r   r   ZSuperuserRoutingRule.start/  s     ggd!!!s     c                rF   rG   r>   r0   r2   r   r   ru   4  s      d r   c                s&    V P                  4        R # r4   )r   r?   r"   r   stopZSuperuserRoutingRule.stop3  s    r   c                rr   )r   replyr   Nr\   r0   r2   r   r   ru   8  s     > >C >D >r   c                s    V P                   e3   \        P                  R4       V P                   P                  V4       R # \        P                  R4       R # )Nzresponding to pending promptz!got Answer, but no prompt pending)rz   rJ   rK   Z
set_result)r7   r   re   r   answerZSuperuserRoutingRule.answer7  s<    *LL78**51LL<=r   c                sJ   < V ^8  d   Qh/ S[ S[,          ;R&   R;R&   R;R&   # )r   r   zasyncio.Future[str] | Nonerz   zSuperuserPeer | Nonerx   r   r0   r2   r   r   ru      s-     -2 00  !  r   )r   r   rw   r   rx   rz   r{   r   r>   )rP   rQ   rR   rS   r   r   Z	InterfaceZSignalri   ZPropertyr   rw   r   ry   rn   r6   r|   r   r   r   r   r   r   ZMethodr   r   r   rT   rU   rV   rW   rX   rY   r   ro   ro      sZ    02
 ]]!!#sCc:F mm$$T$4Gmm$$S$7Gmm$$WB$7G0 0' '"U " " - -4   ' '
! !; ;  	]]C5)" *" 	]]  	]]C5)> *>K  r   ro   zcockpit.Superuser)Z	interface)3r^   r:   rH   rm   ZloggingrC   r&   rA   r    Zos.pathr    Ztempfiler   Ztypingr   Zcockpit._vendorr   Zcockpit._vendor.bei.bootloaderr   Zcockpit._vendor.systemd_ctypesr   r   r   Zbeipackr   Zjsonutilr	   r
   Zpackagesr   rx   r   r   r   rI   r   r-   r   r   r   Z	getLoggerrP   rJ   r#   r+   r,   r/   rZ   rb   ZObjectro   r>   r   r   <module>r      s         	     '  ! : < < ( ) " 1 1  5 5			8	$WTN WTt
gu++ 
g4) 4"J>;(8#**Pc J>r   