U
    ØccÄ  ã                   @   s$  d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 G d	d
„ d
e7ƒZ8G dd„ de7ƒZ9dS )z
`.AuthHandler`
é    N)#ÚcMSG_SERVICE_REQUESTÚcMSG_DISCONNECTÚ DISCONNECT_SERVICE_NOT_AVAILABLEÚ)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLEÚcMSG_USERAUTH_REQUESTÚcMSG_SERVICE_ACCEPTÚDEBUGÚAUTH_SUCCESSFULÚINFOÚcMSG_USERAUTH_SUCCESSÚcMSG_USERAUTH_FAILUREÚAUTH_PARTIALLY_SUCCESSFULÚcMSG_USERAUTH_INFO_REQUESTÚWARNINGÚAUTH_FAILEDÚcMSG_USERAUTH_PK_OKÚcMSG_USERAUTH_INFO_RESPONSEÚMSG_SERVICE_REQUESTÚMSG_SERVICE_ACCEPTÚMSG_USERAUTH_REQUESTÚMSG_USERAUTH_SUCCESSÚMSG_USERAUTH_FAILUREÚMSG_USERAUTH_BANNERÚMSG_USERAUTH_INFO_REQUESTÚMSG_USERAUTH_INFO_RESPONSEÚcMSG_USERAUTH_GSSAPI_RESPONSEÚcMSG_USERAUTH_GSSAPI_TOKENÚcMSG_USERAUTH_GSSAPI_MICÚMSG_USERAUTH_GSSAPI_RESPONSEÚMSG_USERAUTH_GSSAPI_TOKENÚMSG_USERAUTH_GSSAPI_ERRORÚMSG_USERAUTH_GSSAPI_ERRTOKÚMSG_USERAUTH_GSSAPI_MICÚ	MSG_NAMESÚcMSG_USERAUTH_BANNER)ÚMessage)ÚbÚu)ÚSSHExceptionÚAuthenticationExceptionÚBadAuthenticationTypeÚPartialAuthentication)ÚInteractiveQuery)ÚGSSAuthÚGSS_EXCEPTIONSc                
   @   s6  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dBdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!e"ee#ee$e iZ%e&ee'ee(ee)ee*eiZ+e,d?d@„ ƒZ-dAS )CÚAuthHandlerzC
    Internal class to handle the mechanics of authentication.
    c                 C   s^   t  |¡| _d | _d| _d | _d| _d | _d | _d | _	d | _
d | _d | _d| _d | _d| _d S )NFÚ r   T)ÚweakrefÚproxyÚ	transportÚusernameÚauthenticatedÚ
auth_eventÚauth_methodÚbannerÚpasswordÚprivate_keyÚinteractive_handlerÚ
submethodsÚauth_usernameÚauth_fail_countÚgss_hostÚgss_deleg_creds)Úselfr3   © rB   ú9/tmp/pip-unpacked-wheel-rglolp_m/paramiko/auth_handler.pyÚ__init__Q   s    zAuthHandler.__init__c                 G   s   | j j|Ž S ©N)r3   Ú_log)rA   ÚargsrB   rB   rC   rF   c   s    zAuthHandler._logc                 C   s   | j S rE   )r5   ©rA   rB   rB   rC   Úis_authenticatedf   s    zAuthHandler.is_authenticatedc                 C   s   | j jr| jS | jS d S rE   )r3   Úserver_moder=   r4   rH   rB   rB   rC   Úget_usernamei   s    zAuthHandler.get_usernamec                 C   s>   | j j ¡  z|| _d| _|| _|  ¡  W 5 | j j ¡  X d S )NÚnone©r3   ÚlockÚacquireÚreleaser6   r7   r4   Ú_request_auth©rA   r4   ÚeventrB   rB   rC   Ú	auth_noneo   s    zAuthHandler.auth_nonec                 C   sD   | j j ¡  z$|| _d| _|| _|| _|  ¡  W 5 | j j ¡  X d S )NÚ	publickey)	r3   rN   rO   rP   r6   r7   r4   r:   rQ   )rA   r4   ÚkeyrS   rB   rB   rC   Úauth_publickeyy   s    zAuthHandler.auth_publickeyc                 C   sD   | j j ¡  z$|| _d| _|| _|| _|  ¡  W 5 | j j ¡  X d S )Nr9   )	r3   rN   rO   rP   r6   r7   r4   r9   rQ   )rA   r4   r9   rS   rB   rB   rC   Úauth_password„   s    zAuthHandler.auth_passwordr0   c                 C   sJ   | j j ¡  z*|| _d| _|| _|| _|| _|  	¡  W 5 | j j ¡  X dS )zK
        response_list = handler(title, instructions, prompt_list)
        úkeyboard-interactiveN)
