ó
    ¡7�j´#  ã                   óú   • 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  S SK	J
r
  SSKJrJrJrJr  SSKJrJr  SSKJrJr  \R,                  " \5      r " S S	\
R2                  5      r " S
 S\5      r " S S\5      rg)é    N)ÚDictÚListÚOptionalÚTuple)Úfernyé   )Ú
JsonObjectÚ	JsonValueÚget_strÚget_str_or_none)ÚPeerÚ	PeerError)ÚRouterÚRoutingRulec                   óÚ   • \ rS rSr% \R
                  " S5      r\\   \	S'   \
\\\\\\4      \	S'   \\   \	S'   \\	S'   S\\   4S jrS\S	\S
\S\S\S\4S jrS\S\S\S\\   4S jrSrg)ÚPasswordResponderé!   z!Enter passphrase for key '(.*)': ÚpasswordÚhostkeys_seenÚerror_messageÚpassword_attemptsc                 ó:   • Xl         / U l        S U l        SU l        g )Nr   )r   r   r   r   )Úselfr   s     Ú0/usr/lib/python3/dist-packages/cockpit/remote.pyÚ__init__ÚPasswordResponder.__init__*   s   € Ø ŒàˆÔØ!ˆÔØ!"ˆÕó    ÚreasonÚhostÚ	algorithmÚkeyÚfingerprintÚreturnc              ƒ   óH   #   • U R                   R                  XX4U45        g7f)NF)r   Úappend)r   r   r   r    r!   r"   s         r   Ú
do_hostkeyÚPasswordResponder.do_hostkey1   s#   é € Ø×Ñ×!Ñ! 6°ÀÐ"MÔNØùs   ‚ "ÚmessagesÚpromptÚhintc              ƒ   ób  #   • [         R                  SX25        [        R                  R	                  U5      nUb2  UR                  S5      n[         R                  SU5        SU 3U l        g U R                  c   eU R                  S:X  d   eU =R                  S-  sl        U R                  $ 7f)NzGot askpass(%s): %sr   zCThis is a passphrase request for %s, but we don't do those.  Abort.zlocked identity: r   )	ÚloggerÚdebugr   ÚPASSPHRASE_REÚ	fullmatchÚgroupr   r   r   )r   r(   r)   r*   ÚmatchÚpaths         r   Ú
do_askpassÚPasswordResponder.do_askpass5   s    é € Ü�‰Ð*¨DÔ9ä!×/Ñ/×9Ñ9¸&ÓAˆØÑð —;‘;˜q“>ˆDÜ�L‰LÐ^Ð`dÔeØ#4°T°FÐ!;ˆDÔØà�}‰}Ñ(Ð(Ð(Ø×%Ñ%¨Ó*Ð*Ð*Ø×Ò !Ñ#ÕØ�}‰}Ðùs   ‚B-B/)r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚreÚcompiler.   r   ÚstrÚ__annotations__r   r   Úintr   Úboolr&   r3   Ú__static_attributes__© r   r   r   r   !   s­   ‡ Ø—J’JÐCÓD€Mà�s‰mÓà˜˜c 3¨¨S°#Ð5Ñ6Ñ7Ó7Ø˜C‘=Ó ØÓð# ¨#¡ô #ð sð °#ð À#ð ÈCð Ð^að Ðfjô ð¨ð °cð Àð ÈÐRUÉ÷ r   r   c                   óî   ^ • \ rS rSr% Sr\\R                     \S'   \	\S'   \\	   \S'   \\	   \S'   \
\S'   SS	 jrSS
SS
S\SS4U 4S jjrS\SS4S jrSS jrS\S\	S\\	   S\S\
SS4U 4S jjrSrU =r$ )ÚSshPeeréH   NÚsessionr   Úuserr   Úprivater#   c           
   ƒ   ó’  #   • U R                   c   e[        R                  SU R                  U R                  U R
                  5        U R                  R                  S5      u  pnU(       a#  UR                  5       (       a  Un[        U5      nOU R                  nS n[        U R                  5      nSS0nU R                  b  UR                  SS9  OUR                  SSS9   U R                   R                  X@R                  UU R
                  UUS	9I S h  v•N   U R                   R?                  S/5      nU RA                  U/ 5      I S h  v•N   g  N;! [        [        R                  4 a0  n[        R                  S
XH5        [!        SS[#        U5      S9UeS nAf[$        R&                   a³  nUR(                  (       a!  UR(                  S   u  p”p«nU SU
 SU 3US.nO0 n[+        U[$        R,                  5      (       a  SnOU R
                  (       a  SnOSn[        R                  S[/        U5      X€R
                  UR(                  Xí5        [!        XíU0 S9UeS nAf[$        R0                   aˆ  n[        R                  SXH5        [2        R5                  UR6                  S5      nSU;   a(  U R                  b  UR8                  S:X  a  SUS'   OSUS'   [!        SUR:                  =(       d    SUS9UeS nAf[$        R<                   a/  n[        R                  SXH5        [!        S[#        U5      S9UeS nAff = f GNõ7f)Nz1Starting ssh session user=%s, host=%s, private=%sÚ:ÚStrictHostKeyCheckingÚyesÚ1)ÚNumberOfPasswordPromptsÚno)ÚPasswordAuthenticationÚKbdInteractiveAuthentication)Ú
login_nameÚportÚhandle_host_keyÚoptionsÚinteraction_responderz connecting to host %s failed: %szno-host)ÚerrorÚmessager   Ú )zhost-keyzhost-fingerprintzinvalid-hostkeyzunknown-hostkeyzunknown-hostzPSshPeer got a %s %s; private %s, seen hostkeys %r; raising %s with extra args %r)rU   Úauth_method_resultsz$authentication to host %s failed: %sznot-providedr   z	not-triedÚdeniedzauthentication-failedz)unknown failure connecting to host %s: %szinternal-error)rV   zcockpit-bridge)!rD   r,   r-   rE   r   rF   Ú
rpartitionÚisdigitr=   r   r   ÚupdateÚconnectÚOSErrorÚsocketÚgaierrorr   r;   r   ÚSshHostKeyErrorr   Ú
isinstanceÚSshChangedHostKeyErrorÚtypeÚSshAuthenticationErrorÚdictÚfromkeysÚmethodsr   r   ÚSshErrorÚwrap_subprocess_argsÚspawn)r   ÚbasenameÚcolonÚportstrr   rQ   Ú	responderrS   ÚexcÚ_reasonr    r!   r"   Ú
error_argsrU   ÚresultsÚargss                    r   Údo_connect_transportÚSshPeer.do_connect_transportO   só  é € Ø�|‰|Ñ'Ð'Ð'Ü�‰ÐHÈ$Ï)É)ÐUY×U^ÑU^Ð`d×`lÑ`lÔmà#'§9¡9×#7Ñ#7¸Ó#<Ñ ˆ˜Þ�W—_‘_×&Ñ&ØˆDÜ�w“<‰Dà—9‘9ˆDØˆDä% d§m¡mÓ4ˆ	Ø*¨EÐ2ˆà�=‰=Ñ$Ø�N‰N°3ˆNÒ7à�N‰N°$ÐUYˆNÑZð.	IØ—,‘,×&Ñ& t¿	¹	ÈØ7;·|±|ÈWØ=Fð 'ð H÷ Hð Hð^ �|‰|×0Ñ0Ð2BÐ1CÓDˆØ�j‰j˜˜rÓ"×"Ñ"ñaHøô œŸ™Ð)ó 	SÜ�L‰LÐ;¸TÔGÜ˜I¨YÄÀCÃÑIÈsÐRûä×$Ñ$ó 	]Ø×&×&ð >G×=TÑ=TÐUVÑ=WÑ:�˜y¨{Ø-1¨F°!°I°;¸aÀ¸uÐ*EÐ[fÑg‘
à�
ä˜#œu×;Ñ;×<Ñ<Ø)‘Ø——Ø)‘ð '�ä�L‰LÐkÜ˜c› C¯©°y×7NÑ7NÐPUôcä˜E°UÐPRÑSÐY\Ð\ûä×+Ñ+ó 	BÜ�L‰LÐ?ÀÔKä—m‘m C§K¡K°Ó@ˆGØ˜WÓ$¨¯©Ñ)BØ×.Ñ.°!Ó3Ø*5�G˜JÒ'à*2�G˜JÑ'äÐ3Ø"+×"9Ñ"9×"TÐ=TØ07ñ9à>AðBûô �~‰~ó 	IÜ�L‰LÐDÀdÔPÜÐ,´c¸#³hÑ?ÀSÐHûð	Iúò
 	#ùsn   ‚C"MÃ%4E ÄEÄE Ä1MÅMÅMÅE ÅMÅ1+FÆMÆ3B.I!É!MÉ8BK;Ë;MÌ*L<Ì<MÍMz
