o
    ÞÜgþ§  ã                   @   s8  d Z ddl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/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 G d	d
„ d
ƒZ8G dd„ dƒZ9G dd„ de8ƒZ:d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                   @   s.  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
dHd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!d?d@„ Z"e#dAdB„ ƒZ$e#dCdD„ ƒZ%e#dEdF„ ƒZ&dGS )IÚ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   úO/var/www/html/api-tag/env/lib/python3.10/site-packages/paramiko/auth_handler.pyÚ__init__R   s   
zAuthHandler.__init__c                 G   s   | j j|Ž S ©N)r3   Ú_log)rA   ÚargsrB   rB   rC   rF   d   ó   zAuthHandler._logc                 C   ó   | j S rE   )r5   ©rA   rB   rB   rC   Úis_authenticatedg   s   zAuthHandler.is_authenticatedc                 C   ó   | j jr| jS | jS rE   )r3   Úserver_moder=   r4   rJ   rB   rB   rC   Úget_usernamej   s   zAuthHandler.get_usernamec                 C   óH   | j j ¡  z|| _d| _|| _|  ¡  W | j j ¡  d S | j j ¡  w ©NÚnone©r3   ÚlockÚacquirer6   r7   r4   Ú_request_authÚrelease©rA   r4   ÚeventrB   rB   rC   Ú	auth_nonep   ó   
zAuthHandler.auth_nonec                 C   óN   | j j ¡  z|| _d| _|| _|| _|  ¡  W | j j ¡  d S | j j ¡  w )NÚ	publickey)	r3   rS   rT   r6   r7   r4   r:   rU   rV   )rA   r4   ÚkeyrX   rB   rB   rC   Úauth_publickeyz   ó   
zAuthHandler.auth_publickeyc                 C   r[   )Nr9   )	r3   rS   rT   r6   r7   r4   r9   rU   rV   )rA   r4   r9   rX   rB   rB   rC   Úauth_password…   r_   zAuthHandler.auth_passwordr0   c                 C   sT   | j j ¡  z|| _d| _|| _|| _|| _|  ¡  W | j j 	¡  dS | j j 	¡  w )úK
        response_list = handler(title, instructions, prompt_list)
        úkeyboard-interactiveN)
r3   rS   rT   r6   r7   r4   r;   r<   rU   rV   )rA   r4   ÚhandlerrX   r<   rB   rB   rC   Úauth_interactive   s   
zAuthHandler.auth_interactivec                 C   sT   | j j ¡  z|| _d| _|| _|| _|| _|  ¡  W | j j 	¡  d S | j j 	¡  w )Núgssapi-with-mic)
r3   rS   rT   r6   r7   r4   r?   r@   rU   rV   )rA   r4   r?   r@   rX   rB   rB   rC   Úauth_gssapi_with_micŸ   s   
z AuthHandler.auth_gssapi_with_micc                 C   rO   )Núgssapi-keyexrR   rW   rB   rB   rC   Úauth_gssapi_keyex«   rZ   zAuthHandler.auth_gssapi_keyexc                 C   s   | j d ur| j  ¡  d S d S rE   )r6   ÚsetrJ   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   rU   »   s   

zAuthHandler._request_authc                 C   óH   t ƒ }| t¡ | t¡ | d¡ | d¡ | j |¡ | j ¡  d S )NzService not availableÚen)	r%   rm   r   Úadd_intr   rn   r3   ro   Úcloserp   rB   rB   rC   Ú!_disconnect_service_not_availableÁ   ó   



z-AuthHandler._disconnect_service_not_availablec                 C   rr   )NzNo more auth methods availablers   )	r%   rm   r   rt   r   rn   r3   ro   ru   rp   rB   rB   rC   Ú_disconnect_no_more_authÊ   rw   z$AuthHandler._disconnect_no_more_authc                 C   s"   |j r|j j|j jfS | ¡ |fS )z
        Given any key, return its type/algorithm & bits-to-sign.

        Intended for input to or verification of, key signatures.
        )Úpublic_blobÚkey_typeÚkey_blobÚget_name)rA   r]   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 )Nr\   T)	r%   rn   r3   Ú