r3   rN   rO   rP   r6   r7   r4   r;   r<   rQ   )rA   r4   ÚhandlerrS   r<   rB   rB   rC   Úauth_interactive   s    zAuthHandler.auth_interactivec                 C   sJ   | j j ¡  z*|| _d| _|| _|| _|| _|  	¡  W 5 | j j ¡  X d S )Núgssapi-with-mic)
r3   rN   rO   rP   r6   r7   r4   r?   r@   rQ   )rA   r4   r?   r@   rS   rB   rB   rC   Úauth_gssapi_with_micž   s    z AuthHandler.auth_gssapi_with_micc                 C   s>   | j j ¡  z|| _d| _|| _|  ¡  W 5 | j j ¡  X d S )Núgssapi-keyexrM   rR   rB   rB   rC   Úauth_gssapi_keyexª   s    zAuthHandler.auth_gssapi_keyexc                 C   s   | j d k	r| j  ¡  d S rE   )r6   ÚsetrH   rB   rB   rC   Úabort´   s    
zAuthHandler.abortc                 C   s*   t ƒ }| t¡ | d¡ | j |¡ d S ©Nússh-userauth)r%   Úadd_byter   Ú
add_stringr3   Ú_send_message©rA   ÚmrB   rB   rC   rQ   º   s    

zAuthHandler._request_authc                 C   sH   t ƒ }| t¡ | t¡ | d¡ | d¡ | j |¡ | j ¡  d S )NzService not availableÚen)	r%   rd   r   Úadd_intr   re   r3   rf   Úcloserg   rB   rB   rC   Ú!_disconnect_service_not_availableÀ   s    



z-AuthHandler._disconnect_service_not_availablec                 C   sH   t ƒ }| t¡ | t¡ | d¡ | d¡ | j |¡ | j ¡  d S )NzNo more auth methods availableri   )	r%   rd   r   rj   r   re   r3   rf   rk   rg   rB   rB   rC   Ú_disconnect_no_more_authÉ   s    



z$AuthHandler._disconnect_no_more_authc                 C   s&   |j r|j j|j jfS | ¡ |fS dS )z
        Given any key, return its type/algorithm & bits-to-sign.

        Intended for input to or verification of, key signatures.
        N)Zpublic_blobÚkey_typeZkey_blobÚget_name)rA   rV   rB   rB   rC   Ú_get_key_type_and_bitsÒ   s    z"AuthHandler._get_key_type_and_bitsc                 C   sp   t ƒ }| | jj¡ | t¡ | |¡ | |¡ | d¡ | d¡ |  |¡\}}| |¡ | |¡ | ¡ S )NrU   T)	r%   re   r3   Ú
session_idrd   r   Úadd_booleanrp   Zasbytes)rA   rV   Úservicer4   Ú	algorithmrh   Ú_ÚbitsrB   rB   rC   Ú_get_session_blobÞ   s    