str | Noner0   rV   c                 ón   >• XR                   :X  a  U R                  5         g Uc  [        TU ]  XU5        g g ©N)r   ÚcloseÚsuperÚdo_kill)r   r   r0   rV   Ú	__class__s       €r   r{   ÚSshPeer.do_kill–   s.   ø€ Ø—9‘9ÓØ�J‰J�LØ‰\Ü‰G‰O˜D¨Õ1ð r   c                 ó²   • [        US5      R                  S5      (       a7  [        US5      nU R                  SX R                  =(       d    SS9  S U l        g g )NÚ	challengezplain1:ÚcookieÚ	authorizeÚ )Úcommandr€   Úresponse)r   Ú
startswithÚwrite_controlr   )r   rV   r€   s      r   Údo_authorizeÚSshPeer.do_authorizeœ   sO   € Ü�7˜KÓ(×3Ñ3°I×>Ñ>Ü˜W hÓ/ˆFØ×Ñ {¸6ÏMÉM×L_Ð]_ÐÑ`Ø ˆD�Mð ?r   c                 ó   • S U l         g rx   )r   )r   s    r   Údo_superuser_init_doneÚSshPeer.do_superuser_init_done¢   s	   € Øˆ�r   ÚrouterrS   c                óò   >• [         TU ]  U5        X l        X0l        [	        USS 5      U l        XPl        [        R                  " 5       U l	        [        USS 5      nUS;   a  SnOSU0nU R                  X'S9  g )Nr   zinit-superuser)NÚnoneFÚid)Ú	init_hostÚ	superuser)rz   r   r   rE   r   r   rF   r   ÚSessionrD   r   Ústart_in_background)	r   rŒ   r   rE   rS   rF   Úinit_superuserr‘   r|   s	           €r   r   ÚSshPeer.__init__¥   su   ø€ Ü‰Ñ˜Ô ØŒ	ØŒ	Ü ¨°TÓ:ˆŒØŒä—}’}“ˆŒô )¨Ð2BÀDÓIˆØ˜^Ó+Ø‰Ià˜~Ð.ˆIà× Ñ ¨4Ð ÒEr   )r   r   rF   rD   rE   )r#   N)r5   r6   r7   r8   rD   r   r   r’   r<   r;   r>   ru   r	   r{   r‡   rŠ   r   r   r?   Ú__classcell__©r|   s   @r   rB   rB   H   s¸   ø‡ Ø'+€GˆX�e—m‘mÑ$Ó+Ø
ƒIØ
�3‰-ÓØ�s‰mÓØƒMôE#ðN2˜Lð 2°ð 2È
ð 2ÐW[÷ 2ð! Jð !°4ô !ôðF˜vð F¨Sð F¸À¹ð FÐPZð FÐhlð FÐqu÷ Fõ Fr   rB   c                   ót   ^ • \ rS rSr% \\\\\   \\   4   \4   \	S'   U 4S jr
S\S\\   4S jrS rSrU =r$ )	ÚHostRoutingRuleé¸   Úremotesc                 ó2   >• [         TU ]  U5        0 U l        g rx   )rz   r   r›   )r   rŒ   r|   s     €r   r   ÚHostRoutingRule.__init__»   s   ø€ Ü‰Ñ˜Ô Øˆ�r   rS   r#   c                 óš  ^ ^• T R                   c   eT R                   R                  c   e[        UST R                   R                  5      nUT R                   R                  :X  a  g [        USS 5      nU[        R                  " 5       :X  a  S nU(       d   UR                  S5      u  n  nU=(       d    S n[        USS 5      S:X  a  [        US5      nOS n[        U[        5      (       d   eUb  [        U[        5      (       d   eUb  [        U[        5      (       d   eX#U4m[        R                  SU5        [        R                  ST5        TT R                  ;  a]  [        R                  S	TT R                  5        [        T R                   X#XS LS
9nUR                  UU 4S j5        UT R                  T'   T R                  T   $ )Nr   rE   Ú@rD   rF   Úchannelz!Request for channel %s is remote.zkey=%szC%s is not among the existing remotes %s.  Opening a new connection.)rF   c                  ó:   >• TR                   R                  T 5      $ rx   )r›   Ú__delitem__)r!   r   s   €€r   Ú<lambda>Ú,HostRoutingRule.apply_rule.<locals>.<lambda>â   s   ø€ ¨4¯<©<×+CÑ+CÀCÔ+Hr   )rŒ   r�   r   ÚgetpassÚgetuserrZ   rb   r;   r,   r-   r›   rB   Úadd_done_callback)	r   rS   r   rE   Úuser_from_hostÚ_ÚnonceÚpeerr!   s	   `       @r   Ú
apply_ruleÚHostRoutingRule.apply_rule¿   s�  ù€ Ø�{‰{Ñ&Ð&Ð&Ø�{‰{×$Ñ$Ñ0Ð0Ð0ä�w ¨¯©×(=Ñ(=Ó>ˆØ�4—;‘;×(Ñ(Ó(Øä�w ¨Ó-ˆð ”7—?’?Ó$Ó$ØˆDÞØ#'§?¡?°3Ó#7Ñ ˆN˜A˜qØ!×) TˆDä�7˜I tÓ,°	Ó9Ü˜G YÓ/‰EàˆEä˜$¤×$Ñ$Ð$Ð$Ø‰|œz¨$´×4Ñ4Ð4Ð4Ø‰}¤
¨5´#× 6Ñ 6Ð6Ð6à˜%Ðˆä�‰Ð8¸'ÔBÜ�‰�X˜sÔ#à�d—l‘lÓ"Ü�L‰LÐ^Ð`cÐei×eqÑeqÔrÜ˜4Ÿ;™;¨°GÐRVÐEVÑWˆDØ×"Ñ"Õ#HÔIØ $ˆD�L‰L˜Ñà�|‰|˜CÑ Ð r   c                 óx   • [        U R                  R                  5       5       H  nUR                  5         M     g rx   )Úsetr›   Úvaluesry   )r   r«   s     r   ÚshutdownÚHostRoutingRule.shutdownç   s'   € Ü˜Ÿ™×+Ñ+Ó-Ö.ˆDØ�J‰JŽLò /r   )r›   )r5   r6   r7   r8   r   r   r;   r   r   r<   r   r	   r¬   r±   r?   r–   r—   s   @r   r™   r™   ¸   sN   ø‡ Ø�%˜˜X c™]¨H°S©MÐ9Ñ:¸DÐ@ÑAÓAõð&! *ð &!°¸$±ô &!÷Pð r   r™   )r¥   Úloggingr9   r_   Útypingr   r   r   r   Úcockpit._vendorr   Újsonutilr	   r
   r   r   r«   r   r   rŒ   r   r   Ú	getLoggerr5   r,   ÚAskpassHandlerr   rB   r™   r@   r   r   Ú<module>r¹      sh   ðó$ Û Û 	Û ß .Ó .å !ç EÓ Eß !ß 'à	×	Ò	˜8Ó	$€ô$˜×,Ñ,ô $ôNmFˆdô mFô`1�kõ 1r   