ó
    ¡7�jÜ&  ã            	       óŠ  • 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                  X…S
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Ë  é € Ü×,Ò,×.Ô.°'Ø˜4Ÿ9™9Ó$Ü—‘ÐLÈdÏiÉiÔXØ×1Ñ1´+¸d¿n¹nÓ2MÓN×NÑNä—‘ÐPÐRV×R[ÑR[Ô\à<@¿N¹NÐ;KˆJà! T§Y¡YÓ.Ü—‘ÐCÀTÇYÁYÔOÜ,¨T°NÐ3CÓD�Ø×!Ñ! &Ô)Ü(¨¯©¼u×?TÑ?TÑU×\Ñ\Ó^‘à�ä×*Ò*¨:Ó6ˆEà+¨t¯x©xÓ7Ø ×.Ñ.Ô/AÓ/CÓD�Ü %× =Ò =¸fÓ E�Ø(5°m°_Ð&EÐ%F‘à—h‘h�à"Ÿj™j¨¯©°CÐY]˜jÐ^×^ˆIàÑ!Ø—‘ Ô'ðTØ×'Ñ'Ó)×)Ð)÷A /×.Ó.ò Oñ. _ñ *øÜ×)Ñ)ó TÜÐ 7ÄÀSÃÑJÐPSÐ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)ÚCockpitResponderéW   )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Ò-°Ø—‘˜”
à—‘˜e˜W¬×(9Ñ(9¼6×;LÑ;LÌeÏkÊkÐZ]Ð`aÐ_bÓNcÐ'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;   † Ø7€Hðg¨sð g¸%ð gÀdÈ3Áið 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)ÚAuthorizeResponderéb   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¨˜s˜Gœ*Ò.Oùs   ‚Úasciizplain1:)	rq   r0   ÚinfoÚjoinÚgetpassÚgetuserr6   r   Úrequest_authorization)r"   rs   rt   ru   ÚhexuserÚpasswords         r$   Ú
do_askpassÚAuthorizeResponder.do_askpassg   s�   é € Ø×#×#Ü�K‰KÐ[Ô\ØØ#'ˆÔ à—'‘'ÑP¬g¯oªoÓ.?×.FÑ.FÀwÔ.OÓPÓPˆØŸ™×:Ñ:¸WÀWÀIÐ;NÓO×Oˆà 2“~ˆtÐ3¨8Ð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¨ð 	4°cð 	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*$ ),ÚSuperuserRoutingRuleés   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   € Ø—K‘K Ó,ˆ	æ˜DŸL™L¨FÓ2àØ�Y�Y˜) uÓ,ð —9‘9Ðô ˜Ó/Ð/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ˆÔð	'Ü�L‰LÐ+¨VÔ4ð �K‰K˜˜F B¨Ô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   ø€ Ü‰Ñ˜Ô à"ˆÔØˆŒ	ØˆŒæœŸš›¨Ó)Ø!ˆD�Lð *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Ð:\Ó]Ð]à�y‰yÑ Ð Ð Ø�|‰|Ñ#Ð#Ð#à×,Ô,ˆFØŸ™ UÐ+Õ+Ùñ -ô —,’,Ð8Ð<[Ð\`Ð[aÐabÐ:cÓdÐdàˆŒÜ! $§+¡+¨vÓAˆŒ	Ø�	‰	×#Ñ# D§N¡NÔ3ð	MØ—)‘)—/‘/¨D¯K©K×,AÑ,A�/ÐB×BÐBð —y‘y×'Ñ'×,Ñ,ˆ�ñ CøÜ×%Ñ%ó 	cÜ—,’,ÐBÐDWÓ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  € Ü�‰Ð2´C¸³LÔAÙ(/ÓEª˜f×3DÕ3D—6©ˆÐEÜ!& w£ˆÔØ26×2HÒ2HÓIÒ2H¨ŸœÑ2HÑIˆŒÙX_ÓkÒX_ÐST×cjÕcjÓN˜Ÿ™¤¨'´7¸1¿7¹7Ó3CÐ)DÀgÓ!NÒNÑX_ÑkˆŒä�‰Ð+¨T¯\©\Ô:ð �9‰9Ñ Ø�y‰y×Ñ 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   € Ø×ÑÔà�9‰9Ñ Ø�I‰I�O‰OÔð �y‰yÑ Ð Ñ 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   € Ü�v˜t UÓ+ˆÜ& t§{¡{Ó3ˆ	Ü!×-Ò-¨d¯g©g°dÓ.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   é € à�g‰g�dÓ!×!Ó!ù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<   € à×ÑÑ*Ü�L‰LÐ7Ô8Ø×Ñ×*Ñ*¨5Õ1ä�L‰LÐ<Õ=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Ÿ^™^Ñ,Ó,Ø
�=Ñ
!Ó!ð �]‰]×!Ñ! # s¨C°°cÓ:€Fð �m‰m×$Ñ$ T°Ð$Ð4€GØ�m‰m×$Ñ$ S°Ð$Ð7€GØ�m‰m×$Ñ$ W°BÐ$Ð7€Gð0 *ð 0°¸$±ô 0ð'¨ð '°cð 'Àð 'ÈÐRUÉô 'ð >Cò "˜vð "°d÷ "ð "òð-˜Sð -¨U×-AÑ-Að -Àdô -ð4 8¨LÑ#9ô ò'ò
!ð;˜:ð ;¨$ô ;ôð 	‡]�]×Ñ C 5ÐÐ)ð" ð "¨ó "ó *ð"ð 	‡]�]×ÑÓóó ðð 	‡]�]×Ñ C 5ÐÐ)ð>˜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&   