zAuthHandler._get_session_blobc                 C   sÂ   d }| j jd k	r t ¡ | j j }| d¡ | j  ¡ s^| j  ¡ }|d ksRt|jtƒrZt	dƒ}|‚| 
¡ rhq†|d k	r |t ¡ kr t	dƒ‚q |  ¡ s¾| j  ¡ }|d kr¨t	dƒ}t|jtƒrº|jS |‚g S )Ngš™™™™™¹?zAuthentication failed.zAuthentication timeout.)r3   Zauth_timeoutÚtimeÚwaitZ	is_activeZget_exceptionÚ
issubclassÚ	__class__ÚEOFErrorr)   Úis_setrI   r+   Zallowed_types)rA   rS   Zmax_tsÚerB   rB   rC   Úwait_for_responseë   s*    




zAuthHandler.wait_for_responsec                 C   s’   |  ¡ }| jjr†|dkr†tƒ }| t¡ | |¡ | j |¡ | jj 	¡ \}}|r‚tƒ }| t
¡ | |¡ | |¡ | j |¡ d S |  ¡  d S rb   )Úget_textr3   rJ   r%   rd   r   re   rf   Úserver_objectZ
get_bannerr$   rl   )rA   rh   rs   r8   ÚlanguagerB   rB   rC   Ú_parse_service_request  s    




z"AuthHandler._parse_service_requestc                 C   sF   | j j}| dd¡|kr2d}|  t| |¡¡ d S | j j| t|ƒƒS )Nú-cert-v01@openssh.comr0   z<Auth rejected: pubkey algorithm '{}' unsupported or disabled)r3   Úpreferred_pubkeysÚreplacerF   r
   ÚformatZ	_key_infor%   )rA   rt   ÚkeyblobÚoptionsÚerrrB   rB   rC   Ú_generate_key_from_request  s    ÿz&AuthHandler._generate_key_from_requestc           	      C   sp  d|kr|S |   td |¡¡ | d¡rft d| jj¡rfd}|| j_|   td¡ |   td |¡¡ |S dd	„ | jj	D ƒ}|   td
 |¡¡ |s–t
dƒ‚t| jj dtdƒ¡ƒ}d }|r&| d¡}|   td |¡¡ tt|j|ƒƒ}|r|d }|   td |¡¡ n|   td¡ d}t| |¡ƒ‚n*|d }d}|   t| |¡¡ |   td¡ | d¡rd|d7 }|| j_|S )NÚrsaz0Finalizing pubkey algorithm for key of type {!r}r„   z-OpenSSH_(?:[1-6]|7\.[0-7])zssh-rsa-cert-v01@openssh.comz)OpenSSH<7.8 + RSA cert = forcing ssh-rsa!z!Agreed upon {!r} pubkey algorithmc                 S   s   g | ]}d |kr|‘qS )rŒ   rB   )Ú.0ÚxrB   rB   rC   Ú
<listcomp>@  s      z:AuthHandler._finalize_pubkey_algorithm.<locals>.<listcomp>zOur pubkey algorithm list: {}zFAn RSA key was specified, but no RSA pubkey algorithms are configured!zserver-sig-algsr0   ú,zServer-side algorithm list: {}r   z)No common pubkey algorithms exist! Dying.z=Unable to agree on a pubkey algorithm for signing a {!r} key!zYServer did not send a server-sig-algs list; defaulting to our first preferred algo ({!r})z”NOTE: you may use the 'disabled_algorithms' SSHClient/Transport init kwarg to disable that or other algorithms if your server does not support them!)rF   r   r‡   ÚendswithÚreÚsearchr3   Úremote_versionZ_agreed_pubkey_algorithmr…   r(   r'   Zserver_extensionsÚgetr&   ÚsplitÚlistÚfilterÚ__contains__r)   )	rA   rn   Zpubkey_algoZmy_algosZserver_algo_strZserver_algosZ	agreementrŠ   ÚmsgrB   rB   rC   Ú_finalize_pubkey_algorithm$  sr    ÿþ ÿ ÿÿÿ
 ÿþþz&AuthHandler._finalize_pubkey_algorithmc              
   C   sÞ  |  ¡ }|dkrÈ|  td¡ tƒ }| t¡ | | j¡ | d¡ | | j¡ | jdkr|| 	d¡ t