session_idrm   r   Úadd_booleanr}   Úasbytes)rA   r]   Úservicer4   Ú	algorithmrq   Ú_ÚbitsrB   rB   rC   Ú_get_session_blobß   s   






zAuthHandler._get_session_blobc                 C   sÄ   d }| j jd urt ¡ | j j }	 | d¡ | j  ¡ s0| j  ¡ }|d u s*t|jtƒr.t	dƒ}|‚| 
¡ r5n|d urC|t ¡ krCt	dƒ‚q|  ¡ s`| j  ¡ }|d u rUt	dƒ}t|jtƒr^|jS |‚g S )NTgš™™™™™¹?z5Authentication failed: transport shut down or saw EOFzAuthentication timeout.zAuthentication failed.)r3   Úauth_timeoutÚtimeÚwaitÚ	is_activeÚget_exceptionÚ
issubclassÚ	__class__ÚEOFErrorr)   Úis_setrK   r+   Úallowed_types)rA   rX   Úmax_tsÚerB   rB   rC   Úwait_for_responseì   s2   


ÿô
zAuthHandler.wait_for_responsec                 C   s’   |  ¡ }| jjrC|dkrCtƒ }| t¡ | |¡ | j |¡ | jj 	¡ \}}|rAtƒ }| t
¡ | |¡ | |¡ | j |¡ d S |  ¡  d S rk   )Úget_textr3   rM   r%   rm   r   rn   ro   Úserver_objectÚ
get_bannerr$   rv   )rA   rq   r   r8   ÚlanguagerB   rB   rC   Ú_parse_service_request
  s   




z"AuthHandler._parse_service_requestc                 C   sF   | j j}| dd¡|vrd}|  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
   ÚformatÚ	_key_infor%   )rA   r‚   ÚkeyblobÚoptionsÚerrrB   rB   rC   Ú_generate_key_from_request  s   ÿz&AuthHandler._generate_key_from_requestc                 C   s.   |d }d}|   t| |¡¡ |   td¡ |S )Nr   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›   )rA   rz   Úmy_algosÚpubkey_algoÚmsgrB   rB   rC   Ú!_choose_fallback_pubkey_algorithm(  s   þz-AuthHandler._choose_fallback_pubkey_algorithmc                 C   sJ  d|vr|S |   td |¡¡ | d¡r3t d| jj¡r3d}|| j_|   td¡ |   td |¡¡ |S dd	„ | jj	D ƒ}|   td
 |¡¡ |sKt
dƒ‚t| jj dtdƒ¡ƒ}d }|r| d¡}|   td |¡¡ tt|j|ƒƒ}|r|d }|   td |¡¡ n|   td¡ d}t| |¡ƒ‚|  ||¡}| d¡rŸ|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 |v r|‘qS )r¥   rB   )Ú.0ÚxrB   rB   rC   Ú
<listcomp>O  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!)rF   r   r›   ÚendswithÚreÚsearchr3   Úremote_versionÚ_agreed_pubkey_algorithmr™   r(   r'   Úserver_extensionsÚgetr&   ÚsplitÚlistÚfilterÚ__contains__r)   r¤   )rA   rz   r¢   r¡   Úserver_algo_strÚserver_algosÚ	agreementrŸ   rB   rB   rC   Ú_finalize_pubkey_algorithm3  sd   ÿþÿ
ÿÿÿ

ÿþÿ
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rw| 	d¡ |  | j¡\}}|  |¡}| |¡ | |¡ |  | jd| j|¡}| j ||¡}| |¡ nS| jdkr‰| d	¡ | | j¡ nA| jd
kr™t| j| jƒ}	| |	 ¡ ¡ | j |¡ | jj ¡ \}
}|
tkr¼|  |¡ | jj ¡ \}
}|
tkr]| ¡ }tƒ }| t¡ z| |	 | j || j¡¡ W n t!yò } z|  "|¡W  Y d }~S d }~ww | j |¡ 	 | jj ¡ \}
}|
t#krI| ¡ }z|	 | j || j|¡}W n t!y/ } z|  "|¡W  Y d }~S d }~ww |d u r6ntƒ }| t¡ | |¡ | j $|¡ qútƒ }| t(¡ | |	 )| jj*¡¡ nm|
t+krft%dƒ‚|
t,kr„| -¡ }| -¡ }| ¡ }| ¡  t%d &|||¡ƒ‚|
t.kr|  /|¡ d S t%d &t'|
 ¡ƒ‚| jdkr»| jj0r»| jj1}| 2| j¡ | )| jj*¡}| |¡ n| jdkrÂnt%d &| j¡ƒ‚| j |¡ d S |  td &|¡¡ d S )Nrl   zuserauth is OKússh-connectionr9   Fr\   Trb   r0   re   zReceived Package: {}zServer returned an error tokenzCGSS-API Error:
Major Status: {}
Minor Status: {}
Error Message: {}
rg   rQ   zUnknown auth method "{}"z!Service request "{}" accepted (?))3r“   rF   r   r%   rm   r   rn   r4   r7   r   r&   r9   r}   r:   r¸   r…   Úsign_ssh_datar<   r-   r@   Ú	add_bytesÚssh_gss_oidsr3   ro   Ú
packetizerÚread_messager   Ú_parse_userauth_bannerr   Ú
get_stringr   Ússh_init_sec_contextr?   r.   Ú_handle_local_gss_failurer   Úsend_messager(   r›   r#   r   Ússh_get_micr~   r!   r    Úget_intr   Ú_parse_userauth_failureÚgss_kex_usedÚkexgss_ctxtÚset_username)rA   rq   r   r9   rz   r„   r‚   ÚblobÚsigÚsshgssÚptypeÚmechr‘   Ú	srv_tokenÚ
next_tokenÚ
maj_statusÚ
min_statusÚerr_msgÚkexgssÚ	mic_tokenrB   rB   rC   Ú_parse_service_accept{  sà   










ü





ÿÿ€ÿ
ü€ÿ


ê


ÿû
	
ÿÿ
ÿ
ÿz!AuthHandler._parse_service_acceptc                 C   sÆ   t ƒ }|tkr|  td |¡¡ | t¡ d| _n.|  td |¡¡ | t¡ | 	| j
j |¡¡ |tkr;| d¡ n| d¡ |  jd7  _| j
 |¡ | jdkrV|  ¡  |tkra| j
 ¡  d S d S )NzAuth granted ({}).TzAuth rejected ({}).Fé   é
   )r%   r	   rF   r
   r›   rm   r   r5   r   rn   r3   r”   Úget_allowed_authsr   r   r>   ro   rx   Ú_auth_trigger)rA   r4   ÚmethodÚresultrq   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 ¡ q%| j |¡ d S )Nr   r×   )r%   rm   r   rn   ÚnameÚinstructionsÚbytesrt   ÚlenÚpromptsr   r3   ro   )rA   Úqrq   ÚprB   rB   rC   Ú_interactive_query  s   

zAuthHandler._interactive_queryc              
   C   sv  | j jstƒ }| t¡ | d¡ | d¡ | j  |¡ d S | jr#d S | 	¡ }| 	¡ }| 	¡ }|  
td |||¡¡ |dkrD|  ¡  d S | jd urZ| j|krZ|  
td¡ |  ¡  d S || _| j j ¡ }|dkrp| j j |¡}nÂ|dkr¹| ¡ }| ¡ }z| d¡}W n	 tyŒ   Y nw |r¯|  
td¡ | ¡ }	z|	 dd	¡}	W n	 tyª   Y nw t}nƒ| j j ||¡}ny|d
krg| ¡ }
| 	¡ }| ¡ }z|  ||¡}W nA tyñ } z|  
td t|ƒ¡¡ d }W Y d }~n'd }~w ty } zd}|  
t| |jj |¡¡ d }W Y d }~nd }~ww |d u r|  ¡  d S | j j !||¡}|tkrf|
sItƒ }| t"¡ | |¡ | |¡ | j  |¡ d S t| ¡ ƒ}|  #||||¡}| $||¡sf|  
td¡ t}nË|dkr†| %¡ }| j j &||¡}t'|t(ƒr…|  )|¡ d S n¬|dkrã|rãt*|ƒ}| +¡ }|dkr¥|  
td¡ |  ¡  | %¡ }| ,|¡}|s»|  
td¡ |  ¡  | -d¡}tƒ }| t.¡ | /|¡ t0| |ƒ| j _1t2t3t4f| j _5| j  |¡ d S |dkr+|r+| %¡ }| j j6}|d u rt}|  7|||¡ z| 8|| j j9| j¡ W n ty   t}|  7|||¡ ‚ w t:}| j j ;||¡ n| j j |¡}|  7|||¡ d S )NrQ   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š   r\   zAuth rejected: public key: {}z9Auth rejected: unsupported or mangled public key ({}: {})z Auth rejected: invalid signaturerb   re   r×   z8Disconnect: Received more than one GSS-API OID mechanismz5Disconnect: Received an invalid GSS-API OID mechanismÚserverrg   )<r3   rM   r%   rm   r   rn   r   ro   r5   r“   rF   r   r›   rv   r=   r   rx   r”   Úenable_auth_gssapiÚcheck_auth_noneÚget_booleanÚ
get_binaryÚdecodeÚUnicodeErrorr   Úcheck_auth_passwordr    r(   r
   ÚstrÚ	ExceptionrŒ   Ú__name__Úcheck_auth_publickeyr   r…   Úverify_ssh_sigrÀ   Úcheck_auth_interactiveÚ
isinstancer,   rå   r-   rÅ   Ússh_check_mechr¼   r   r»   ÚGssapiWithMicAuthHandlerÚauth_handlerr   r   r   Ú_expected_packetrÈ   rÝ   Ússh_check_micr~   r	   Úcheck_auth_gssapi_keyex)rA   rq   r4   r   rÛ   Úgss_authrÜ   Ú	changereqr9   ÚnewpasswordÚsig_attachedr‚   r   r]   r‘   r£   rË   rÊ   r<   rÌ   ÚmechsÚdesired_mechÚmech_okÚsupported_mechrÕ   rB   rB   rC   Ú_parse_userauth_request%  s.  


ÿþ

þýÿÿ
€€ý
ÿ



ÿ€
ÿ
ý
þ
þ


ÿý
ÿýÿz#AuthHandler._parse_userauth_requestc                 C   s@   |   td | j¡¡ d| _| j ¡  | jd ur| j ¡  d S d S )NzAuthentication ({}) successful!T)	rF   r
   r›   r7   r5   r3   rÚ   r6   ri   rp   rB   rB   rC   Ú_parse_userauth_successÖ  s   ÿ

ÿz#AuthHandler._parse_userauth_successc                 C   sÀ   |  ¡ }| ¡ }|r!|  td¡ |  tdt|ƒ ¡ t|ƒ| j_n+| j	|vrBd 
| j	¡d 
|¡fD ]}|  t|¡ q1td|ƒ| j_n
|  td 
| j	¡¡ d| _d | _| jd ur^| j ¡  d S d S )NzAuthentication continues...z	Methods: z'Authentication type ({}) not permitted.zAllowed methods: {}zBad authentication typeúAuthentication ({}) failed.F)Úget_listré   rF   r
   r   rî   r+   r3   Úsaved_exceptionr7   r›   r*   r5   r4   r6   ri   )rA   rq   ÚauthlistÚpartialr£   rB   rB   rC   rÆ   ß  s0   
ÿü
ÿÿ
ÿz#AuthHandler._parse_userauth_failurec                 C   s$   |  ¡ }|| _|  td |¡¡ d S )NzAuth banner: {})rÀ   r8   rF   r
   r›   )rA   rq   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 ]}| |¡ qE| j |¡ d S )Nrb   z Illegal info request from server)r7   r(   r“   rê   rÅ   ÚrangeÚappendré   r;   r%   rm   r   rt   rá   rn   r3   ro   )	rA   rq   Útitlerß   râ   Úprompt_listÚiÚ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 serverrb   )r3   rM   r(   rÅ   r
  r  r“   r”   Úcheck_auth_interactive_responserô   r,   rå   rÝ   r=   )rA   rq   Ú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 ur'| j	 
¡  d S )NzGSSAPI failure: {}r  F)r3   r  rF   r   r›   r
   r7   r5   r4   r6   ri   )rA   r‘   rB   rB   rC   rÂ   *  s   

z%AuthHandler._handle_local_gss_failurec                 C   s   t | jt| jt| jiS rE   )r   r—   r   r  r   r  rJ   rB   rB   rC   Ú_server_handler_table<  s   úz!AuthHandler._server_handler_tablec              
   C   s"   t | jt| jt| jt| jt| j	iS rE   )
r   rÖ   r   r  r   rÆ   r   r¿   r   r  rJ   rB   rB   rC   Ú_client_handler_tableH  s   ûz!AuthHandler._client_handler_tablec                 C   rL   rE   )r3   rM   r  r  rJ   rB   rB   rC   Ú_handler_tableT  s   zAuthHandler._handler_tableN©r0   )'rð   Ú
__module__Ú__qualname__Ú__doc__rD   rF   rK   rN   rY   r^   r`   rd   rf   rh   rj   rU   rv   rx   r}   r…   r’   r—   r    r¤   r¸   rÖ   rÝ   rå   r  r  rÆ   r¿   r  r  rÂ   Úpropertyr  r  r  rB   rB   rB   rC   r/   M   sR    


		H  2	

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.
    re   c                 C   s   || _ || _d S rE   )Ú	_delegaterÌ   )rA   ÚdelegaterÌ   rB   rB   rC   rD   e  s   
