+
    O×iÝT  ã                   óp  € ^ 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
t
^ RIHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	I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. ^ RI/H0t0H1t1 ^ RI2H3t3 ]Ph                  ! R4      t5R R lt6 ! R R](4      t7RRRRRR/]Pp                  Ct8 ! R R]14      t9 ! R R ]Pt                  4      t;R! R" lt<R# R$ lt=R% R& lt> ! R' R(]+4      t? ! R) R*]04      t@R+ R, ltAR- R. ltB]CR/8X  d
   ]B! 4        R# R# )0é    N©ÚPath)ÚDictÚLiteralÚOptionalÚSequence)Ú	polyfills)Úferny)Ú
bootloader)ÚBridgeBeibootHelper)Úparse_os_releaseÚsetup_logging)ÚChannelRoutingRule)ÚPackagesChannel)Ú
JsonObjectÚget_str)Úsupported_oses)ÚPackagesÚPackagesLoaderÚpatch_libexecdir)ÚPeer)ÚCockpitProblemÚCockpitProtocolError)ÚRouterÚRoutingRule)ÚStdioTransportzcockpit.beibootc                ó$   € V ^8„  d   QhR\         /# )é   Úreturnr   )Úformats   "Ú1/usr/lib/python3/dist-packages/cockpit/beiboot.pyÚ__annotate__r"   %   s   € ÷ ñ œdñ ó    c                 ó  € \         P                  P                  \        P                  4      R,          p V P                  4       p\        P                  P                  R4      pVf    \        P                  P                  R4      p\        P                  ! VRR7       \        VR4      p\        P                  RV4        VP                  4       V8w  d   \        P                  R4       \        hVP!                  4       P"                  ^@,          '       g   \        P                  R	4       \        h V#   \$        \        3 d<    \        P                  R
4       TP'                  T4       TP)                  R4        T# i ; i)zÈCreate askpass executable

We need this for the flatpak: ssh and thus the askpass program run on the host (via flatpak-spawn),
not the flatpak. Thus we cannot use the shipped cockpit-askpass program.
zinteraction_client.pyÚXDG_CACHE_HOMEz~/.cacheT)Úexist_okzcockpit-client-askpasszChecking if %s exists...z.  ... it exists but is not the same version...z;  ... it has the correct contents, but is not executable...z  ... writing contents.iÀ  )Ú	importlibÚ	resourcesÚfilesr
   Ú__name__Ú