| jƒ}| |¡ n>| jdkrî| 	d¡ |  | j¡\}}|  |¡}| |¡ | |¡ |  | jd| j|¡}| j ||¡}| |¡ nÌ| jdkr| d	¡ | | j¡ n¦| jd
krXt| j| jƒ}	| |	 ¡ ¡ | j |¡ | jj ¡ \}
}|
tkr||  |¡ | jj ¡ \}
}|
tkrÚ| ¡ }tƒ }| t¡ z| |	 | j || j¡¡ W n2 t!k
rì } z|  "|¡ W Y ¢S d }~X Y nX | j |¡ | jj ¡ \}
}|
t#krú| ¡ }z|	 | j || j|¡}W n2 t!k
rf } z|  "|¡ W Y ¢S d }~X Y nX |d krxq´n&tƒ }| t¡ | |¡ | j $|¡ qút%d &t'|
 ¡ƒ‚tƒ }| t(¡ | |	 )| jj*¡¡ n||
t+krît%dƒ‚nh|
t,kr,| -¡ }| -¡ }| ¡ }| ¡  t%d &|||¡ƒ‚n*|
t.krD|  /|¡ d S t%d &t'|
 ¡ƒ‚nb| jdkrœ| jj0rœ| jj1}| 2| j¡ | )| jj*¡}| |¡ n| jdkrªnt%d &| j¡ƒ‚| j |¡ n|  td &|¡¡ d S )Nrc   zuserauth is OKússh-connectionr9   FrU   TrY   r0   r\   zReceived Package: {}zServer returned an error tokenzCGSS-API Error:
Major Status: {}
Minor Status: {}
Error Message: {}
r^   rL   zUnknown auth method "{}"z!Service request "{}" accepted (?))3r€   rF   r   r%   rd   r   re   r4   r7   rr   r&   r9   rp   r:   r›   rw   Zsign_ssh_datar<   r-   r@   Ú	add_bytesÚssh_gss_oidsr3   rf   Z
packetizerZread_messager   Ú_parse_userauth_bannerr   Ú
get_stringr   Zssh_init_sec_contextr?   r.   Ú_handle_local_gss_failurer   Úsend_messager(   r‡   r#   r   Zssh_get_micrq   r!   r    Úget_intr   Ú_parse_userauth_failureZgss_kex_usedÚkexgss_ctxtZset_username)rA   rh   rs   r9   rn   rv   rt   ÚblobÚsigÚsshgssÚptypeZmechr~   Z	srv_tokenZ
next_tokenZ
maj_statusZ
min_statusÚerr_msgZkexgssÚ	mic_tokenrB   rB   rC   Ú_parse_service_accepto  sä    










ü




  ÿÿ 
ü 


ÿ



  ûÿ	

ÿÿþ
ÿ ÿz!AuthHandler._parse_service_acceptc                 C   sÂ   t ƒ }|tkr2|  td |¡¡ | t¡ d| _n\|  td |¡¡ | t¡ | 	| j
j |¡¡ |tkrv| d¡ n| d¡ |  jd7  _| j
 |¡ | jdkr¬|  ¡  |tkr¾| j
 ¡  d S )NzAuth granted ({}).TzAuth rejected ({}).Fé   é
   )r%   r	   rF   r
   r‡   rd   r   r5   r   re   r3   r   Zget_allowed_authsr   rr   r>   rf   rm   Ú_auth_trigger)rA   r4   ÚmethodÚresultrh   rB   rB   rC   Ú_send_auth_result÷  s&    

ÿ

zAuthHandler._send_auth_resultc                 C   s|   t ƒ }| t¡ | |j¡ | |j¡ | tƒ ¡ | t|j	ƒ¡ |j	D ] }| |d ¡ | 
|d ¡ qJ| j |¡ d S )Nr   r­   )r%   rd   r   re   ÚnameÚinstructionsÚbytesrj   ÚlenÚpromptsrr   r3   rf   )rA   Úqrh   ÚprB   rB   rC   Ú_interactive_query  s    