z!GssapiWithMicAuthHandler.__init__c                 C   s   |   ¡  | j ¡ S rE   )Ú_restore_delegate_auth_handlerr  rj   rJ   rB   rB   rC   rj   i  s   
zGssapiWithMicAuthHandler.abortc                 C   ó   | j jS rE   )r  r3   rJ   rB   rB   rC   r3   m  ó   z"GssapiWithMicAuthHandler.transportc                 C   r!  rE   )r  rÝ   rJ   rB   rB   rC   rÝ   q  r"  z*GssapiWithMicAuthHandler._send_auth_resultc                 C   r!  rE   )r  r=   rJ   rB   rB   rC   r=   u  r"  z&GssapiWithMicAuthHandler.auth_usernamec                 C   r!  rE   )r  r?   rJ   rB   rB   rC   r?   y  r"  z!GssapiWithMicAuthHandler.gss_hostc                 C   s   | j | j_d S rE   )r  r3   r÷   rJ   rB   rB   rC   r   }  s   z7GssapiWithMicAuthHandler._restore_delegate_auth_handlerc              
   C   sª   |  ¡ }| j}z| | j|| j¡}W n  ty2 } z|| j_t}|  	¡  |  
| j| j|¡ ‚ d }~ww |d urStƒ }| t¡ | |¡ tttf| j_| j |¡ d S d S rE   )rÀ   rÌ   Ússh_accept_sec_contextr?   r=   rï   r3   r  r   r   rÝ   rÛ   r%   rm   r   rn   r   r"   r   rø   ro   )rA   rq   Úclient_tokenrÌ   Útokenr‘   rÜ   rB   rB   rC   Ú_parse_userauth_gssapi_token€  s0   
ÿ€û