read_bytesÚosÚenvironÚgetÚpathÚ
expanduserÚmakedirsr   ÚloggerÚdebugÚ
ValueErrorÚstatÚst_modeÚFileNotFoundErrorÚwrite_bytesÚchmod)Úsrc_pathÚsrc_dataÚxdg_cache_homeÚ	dest_paths       r!   Úensure_ferny_askpassr>   %   s/  € ô ×"Ñ"×(Ñ(¬¯©Ó8Ð;RÕR€HØ×"Ñ"Ó$€Hô —Z‘Z—^‘^Ð$4Ó5€NØÒÜŸ™×+Ñ+¨JÓ7ˆÜ‡K‚K�¨Õ.Ü�^Ð%=Ó>€Iä
‡L�LÐ+¨YÔ7ð
Ø×ÑÓ! XÔ-Ü�L‰LÐIÔJÜÐØ�~‰~Ó×'Ñ'¨%×/Ô/Ü�L‰LÐVÔWÜÐð 0ð Ðøô œzÐ*ô Ü�‰Ð.Ô/Ø×Ñ˜hÔ'Ø�‰˜ÕàÐðús   ÃAD7 ÄD7 Ä7AFÆFc                   óP   a € ] tR t^Gt o V 3R lR ltV 3R lR ltV 3R ltRtV tR# )ÚProxyPackagesLoaderc                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# ©r   Úfile_status©r   ÚstrÚbool)r    Ú__classdict__s   "€r!   r"   Ú ProxyPackagesLoader.__annotate__J   s   ø€ ÷ 'ñ '¡D©©d¨¥Oñ 'r#   c                ó   € Wn         R # ©N©rC   )ÚselfrC   s   &&r!   Ú__init__ÚProxyPackagesLoader.__init__J   s   € Ø&Ör#   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r/   r   )rE   rF   )r    rG   s   "€r!   r"   rH   M   s   ø€ ÷ 1ñ 1¡ð 1©ñ 1r#   c                ó:   € V P                   P                  VR 4      # )F)rC   r.   )rL   r/   s   &&r!   Úpath_existsÚProxyPackagesLoader.path_existsM   s   € Ø×Ñ×#Ñ# D¨%Ó0Ð0r#   c                ó<   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   # rB   rD   )r    rG   s   "€r!   r"   rH   G   s   ø‡ ‚ Ù‘c™4�i•Ñ ò r#   rK   N)	r*   Ú
__module__Ú__qualname__Ú__firstlineno__rM   rQ   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rG   s   @r!   r@   r@   G   s    ø‡ € ÷'ð '÷1ð 1÷ ƒ r#   r@   Úreport_existszŠ
    import os
    def report_exists(files):
        command('cockpit.report-exists', {name: os.path.exists(name) for name in files})
    Úcheck_os_releasezþ
    import os
    def check_os_release(_argv):
        try:
            with open('/etc/os-release') as f:
                command('cockpit.check-os-release', f.read())
        except OSError:
                command('cockpit.check-os-release', "")
    Ú
force_execz³
    import os
    def force_exec(argv):
        try:
            os.execvp(argv[0], argv)
        except OSError as e:
            command('cockpit.fail-no-cockpit', str(e))
    c                   ón   a a€ ] tR t^lt 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
# )	ÚDefaultRoutingRulec                ó    <€ V ^8„  d   QhRS[ /# ©r   Úrouter©r   )r    rG   s   "€r!   r"   ÚDefaultRoutingRule.__annotate__o   s   ø€ ÷ !ñ !™vñ !r#   c                ó&   <€ \         SV `  V4       R # rJ   )ÚsuperrM   )rL   rb   Ú	__class__s   &&€r!   rM   ÚDefaultRoutingRule.__init__o   s   ø€ Ü‰Ñ˜Ö r#   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úoptionsr   úPeer | None©r   )r    rG   s   "€r!   r"   rd   r   s   ø€ ÷ ñ ¡*ð °ñ r#   c                ó   € V P                   # rJ   )Úpeer)rL   rj   s   &&r!   Ú
apply_ruleÚDefaultRoutingRule.apply_ruler   s   € Ø�y‰yÐr#   c                ó   <€ V ^8„  d   QhRR/# ©r   r   N© )r    rG   s   "€r!   r"   rd   u   s   ø€ ÷ ñ ˜$ñ r#   c                óZ   € V P                   e   V P                   P                  4        R # R # rJ   )rn   Úclose©rL   s   &r!   ÚshutdownÚDefaultRoutingRule.shutdownu   s   € Ø�9‰9Ò Ø�I‰I�O‰OÖñ !r#   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r   rk   rn   rs   )r    rG   s   "€r!   r"   rd   l   s   ø‡ ‚ Ø
Ñò r#   rs   )r*   rT   rU   rV   rM   ro   rw   rW   rX   rY   Ú__classcell__©rg   rG   s   @@r!   r_   r_   l   s*   ù‡ € ÷!ó !÷ð ÷ð ÷ … r#   r_   c                   óf   a € ] tR t^zt o R
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tRt	V t
R	# )ÚAuthorizeResponderc                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )r   rb   Úbasic_password)r   r   rE   )r    rG   s   "€r!   r"   ÚAuthorizeResponder.__annotate__~   s   ø€ ÷ >ñ >™vð >±xÁµ}ñ >r#   c                ó0   € Wn         W n        VR JV n        R # rJ   )rb   r   Úhave_basic_password)rL   rb   r   s   &&&r!   rM   ÚAuthorizeResponder.__init__~   s   € ØŒØ,ÔØ#1¸Ð#=ˆÖ r#   c          	      óB   <€ V ^8„  d   QhRS[ RS[ RS[ RS[S[ ,          /# )r   ÚmessagesÚpromptÚhintr   )rE   r   )r    rG   s   "€r!   r"   r€   ƒ   s4   ø€ ÷ Eñ E©ð E±cð EÁð EÉÑRUÍñ Er#   c              ƒ  óÀ  "  € \         P                  R W!V4       V P                  '       dO   RVP                  4       9   d:   V P                  e,   \         P                  RV4       V P                  pRV n        V# VR8X  d   R# \
        P                  ! RV4      p\
        P                  ! RV4      p/ pV'       dg   V'       d_   VP                  ^4      pVR8X  d   \         P                  RV4       R	# V R
VP                  ^4       R2VR&   VP                  ^4      VR&   \        P                  ! 4        R\        P                  ! 4        2p	RV	 2p
V
R
,           \        P                  ! VP                  4       4      P                  4       ,           pV P                  P                   ! V3RRRVRVRVRR/VB G Rj  x€L
 pVP#                  V
4      '       g   \%        RV RV
 24      hVP'                  V
4      P)                  4       p\        P*                  ! VP                  4       4      P                  4       p\         P                  R\-        V4      4       V#  Lž5i)z3AuthorizeResponder: prompt %r, messages %r, hint %rz	password:Nz=AuthorizeResponder: sending Basic auth password for prompt %rÚnonez&\n(\w+) key fingerprint is:? ([^.\n]+)zauthenticity of host '([^ ]+) z	127.0.0.1z,auto-accepting fingerprint for 127.0.0.1: %sÚyesÚ z login-datazhost-keyÚdefaultÚ-zX-Conversation Útimeoutr…   r†   r‡   ÚechoFzAuthorizeResponder: response z does not match challenge zReturning a %d chars response)r2   r3   r‚   Úlowerr   ÚreÚsearchÚgroupr,   ÚgetpidÚtimeÚbase64Ú	b64encodeÚencodeÚdecoderb   Úrequest_authorizationÚ
startswithr   ÚremoveprefixÚstripÚ	b64decodeÚlen)rL   r…   r†   r‡   ÚreplyÚfp_matchÚ
host_matchÚargsÚhostnameÚchallenge_idÚchallenge_prefixÚ	challengeÚresponseÚb64s   &&&&          r!   Ú
do_askpassÚAuthorizeResponder.do_askpassƒ   s@  é € Ü�‰ÐJÈFÐ^bÔcà×#×#Ð#¨°v·|±|³~Ô(Eð ×"Ñ"Ò.Ü—‘Ð\Ð^dÔeØ×+Ñ+�Ø&*�Ô#Ø�à�6Œ>ñ ô —9’9ÐFÈÓOˆä—Y’YÐ@À&ÓIˆ
ØˆßŸ
Ø!×'Ñ'¨Ó*ˆHà˜;Ô&Ü—‘ÐKÈZÔXÙð
 #+ ¨1¨X¯^©^¸AÓ->Ð,?¸{ÐKˆD�Ñà&Ÿn™n¨QÓ/ˆD�‰OäŸ)š)›+˜ a¬¯	ª	« }Ð5ˆØ,¨\¨NÐ;ÐØ$ sÕ*¬V×-=Ò-=¸f¿m¹m»oÓ-N×-UÑ-UÓ-WÕWˆ	ØŸ™×:Ò:¸9ñ CØCGðCàDLðCð CIðCð AEð	Cð
 AFðCð >BñC÷ Cˆð ×"Ñ"Ð#3×4Ò4Ü&Ø/°¨zÐ9SÐTdÐSeÐfóhð hà×#Ñ#Ð$4Ó5×;Ñ;Ó=ˆÜ×#Ò# C§J¡J£LÓ1×8Ñ8Ó:ˆÜ�‰Ð4´c¸(³mÔDØˆñCùs&   ‚B8IÂ;IÃC:IÆ=IÆ>IÇBIc          
      óF   <€ V ^8„  d   QhRS[ RS[RS[S[,          RS[ RR/# )r   Úcommandr£   ÚfdsÚstderrr   N)rE   ÚtupleÚlistÚint)r    rG   s   "€r!   r"   r€   Ê   s=   ø€ ÷ %Hñ %H©sð %H¹%ð %HÁdÉ3Åið %HÑY\ð %HÐaeñ %Hr#   c              ƒ  óP  a"  € \         P                  R WV4       VR8X  dh   Vw  p\        \        V4      R7      V P                  n        V P                  P                  P                  ^ \        V P                  \        .4      4       VR8X  d   \        RV^ ,          R7      hVR8X  Ed·   \        V^ ,          4      o\         P                  RS4       \         P                  R\        4       \         Fx  p\        ;QJ d-    V3R	 lVP                  4        4       F  '       d   K   R
M"	  RM! V3R	 lVP                  4        4       4      '       g   Ka  \         P                  RV4        R# 	  \         P                  RS4        \        R4      ;_uu_ 4       p\        VP!                  4       4      pRRR4       SP'                  R4      XP'                  R4      8X  d>   SP'                  R4      TP'                  R4      8X  d   \         P                  RT4       R# SP'                  RSP'                  RR4      4       RSP'                  RR4       2p
\        RT
R7      hR#   + '       g   i     L¸; i  \"         d"   p	\         P%                  RT	4        Rp	?	R# Rp	?	ii ; i5i)zGot ferny command %s %s %súcockpit.report-exists)Úloaderúcockpit.fail-no-cockpitz
no-cockpit)Úmessageúcockpit.check-os-releasez'cockpit.check-os-release: remote OS: %rz,cockpit.check-os-release: supported OSes: %rc              3   óP   <"  € T F  w  rSP                  V4      V8H  x € K  	  R # 5irJ   )r.   )Ú.0ÚkÚvÚ	remote_oss   &  €r!   Ú	<genexpr>Ú7AuthorizeResponder.do_custom_command.<locals>.<genexpr>Ý   s!   øé € ÐH¹±°�y—}‘} QÓ'¨1Ö,»ùs   ƒ#&FTz8cockpit.check-os-release: remote matches supported OS %rNz$cockpit.check-os-release: remote: %rz/etc/os-releasezIfailed to read local /etc/os-release, skipping OS compatibility check: %sÚIDÚ
VERSION_IDz7cockpit.check-os-release: remote OS matches local OS %rÚNAMEÚ?r‹   Ú )Úunsupported)r2   r3   r   r@   rb   ÚpackagesÚrouting_rulesÚinsertr   r   r   r   r   ÚallÚitemsÚopenÚreadÚOSErrorÚwarningr.   )rL   r­   r£   r®   r¯   rC   ÚosinfoÚfÚthis_osÚerÅ   r½   s   &&&&&      @r!   Údo_custom_commandÚ$AuthorizeResponder.do_custom_commandÊ   s÷  øé € Ü�‰Ð1°7À&ÔIàÐ-Ô-Ø‰LˆKä#+Ô3FÀ{Ó3SÔ#TˆD�K‰KÔ Ø�K‰K×%Ñ%×,Ñ,¨QÔ0BÀ4Ç;Á;ÔQ`ÐPaÓ0bÔcàÐ/Ô/Ü  °t¸AµwÔ?Ð?àÐ0Õ0Ü(¨¨a­Ó1ˆIÜ�L‰LÐBÀIÔNÜ�L‰LÐGÌÔXç(�ç“3ÔH¸¿¹¼ÓH—3—3’3ÔH¸¿¹¼ÓH×HÔHÜ—L‘LÐ![Ð]cÔdÚñ	 )ô �L‰LÐ?ÀÔKðÜÐ+×,Ô,°Ü.¨q¯v©v«xÓ8�G÷ -ð �}‰}˜TÓ" g§k¡k°$Ó&7Ô7¸I¿M¹MÈ,Ó<WÐ[b×[fÑ[fÐgsÓ[tÔ<tÜ—‘ÐVÐX_Ô`Ùà&Ÿ]™]¨6°9·=±=ÀÀsÓ3KÓLÐMÈQÈyÏ}É}Ð]iÐkmÓOnÐNoÐpˆKÜ  ¸;ÔGÐGñ3 1÷ -×,ûäô Ü—‘ÐjÐlmÔnÝûðüsa   ƒD!J&Ä')J&Å1J&ÆI7 ÆI$Æ4I7 Æ<B(J&É$I4	É/I7 É3J&É4I7 É7J#ÊJÊJ&ÊJ#Ê#J&c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # ra   rc   )r    rG   s   "€r!   r"   r€   z   s   ø‡ ‚ á�Nò r#   )r   r‚   rb   N)zferny.askpassr´   r¶   r¸   )r*   rT   rU   rV   ÚcommandsrM   rª   rÓ   rW   rX   rY   rZ   s   @r!   r}   r}   z   s5   ø‡ € Øp€H÷>ð >÷
Eð E÷N%Hð %H÷a ƒ r#   r}   c                ó~   € V ^8„  d   QhR\         R\        \        \         ,          \        \         ,          3,          /# )r   Úcommentr   )rE   r°   r   )r    s   "r!   r"   r"   ò   s,   € ÷ 2ñ 2¤ð 2¬¬h´s­m¼XÄc½]Ð.JÕ(Kñ 2r#   c                 ó   € R RRV  23R3# )Úpython3z-icz# rs   rs   )rØ   s   &r!   Úpython_interpreterrÛ   ò   s   € Ø�u  7 )˜nÐ-¨rÐ1Ð1r#   c                ó¸   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\        \         \        ,          \         \        ,          3,          /# )r   ÚcmdÚdestÚssh_askpassÚssh_optsr   )r   rE   r   r°   )r    s   "r!   r"   r"   ö   sL   € ÷ ñ ”œ#•ð ¤cð ¼ð Ìð ÔQVÔW_Ô`cÕWdÔfnÔorÕfsÐWsÕQtñ r#   c                 óN  € VP                  R 4      w  rEpVP                  4       '       dR   VP                  R 4      '       g;   VP                  R4      '       d   VP                  R4      '       d   V^R	 pRVRV.pMRV.pR.VOVO\        P
                  ! V 4      N5RV: 2RR33# )
Ú:Ú[Ú]z-pz--ÚsshzSSH_ASKPASS=z	DISPLAY=xzSSH_ASKPASS_REQUIRE=forceéÿÿÿÿ)Ú
rpartitionÚisdigitÚendswithr›   ÚshlexÚjoin)rÝ   rÞ   rß   rà   ÚhostÚ_ÚportÚdestinations   &&&*    r!   Úvia_sshrð   ö   s¹   € Ø—O‘O CÓ(�M€DˆTà‡|�|‡~‚~˜dŸm™m¨C×0Ò0à�?‰?˜3×Ò D§M¡M°#×$6Ò$6Ø˜˜"�:ˆDØ˜T 4¨Ð.‰à˜T�lˆð 	ðØðØ&ðÜ(-¯
ª
°3«ñð �{‘oÐ&ð 	Ø#ððð r#   c          	      ó¶   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r   rÝ   Úenvr   )r   rE   r°   )r    s   "r!   r"   r"     s>   € ÷ ñ ”x¤•}ð ¬8´C­=ð ¼UÄ8ÌCÅ=ÔRZÔ[^ÕR_ÐC_Õ=`ñ r#   c                 ó&   € R R.R V 4       OV O5R3# )zflatpak-spawnz--hostc              3   ó,   "  € T F
  pR V 2x € K  	  R# 5i)z--env=Nrs   )rº   Úkvs   & r!   r¾   Ú flatpak_spawn.<locals>.<genexpr>  s   é € Ð	&¡#˜BˆF�2�$�-£#ùs   ‚rs   rs   )rÝ   rò   s   &&r!   Úflatpak_spawnr÷     s2   € à˜ðá	&¡#Ó	&ðð 
ñðð	ð r#   c                   ó¶   a a€ ] tR tR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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tRtVtV ;t# )ÚSshPeeri  c                ó@   <€ V ^8„  d   QhRS[ RS[RS[P                  /# )r   rb   rï   r£   )r   rE   ÚargparseÚ	Namespace)r    rG   s   "€r!   r"   ÚSshPeer.__annotate__  s(   ø€ ÷ !ñ !™vð !±Cð !¹x×?QÑ?Qñ !r#   c                óì   <€ W n         VP                  V n        \        P                  ! 4       V n        \        V P                  P                  4      R ,          V n        RV n        \        SV `)  V4       R# )zuser-known-hostsN)rï   Úremote_bridgeÚtempfileÚTemporaryDirectoryÚtmpdirr   ÚnameÚknown_hosts_filer   rf   rM   )rL   rb   rï   r£   rg   s   &&&&€r!   rM   ÚSshPeer.__init__  sY   ø€ Ø&ÔØ!×/Ñ/ˆÔÜ×1Ò1Ó3ˆŒÜ $ T§[¡[×%5Ñ%5Ó 6Ð9KÕ KˆÔØ,0ˆÔÜ‰Ñ˜Ö r#   c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rý      s   ø€ ÷ 3ñ 3¨Dñ 3r#   c              ƒ  óÄ   "  € \         P                  P                  R 4      '       d   V P                  4       G Rj  x€L
  R# V P	                  4       G Rj  x€L
  R#  L  L5i)z/.flatpak-infoN)r,   r/   ÚexistsÚconnect_from_flatpakÚconnect_from_bastion_hostrv   s   &r!   Údo_connect_transportÚSshPeer.do_connect_transport   sE   é € ä�7‰7�>‰>Ð*×+Ò+Ø×+Ñ+Ó-×-Ò-à×0Ñ0Ó2×2Ò2ñ .á2ùs!   ‚9A »A¼A ÁAÁA ÁA c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rý   '  s   ø€ ÷ "ñ "¨Dñ "r#   c              ƒ  óÚ   "  € \        R 4      w  rV P                  R8w  d!   \        WP                  \        4       4      w  r\	        W4      w  rV P                  W4      G Rj  x€L
  R#  L5i)úcockpit-bridgeÚ	localhostN)rÛ   rï   rð   r>   r÷   Úboot)rL   rÝ   rò   s   &  r!   r	  ÚSshPeer.connect_from_flatpak'  sX   é € ä%Ð&6Ó7‰ˆð ×Ñ˜{Ô*ä˜s×$4Ñ$4Ô6JÓ6LÓM‰HˆCä  Ó*‰ˆà�i‰i˜Ó!×!Ô!ùs   ‚A A+Á"A)Á#A+c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rý   4  s   ø€ ÷ '"ñ '"°ñ '"r#   c              ƒ  óØ  "  € R pRR.pV P                   P                  R4      G R j  x€L
 p\        VR4      pVP                  R4      '       d‚   \        P
                  ! VR,          4      P                  4       pVP                  R4      w  rgpVP                  R4      w  r‡V n        V'       d"   \        P                  R	V4       VR
V.,          pV P                  f   VRR.,          p\        R4      w  rš\        R4      p\        V\        4      '       g   Q h\        V4      pVP!                  4       '       g   \        P#                  RV4       \$        P&                  ! R4      pVe   VRRV 2.,          pVe5   V P(                  P+                  V4       VRRV P(                  : 2.,          p\-        W�P.                  V.VO5!  w  ršV P1                  Wš4      G R j  x€L
  R #  EL¾ L	5i)Nz-ozNumberOfPasswordPrompts=1Ú*r¨   zBasic :é   NNÚ râ   z,got username %s and password from Basic authz-lzPasswordAuthentication=nor  z${libexecdir}/cockpit-askpassz+Could not find cockpit-askpass helper at %rÚCOCKPIT_SSH_KNOWN_HOSTS_FILEzGlobalKnownHostsFile=zUserKnownHostsfile=)rb   Úrequest_authorization_objectr   r›   r–   rž   r™   Ú	partitionr   r2   r3   rÛ   r   Ú
isinstancerE   r   r  Úerrorr,   Úgetenvr  Ú
write_textrð   rï   r  )rL   Úknown_hostsr£   Úauthr¨   ÚdecodedÚuser_passwordrí   ÚuserrÝ   rò   Úaskpassrß   Úenv_known_hostss   &             r!   r
  Ú!SshPeer.connect_from_bastion_host4  sÄ  é € ØˆàÐ1Ð2ˆð —[‘[×=Ñ=¸cÓB×BˆÜ˜4 Ó,ˆà×Ñ˜x×(Ò(Ü×&Ò& x°¥|Ó4×;Ñ;Ó=ˆGØ,3×,=Ñ,=¸dÓ,CÑ)ˆM˜kØ+8×+BÑ+BÀ3Ó+GÑ(ˆD�TÔ(ßÜ—‘ÐKÈTÔRØ˜˜t˜Õ$�à×ÑÒ&Ø�TÐ6Ð7Õ7ˆDô &Ð&6Ó7‰ˆô #Ð#BÓCˆÜ˜'¤3×'Ò'Ð'Ð'Ü˜7“mˆØ×!Ñ!×#Ò#Ü�L‰LÐFÈÔPäŸ)š)Ð$BÓCˆØÒ&Ø�TÐ2°?Ð2CÐDÐEÕEˆDàÒ"Ø×!Ñ!×,Ñ,¨[Ô9Ø�TÐ0°×1FÑ1FÑ0IÐJÐKÕKˆDÜ˜3× 0Ñ 0°+ÐEÀÓE‰ˆà�i‰i˜Ó!×!Ò!òC CñB 	"ùs"   ‚%G*§G%¨F6G*ÇG(ÇG*Ç(G*c                óJ   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RR/# )r   rÝ   rò   r   N)r   rE   )r    rG   s   "€r!   r"   rý   ]  s*   ø€ ÷ "ñ "™h¡s�mð "±(¹3µ-ð "ÀDñ "r#   c              ƒ  óÈ  "  € \        V 4      p\        P                  ! \        V P                  V P
                  4      V.4      p\        P                  R W4       V P                  WVRR7      G Rj  x€L
 pV P                  R8X  d	   RR.33.pMKV P                  R8X  d	   RR.33.pM2V P                  R	8X  d   RR.33R
. 33.pMV P                  R8X  g   Q h. p\        P                  ! . VOR\        \        P                  ! 4       4      .3NVP                  O\         R7      pVP#                  VP%                  4       4       VP'                  4       G Rj  x€L
  R#  Lì L5i)z Launching command: cmd=%s env=%sT)r¯   Ústart_new_sessionNÚautoÚtry_execr  Úalwaysr]   Ú	supportedr\   Úneverr[   )Úgadgets)r   r
   ÚInteractionAgentr}   rb   r   r2   r3   Úspawnrÿ   r   Úmake_bootloaderr±   r   Úget_condition_filesÚstepsÚBEIBOOT_GADGETSÚwriter˜   Úcommunicate)rL   rÝ   rò   Úbeiboot_helperÚagentÚ	transportÚexec_cockpit_bridge_stepsÚstage1s   &&&     r!   r  ÚSshPeer.boot]  sq  é € Ü,¨TÓ2ˆÜ×&Ò&Ô(:¸4¿;¹;È×H[ÑH[Ó(\Ð^lÐ'mÓnˆä�‰Ð7¸ÔBØŸ*™* S°eÈt˜*ÓT×Tˆ	à×Ñ Ô'Ø*4Ð8HÐ7IÐ6KÐ)LÐ(MÑ%Ø×Ñ 8Ô+Ø*6Ð:JÐ9KÐ8MÐ)NÐ(OÑ%Ø×Ñ ;Ô.à*4Ð8HÐ7IÐ6KÐ)LÐOaÐdfÐchÐNiÐ(jÑ%à×%Ñ%¨Ô0Ð0Ð0Ø(*Ð%ô ×+Ò+ð -
Ø&ð-
àœt¤N×$FÒ$FÓ$HÓIÐJÐKð-
ð ×!Ñ!ð-
ô #ô	$ˆð
 	�‰˜Ÿ™›Ô(ð ×ÑÓ!×!Ò!ñ- Uñ, 	"ùs%   ‚A/E"Á1EÁ2C%E"ÅE ÅE"Å E"c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rý   z  s   ø€ ÷ #ñ #¨ñ #r#   c                ó   € R V n         R # rJ   )r   rv   s   &r!   Údo_superuser_init_doneÚSshPeer.do_superuser_init_donez  s
   € Ø"ˆÖr#   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   r·   r   Nrl   )r    rG   s   "€r!   r"   rý   }  s   ø€ ÷ eñ e¡Jð e°4ñ er#   c                óˆ  € \         P                  R WP                  RJ4       \        VR4      P	                  R4      '       dV   \        VR4      pV P                  e<   \         P                  R4       V P                  RW P                  R7       RV n        R# \         P                  R4       V P                  RXR	R
7       R# )z*SshPeer.do_authorize: %r; have password %sNr§   zplain1:Úcookiez-SshPeer.do_authorize: responded with passwordÚ	authorize)r­   rD  r¨   z0SshPeer.do_authorize: authentication-unavailablezauthentication-unavailable)r­   rD  Úproblem)r2   r3   r   r   r›   Úwrite_control)rL   r·   rD  s   && r!   Údo_authorizeÚSshPeer.do_authorize}  s¡   € Ü�‰ÐAÀ7×L_ÑL_ÐgkÐLkÔlÜ�7˜KÓ(×3Ñ3°I×>Ò>Ü˜W hÓ/ˆFØ×"Ñ"Ò.Ü—‘ÐLÔMØ×"Ñ"¨;¸v×PcÑPcÐ"ÔdØ&*�Ô#Ùä�‰ÐGÔHØ×Ñ ;°vÐGcÐÖdr#   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r   zMLiteral["always"] | Literal["never"] | Literal["supported"] | Literal["auto"]Úmoders   )r    rG   s   "€r!   r"   rý     s   ø‡ ‚ Ø
YÑYò r#   )r   rï   r  rÿ   r  )r*   rT   rU   rV   rM   r  r	  r
  r  r@  rH  rW   rX   rY   rz   r{   s   @@r!   rù   rù     sV   ù‡ € ÷!ó !÷3ð 3÷"ð "÷'"ð '"÷R"ð "÷:#ð #÷eð e÷Q … r#   rù   c                   óx   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltR tV3R lR	 ltV3R
 lt	Rt
VtV ;t# )Ú	SshBridgei‹  Nc                ó4   <€ V ^8„  d   QhRS[ P                  /# )r   r£   )rû   rü   )r    rG   s   "€r!   r"   ÚSshBridge.__annotate__�  s   ø€ ÷ 	"ñ 	"™X×/Ñ/ñ 	"r#   c                ó–   <€ \        V 4      p\        SV `	  V.4       \        WP                  V4      V n        V P
                  Vn        R # rJ   )r_   rf   rM   rù   rï   Ússh_peerrn   )rL   r£   Úrulerg   s   && €r!   rM   ÚSshBridge.__init__�  s?   ø€ ô " $Ó'ˆÜ‰Ñ˜$˜Ô ô   ×&6Ñ&6¸Ó=ˆŒØ—M‘MˆŽ	r#   c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rO  š  s   ø€ ÷ ñ ˜dñ r#   c                ó   € R # rJ   rs   rv   s   &r!   Údo_send_initÚSshBridge.do_send_initš  s   € Ùr#   c                óh   € \         P                  R V4       V P                  P                  V4       R# )zSshBridge.do_init: %rN)r2   r3   rQ  rG  )rL   r·   s   &&r!   Údo_initÚSshBridge.do_init�  s%   € ô 	�‰Ð,¨gÔ6Ø�‰×#Ñ# GÖ,r#   c                ó   <€ V ^8„  d   QhRR/# rr   rs   )r    rG   s   "€r!   r"   rO  £  s   ø€ ÷ 4ñ 4˜tñ 4r#   c                óP   € V P                   P                  V P                  4       R # rJ   )rQ  Úadd_done_callbackru   rv   s   &r!   Úsetup_sessionÚSshBridge.setup_session£  s   € à�‰×'Ñ'¨¯
©
Ö3r#   c                óB   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[;R&   # )r   rÆ   rQ  )r   r   rù   )r    rG   s   "€r!   r"   rO  ‹  s    ø‡ ‚ Ù‘xÕ Ñ'ñ áÑò r#   )rQ  )r*   rT   rU   rV   rÆ   rM   rV  rY  r^  rW   rX   rY   rz   r{   s   @@r!   rM  rM  ‹  s4   ù‡ € Ø#'€H÷	"ó 	"÷ð ò-÷4ð 4÷1 … r#   rM  c                ó   € V ^8„  d   QhRR/# rr   rs   )r    s   "r!   r"   r"   ¨  s   € ÷ Dñ D�tñ Dr#   c              ƒ   óæ  "  € \         P                  R 4       \        V 4      p\        \        P
                  ! 4       V4        \        VP                  P                  4       G Rj  x€L
 4      pVP                  P                  P                  4       '       d:   VP                  RRRRVP                  P                  P                  4       /R7       VP                  R/ 4      p\        V\        4      '       g   VP                  RR	R
R7       R# \        V\        4      '       g   Q hRVR&   VP                  '       d-   \        P!                  VP                  P                  4      VR&   VP                  V4       VP                  P#                  4        \         P                  R4       TP?                  4         TPA                  4       G Rj  x€L
  R#  ELp  \$        P&                   Edy   p\$        P(                  P+                  \-        T4      4      p\         P                  RYE4       \        T\$        P.                  4      '       d   RpM„\        T\$        P0                  4      '       d   RpMa\        T\$        P2                  4      '       d   RpM>\        T\4        4      '       d   RpM%\        T\$        P6                  4      '       d   RpMRpTP                  P                  P                  4       '       dB   TP                  RT\-        T4      TP                  P                  P                  4       R7       MTP                  RT\-        T4      R7        Rp?R# Rp?i\8         d?   p\         P                  RT4       TP                  TP:                  RR7        Rp?R# Rp?i\        P<                   d    \         P                  R4        R# i ; i EL  \B         d     R# i ; i5i)zHi. How are you today?NrE  zx-login-datar�   zknown-hosts)r­   r§   rD  Ú
login_dataÚcapabilitiesÚinitzprotocol-errorzcapabilities must be a dict)r­   rF  r·   Tzexplicit-superuserrÆ   z.ferny.InteractionError: %s, interpreted as: %rzauthentication-failedzinvalid-hostkeyzunknown-hostkeyzunknown-hostzinternal-error)r­   rF  r·   r  zCockpitProblem: %s)r­   z"Peer bridge got cancelled, exitingz/Startup done.  Looping until connection closes.)"r2   r3   rM  r   ÚasyncioÚget_running_loopÚdictrQ  Ústartr  r  rG  Ú	read_textÚ
setdefaultr  rÆ   ÚfromkeysÚthaw_endpointr
   ÚInteractionErrorÚ
ssh_errorsÚget_exception_for_ssh_stderrrE   ÚSshAuthenticationErrorÚSshChangedHostKeyErrorÚSshHostKeyErrorrÍ   ÚSshErrorr   ÚattrsÚCancelledErrorr^  r7  ÚBrokenPipeError)r£   Úbridger·   rd  Úexcr  rF  s   &      r!   Úrunrz  ¨  sý  é € Ü
‡L�LÐ)Ô*ä�t‹_€FÜ”7×+Ò+Ó-¨vÔ6ð6Ü˜VŸ_™_×2Ñ2Ó4×4Ó5ˆà�?‰?×+Ñ+×2Ñ2×4Ò4Ø× Ñ Ø#¨~ÀcØ! 6§?¡?×#CÑ#C×#MÑ#MÓ#OðWð !ô ð ×)Ñ)¨.¸"Ó=ˆÜ˜,¬×-Ò-Ø× Ñ ¨Ð9IÐSpÐ ÔqÙÜ˜,¬×-Ò-Ð-Ð-Ø-1ˆÐ)Ñ*ð �?�?ˆ?Ü"&§-¡-°·±×0HÑ0HÓ"IˆG�JÑà×Ñ˜WÔ%Ø�‰×%Ñ%Ô'ô@ ‡L�LÐBÔCØ
×ÑÔðØ× Ñ Ó"×"Ò"òu 5øô0 ×!Ñ!õ Ü× Ñ ×=Ñ=¼cÀ#»hÓGˆÜ�‰ÐEÀsÔRÜ�eœU×9Ñ9×:Ò:Ø-‰GÜ˜œu×;Ñ;×<Ò<Ø'‰GÜ˜œu×4Ñ4×5Ò5Ø'‰GÜ˜œw×'Ò'à$‰GÜ˜œuŸ~™~×.Ò.Ø-‰Gà&ˆGà�?‰?×+Ñ+×2Ñ2×4Ò4Ø× Ñ ¨¸Ì#ÈeË*Ø-3¯_©_×-MÑ-M×-WÑ-WÓ-Yð !õ [ð × Ñ ¨¸Ì#ÈeË*Ð ÔUÝûÜô Ü�‰Ð)¨3Ô/Ø×Ñ˜SŸY™Y°ÐÔ7ÝûÜ×!Ñ!ô Ü�‰Ð9Ô:Úðúò 	#øÜô âðüsÄ   ‚A O1Á"G Á%GÁ&1G ÂA5G ÄO1Ä.G Ä>AG Æ%O1Æ;O ÇOÇO ÇO1ÇG ÇOÇ.DM!Ë=AM!ÍO1Í!OÍ.OÍ/3N(Î"O1Î(OÎ?OÏO1ÏOÏO1ÏO ÏO.Ï*O1Ï-O.Ï.O1c                ó   € V ^8„  d   QhRR/# rr   rs   )r    s   "r!   r"   r"   ï  s   € ÷ -ñ -ˆdñ -r#   c                  óz  € \         P                  ! 4        \        P                  ! R R7      p V P	                  R. RORRR7       V P	                  RRR7       V P	                  R	R
R7       V P                  4       p\        VP                  R7       \        P                  ! \        V4      VP                  R7       R# )z@cockpit-bridge is run automatically inside of a Cockpit session.)Údescriptionz--remote-bridger*  zÞHow to run cockpit-bridge from the remote host: auto: if installed (default), never: always copy the local one; supported: if not installed, copy local one for compatible OSes, fail otherwise; always: fail if not installed)ÚchoicesrŒ   Úhelpz--debugÚ
store_true)Úactionrï   z5Name of the remote host to connect to, or 'localhost')r  )r3   N)r*  r.  r-  r,  )
r	   Úinstallrû   ÚArgumentParserÚadd_argumentÚ
parse_argsr   r3   rf  rz  )Úparserr£   s     r!   Úmainr‡  ï  s™   € Ü×ÒÔä×$Ò$Ð1sÔt€FØ
×ÑÐ)Ò3[Ðekð8ð ô 9ð
 ×Ñ˜	¨,ÐÔ7Ø
×Ñ˜Ð,cÐÔdØ×ÑÓ€Dä˜Ÿ
™
Õ#ä‡K‚K”�D“	 §¡×,r#   Ú__main__)Drû   rf  r–   Úimportlib.resourcesr'   Úloggingr,   r‘   rê   r   r•   Úpathlibr   Útypingr   r   r   r   Úcockpitr	   Úcockpit._vendorr
   Úcockpit._vendor.beir   Úcockpit.beipackr   Úcockpit.bridger   r   Úcockpit.channelr   Úcockpit.channels.packagesr   Úcockpit.jsonutilr   r   Úcockpit.osinfor   Úcockpit.packagesr   r   r   Úcockpit.peerr   Úcockpit.protocolr   r   Úcockpit.routerr   r   Úcockpit.transportsr   Ú	getLoggerr2   r>   r@   r5  r_   ÚAskpassHandlerr}   rÛ   rð   r÷   rù   rM  rz  r‡  r*   rs   r#   r!   Ú<module>r�     s"  ðó Û Û Û Û Û 	Û 	Û Û Û Ý ß 4Ó 4å Ý !Ý *Ý /ß :Ý .Ý 5ß 0Ý )ß GÑ GÝ ß Aß .Ý -à	×	Ò	Ð,Ó	-€õôD1˜.ô 1ð ð ð
 ð ð ð ðð. ×Ñð/€ô6˜ô ôuH˜×-Ñ-ô uHõp2õõ,ôseˆdô seôl4�ô 4õ:DõN-ð$ ˆzÔÙ†Fñ r#   