zAuthHandler._interactive_queryc              
   C   sˆ  | j js<tƒ }| t¡ | d¡ | d¡ | j  |¡ d S | jrFd S | 	¡ }| 	¡ }| 	¡ }|  
td |||¡¡ |dkrˆ|  ¡  d S | jd k	r´| j|kr´|  
td¡ |  ¡  d S || _| j j ¡ }|dkrà| j j |¡}n–|dkr|| ¡ }| ¡ }z| d¡}W n tk
r   Y nX |rh|  
td¡ | ¡ }	z|	 dd	¡}	W n tk
r`   Y nX t}n| j j ||¡}nú|d
krØ| ¡ }
| 	¡ }| ¡ }z|  ||¡}W n€ tk
rì } z|  
td t|ƒ¡¡ d }W 5 d }~X Y nD tk
r. } z$d}|  
t| |jj |¡¡ d }W 5 d }~X Y nX |d krF|  ¡  d S | j j !||¡}|tkrv|
sštƒ }| t"¡ | |¡ | |¡ | j  |¡ d S t| ¡ ƒ}|  #||||¡}| $||¡sv|  
td¡ t}nž|dkr| %¡ }| j j &||¡}t'|t(ƒrv|  )|¡ d S n^|dkrÒ|rÒt*|ƒ}| +¡ }|dkrV|  
td¡ |  ¡  | %¡ }| ,|¡}|s‚|  
td¡ |  ¡  | -d¡}tƒ }| t.¡ | /|¡ t0| |ƒ| j _1t2t3t4f| j _5| j  |¡ d S |dkrh|rh| %¡ }| j j6}|d krt}|  7|||¡ z| 8|| j j9| j¡ W n* tk
rP   t}|  7|||¡ ‚ Y nX t:}| j j ;||¡ n| j j |¡}|  7|||¡ d S )NrL   Fz.Auth request (type={}) service={}, username={}rœ   zKAuth rejected because the client attempted to change username in mid-flightr9   zUTF-8z+Auth request to change passwords (rejected)r†   rU   zAuth rejected: public key: {}z9Auth rejected: unsupported or mangled public key ({}: {})z Auth rejected: invalid signaturerY   r\   r­   z8Disconnect: Received more than one GSS-API OID mechanismz5Disconnect: Received an invalid GSS-API OID mechanismÚserverr^   )<r3   rJ   r%   rd   r   re   rr   rf   r5   r€   rF   r   r‡   rl   r=   r   rm   r   Zenable_auth_gssapiZcheck_auth_noneÚget_booleanÚ
get_binaryÚdecodeÚUnicodeErrorr   Zcheck_auth_passwordr‹   r(   r
   ÚstrÚ	Exceptionr{   Ú__name__Zcheck_auth_publickeyr   rw   Zverify_ssh_sigr    Zcheck_auth_interactiveÚ
isinstancer,   rº   r-   r£   Zssh_check_mechrž   r   r   ÚGssapiWithMicAuthHandlerÚauth_handlerr   r   r   Ú_expected_packetr¥   r²   Ússh_check_micrq   r	   Zcheck_auth_gssapi_keyex)rA   rh   r4   rs   r°   Zgss_authr±   Z	changereqr9   ZnewpasswordZsig_attachedrt   rˆ   rV   r~   rš   r§   r¦   r<   r¨   ZmechsZdesired_mechZmech_okZsupported_mechr«   rB   rB   rC   Ú_parse_userauth_request  s:   


  ÿþ
ÿþ
 ÿ
ÿ
 ÿ



   ÿ
 ÿ

þ
þ


 ÿý
  ÿ ÿz#AuthHandler._parse_userauth_requestc                 C   s<   |   td | j¡¡ d| _| j ¡  | jd k	r8| j ¡  d S )NzAuthentication ({}) successful!T)	rF   r
   r‡   r7   r5   r3   r¯   r6   r`   rg   rB   rB   rC   Ú_parse_userauth_successÏ  s     