ý÷z5GssapiWithMicAuthHandler._parse_userauth_gssapi_tokenc              
   C   s’   |  ¡ }| j}| j}|  ¡  z| || jj|¡ W n ty4 } z|| j_t	}|  
|| j|¡ ‚ d }~ww t}| jj ||¡ |  
|| j|¡ d S rE   )rÀ   rÌ   r=   r   rù   r3   r~   rï   r  r   rÝ   rÛ   r	   r”   Úcheck_auth_gssapi_with_mic)rA   rq   rÕ   rÌ   r4   r‘   rÜ   rB   rB   rC   Ú_parse_userauth_gssapi_micš  s(   
ÿ€üÿz3GssapiWithMicAuthHandler._parse_userauth_gssapi_micc                 C   ó   |   ¡  | j |¡S rE   )r   r  r—   rp   rB   rB   rC   r—   ²  ó   z/GssapiWithMicAuthHandler._parse_service_requestc                 C   r)  rE   )r   r  r  rp   rB   rB   rC   r  ¶  r*  z0GssapiWithMicAuthHandler._parse_userauth_requestc                 C   rI   rE   )Ú(_GssapiWithMicAuthHandler__handler_tablerJ   rB   rB   rC   r  Á  s   z'GssapiWithMicAuthHandler._handler_tableN)rð   r  r  r  rÛ   rD   rj   r  r3   rÝ   r=   r?   r   r&  r(  r—   r  r   r   r   r"   r+  r  rB   rB   rB   rC   rö   \  s2    



ürö   c                       sX   e Zd ZdZe‡ fdd„ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	ddd„Z
dd„ Z‡  ZS )ÚAuthOnlyHandlerzU
    AuthHandler, and just auth, no service requests!

    .. versionadded:: 3.2
    c                    s   t ƒ j ¡ }|t= |S rE   )Úsuperr  Úcopyr   )rA   Úmy_table©rŒ   rB   rC   r  Ó  s   z%AuthOnlyHandler._client_handler_tableNc                 C   sŒ   || _ || _tƒ }| t¡ | |¡ | d¡ | |¡ ||ƒ | jj | j |¡ W d  ƒ n1 s6w   Y  t	 
¡ | _|  | j¡S )a³  
        Submit a userauth request message & wait for response.

        Performs the transport message send call, sets self.auth_event, and
        will lock-n-block as necessary to both send, and wait for response to,
        the USERAUTH_REQUEST.

        Most callers will want to supply a callback to ``finish_message``,
        which accepts a Message ``m`` and may call mutator methods on it to add
        more fields.
        r¹   N)r7   r4   r%   rm   r   rn   r3   rS   ro   Ú	threadingÚEventr6   r’   )rA   r4   rÛ   Úfinish_messagerq   rB   rB   rC   Úsend_auth_requestÙ  s   




ÿ
z!AuthOnlyHandler.send_auth_requestc                 C   s   |   |d¡S rP   ©r4  )rA   r4   rB   rB   rC   rY     rH   zAuthOnlyHandler.auth_nonec                    sH   |   ˆ¡\}‰|  |¡‰ |  ˆd|ˆ ¡‰‡ ‡‡‡fdd„}|  |d|¡S )Nr¹   c                    s4   |   d¡ |  ˆ ¡ |  ˆ¡ |  ˆ ˆˆ ¡¡ d S )NT)r   rn   rº   ©rq   ©r‚   r„   rÊ   r]   rB   rC   Úfinish  s   


z.AuthOnlyHandler.auth_publickey.<locals>.finishr\   )r}   r¸   r…   r4  )rA   r4   r]   rz   r8  rB   r7  rC   r^     s   
ü
zAuthOnlyHandler.auth_publickeyc                    s   ‡ fdd„}|   |d|¡S )Nc                    s   |   d¡ |  tˆ ƒ¡ d S )NF)r   rn   r&   r6  ©r9   rB   rC   r8    s   
z-AuthOnlyHandler.auth_password.<locals>.finishr9   r5  )rA   r4   r9   r8  rB   r9  rC   r`     s   zAuthOnlyHandler.auth_passwordr0   c                    s&   d| _ || _‡ fdd„}|  |d|¡S )ra   Úkeyboard_interactivec                    s   |   d¡ |   ˆ ¡ d S )Nr0   )rn   r6  ©r<   rB   rC   r8  /  s   
z0AuthOnlyHandler.auth_interactive.<locals>.finishrb   )r7   r;   r4  )rA   r4   rc   r<   r8  rB   r;  rC   rd   %  s   z AuthOnlyHandler.auth_interactivec                 C   st   d}|   t|¡ | dd¡}||v s||v r'||v r|n|}d|›d}|}n|d }|›d|›}|   t|¡ |S )NzdServer did not send a server-sig-algs list; defaulting to something in our preferred algorithms listr˜   r0   zCurrent key type, z&, is in our preferred list; using thatr   z3 not in our list - trying first list item instead, )rF   r   rš   )rA   rz   r¡   r£   Únoncert_key_typeÚactualÚalgorB   rB   rC   r¤   8  s   z1AuthOnlyHandler._choose_fallback_pubkey_algorithmrE   r  )rð   r  r  r  r  r  r4  rY   r^   r`   rd   r¤   Ú__classcell__rB   rB   r0  rC   r,  È  s    

)

r,  );r  r1   r1  r‡   r«   Ú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$   Úparamiko.messager%   Úparamiko.utilr&   r'   Úparamiko.ssh_exceptionr(   r)   r*   r+   Úparamiko.serverr,   Úparamiko.ssh_gssr-   r.   r/   rö   r,  rB   rB   rB   rC   Ú<module>   s(   ”%      l