ÿ

z#AuthHandler._parse_userauth_successc                 C   s¼   |  ¡ }| ¡ }|rB|  td¡ |  tdt|ƒ ¡ t|ƒ| j_nV| j	|kr„d 
| j	¡d 
|¡fD ]}|  t|¡ qbtd|ƒ| j_n|  td 
| j	¡¡ d| _d | _| jd k	r¸| j ¡  d S )NzAuthentication continues...z	Methods: z'Authentication type ({}) not permitted.zAllowed methods: {}zBad authentication typeúAuthentication ({}) failed.F)Zget_listr¼   rF   r
   r   rÀ   r+   r3   Úsaved_exceptionr7   r‡   r*   r5   r4   r6   r`   )rA   rh   ZauthlistÚpartialrš   rB   rB   rC   r¤   Ø  s2    
ÿü ÿ
 
ÿ
z#AuthHandler._parse_userauth_failurec                 C   s$   |  ¡ }|| _|  td |¡¡ d S )NzAuth banner: {})r    r8   rF   r
   r‡   )rA   rh   r8   rB   rB   rC   rŸ   ó  s    z"AuthHandler._parse_userauth_bannerc           	      C   sª   | j dkrtdƒ‚| ¡ }| ¡ }| ¡  | ¡ }g }t|ƒD ]}| | ¡ | ¡ f¡ q>|  |||¡}t	ƒ }| 
t¡ | t|ƒ¡ |D ]}| |¡ qŠ| j |¡ d S )NrY   z Illegal info request from server)r7   r(   r€   r½   r£   ÚrangeÚappendr¼   r;   r%   rd   r   rj   r¶   re   r3   rf   )	rA   rh   Útitler´   r·   Zprompt_listÚiZresponse_listÚrrB   rB   rC   Ú_parse_userauth_info_requestù  s(    
  ÿ
z(AuthHandler._parse_userauth_info_requestc                 C   sr   | j jstdƒ‚| ¡ }g }t|ƒD ]}| | ¡ ¡ q$| j j |¡}t	|t
ƒr^|  |¡ d S |  | jd|¡ d S )Nz!Illegal info response from serverrY   )r3   rJ   r(   r£   rÍ   rÎ   r€   r   Zcheck_auth_interactive_responserÃ   r,   rº   r²   r=   )rA   rh   ÚnÚ	responsesrÐ   r±   rB   rB   rC   Ú_parse_userauth_info_response  s"    ÿ

  ÿz)AuthHandler._parse_userauth_info_responsec                 C   sR   || j _|  td |¡¡ |  td | j¡¡ d| _d | _| j	d k	rN| j	 
¡  d S )NzGSSAPI failure: {}rÊ   F)r3   rË   rF   r   r‡   r
   r7   r5   r4   r6   r`   )rA   r~   rB   rB   rC   r¡      s    

z%AuthHandler._handle_local_gss_failurec                 C   s   | j jr| jS | jS d S rE   )r3   rJ   Ú_server_handler_tableÚ_client_handler_tablerH   rB   rB   rC   Ú_handler_tableD  s    zAuthHandler._handler_tableN)r0   ).rÂ   Ú
__module__Ú__qualname__Ú__doc__rD   rF   rI   rK   rT   rW   rX   r[   r]   r_   ra   rQ   rl   rm   rp   rw   r   rƒ   r‹   r›   r¬   r²   rº   rÈ   rÉ   r¤   rŸ   rÒ   rÕ   r¡   r   r   r   rÖ   r   r   r   r   r   r×   ÚpropertyrØ   rB   rB   rB   rC   r/   L   sj   


		K 	 4	   ý     û
r/   c                   @   sœ   e Zd ZdZdZdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZ	edd„ ƒZ
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeeeeeeeeiZedd„ ƒZdS )rÄ   z°A specialized Auth handler for gssapi-with-mic

    During the GSSAPI token exchange we need a modified dispatch table,
    because the packet type numbers are not unique.
    r\   c                 C   s   || _ || _d S rE   )Ú	_delegater¨   )rA   Zdelegater¨   rB   rB   rC   rD   U  s    z!GssapiWithMicAuthHandler.__init__c                 C   s   |   ¡  | j ¡ S rE   )Ú_restore_delegate_auth_handlerrÝ   ra   rH   rB   rB   rC   ra   Y  s    zGssapiWithMicAuthHandler.abortc                 C   s   | j jS rE   )rÝ   r3   rH   rB   rB   rC   r3   ]  s    z"GssapiWithMicAuthHandler.transportc                 C   s   | j jS rE   )rÝ   r²   rH   rB   rB   rC   r²   a  s    z*GssapiWithMicAuthHandler._send_auth_resultc                 C   s   | j jS rE   )rÝ   r=   rH   rB   rB   rC   r=   e  s    z&GssapiWithMicAuthHandler.auth_usernamec                 C   s   | j jS rE   )rÝ   r?   rH   rB   rB   rC   r?   i  s    z!GssapiWithMicAuthHandler.gss_hostc                 C   s   | j | j_d S rE   )rÝ   r3   rÅ   rH   rB   rB   rC   rÞ   m  s    z7GssapiWithMicAuthHandler._restore_delegate_auth_handlerc              
   C   s°   |  ¡ }| j}z| | j|| j¡}W nJ tk
rn } z,|| j_t}|  	¡  |  
| j| j|¡ ‚ W 5 d }~X Y nX |d k	r¬tƒ }| t¡ | |¡ tttf| j_| j |¡ d S rE   )r    r¨   Zssh_accept_sec_contextr?   r=   rÁ   r3   rË   r   rÞ   r²   r°   r%   rd   r   re   r   r"   r   rÆ   rf   )rA   rh   Zclient_tokenr¨   Útokenr~   r±   rB   rB   rC   Ú_parse_userauth_gssapi_tokenp  s.      ÿ

ýz5GssapiWithMicAuthHandler._parse_userauth_gssapi_tokenc              
   C   sœ   |  ¡ }| j}| j}|  ¡  z| || jj|¡ W n@ tk
rr } z"|| j_t	}|  
|| j|¡ ‚ W 5 d }~X Y nX t}| jj ||¡ |  
|| j|¡ d S rE   )r    r¨   r=   rÞ   rÇ   r3   rq   rÁ   rË   r   r²   r°   r	   r   Zcheck_auth_gssapi_with_mic)rA   rh   r«   r¨   r4   r~   r±   rB   rB   rC   Ú_parse_userauth_gssapi_micŠ  s*      ÿ ÿz3GssapiWithMicAuthHandler._parse_userauth_gssapi_micc                 C   s   |   ¡  | j |¡S rE   )rÞ   rÝ   rƒ   rg   rB   rB   rC   rƒ   ¢  s    z/GssapiWithMicAuthHandler._parse_service_requestc                 C   s   |   ¡  | j |¡S rE   )rÞ   rÝ   rÈ   rg   rB   rB   rC   rÈ   ¦  s    z0GssapiWithMicAuthHandler._parse_userauth_requestc                 C   s   | j S rE   )Ú(_GssapiWithMicAuthHandler__handler_tablerH   rB   rB   rC   rØ   ±  s    z'GssapiWithMicAuthHandler._handler_tableN)rÂ   rÙ   rÚ   rÛ   r°   rD   ra   rÜ   r3   r²   r=   r?   rÞ   rà   rá   rƒ   rÈ   r   r   r   r"   râ   rØ   rB   rB   rB   rC   rÄ   L  s8   



    ürÄ   ):rÛ   r1   rx   r’   Zparamiko.commonr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Zparamiko.messager%   Zparamiko.py3compatr&   r'   Zparamiko.ssh_exceptionr(   r)   r*   r+   Zparamiko.serverr,   Zparamiko.ssh_gssr-   r.   Úobjectr/   rÄ   rB   rB   rB   rC   Ú<module>   s"   ”%      