
    AHjs                         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 ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*  G d d	      Z+ G d
 de+      Z,y)z
`.AuthHandler`
    N)AUTH_FAILEDAUTH_PARTIALLY_SUCCESSFULAUTH_SUCCESSFULDEBUG)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE DISCONNECT_SERVICE_NOT_AVAILABLEINFOMSG_SERVICE_ACCEPTMSG_SERVICE_REQUESTMSG_USERAUTH_BANNERMSG_USERAUTH_FAILUREMSG_USERAUTH_INFO_REQUESTMSG_USERAUTH_INFO_RESPONSEMSG_USERAUTH_REQUESTMSG_USERAUTH_SUCCESSWARNINGcMSG_DISCONNECTcMSG_SERVICE_ACCEPTcMSG_SERVICE_REQUESTcMSG_USERAUTH_BANNERcMSG_USERAUTH_FAILUREcMSG_USERAUTH_INFO_REQUESTcMSG_USERAUTH_INFO_RESPONSEcMSG_USERAUTH_PK_OKcMSG_USERAUTH_REQUESTcMSG_USERAUTH_SUCCESS)Message)InteractiveQuery)AuthenticationExceptionBadAuthenticationTypePartialAuthenticationSSHException)buc                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d!d	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Z ed        Z!ed        Z"y )"AuthHandlerzC
    Internal class to handle the mechanics of authentication.
    c                     t        j                  |      | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _	        d | _
        d | _        d | _        d| _        y )NF r   )weakrefproxy	transportusernameauthenticated
auth_eventauth_methodbannerpasswordprivate_keyinteractive_handler
submethodsauth_usernameauth_fail_count)selfr+   s     M/root/tools/cai/cai_env/lib/python3.12/site-packages/paramiko/auth_handler.py__init__zAuthHandler.__init__G   se     y1"#' !     c                 4     | j                   j                  | S N)r+   _log)r7   argss     r8   r=   zAuthHandler._logV   s    "t~~""D))r:   c                     | j                   S r<   )r-   r7   s    r8   is_authenticatedzAuthHandler.is_authenticatedY   s    !!!r:   c                 ^    | j                   j                  r| j                  S | j                  S r<   )r+   server_moder5   r,   r@   s    r8   get_usernamezAuthHandler.get_username\   s%    >>%%%%%== r:   c                 2   | j                   j                  j                          	 || _        d| _        || _        | j                          | j                   j                  j                          y # | j                   j                  j                          w xY wNnone)r+   lockacquirer.   r/   r,   _request_authrelease)r7   r,   events      r8   	auth_nonezAuthHandler.auth_noneb   sl    ##%	*#DO%D$DM NN'')DNN'')s   %A0 0&Bc                 @   | j                   j                  j                          	 || _        d| _        || _        || _        | j                          | j                   j                  j                          y # | j                   j                  j                          w xY w)N	publickey)	r+   rH   rI   r.   r/   r,   r2   rJ   rK   )r7   r,   keyrL   s       r8   auth_publickeyzAuthHandler.auth_publickeyl   st    ##%	*#DO*D$DM"D NN'')DNN'')   ,A7 7&Bc                 @   | j                   j                  j                          	 || _        d| _        || _        || _        | j                          | j                   j                  j                          y # | j                   j                  j                          w xY w)Nr1   )	r+   rH   rI   r.   r/   r,   r1   rJ   rK   )r7   r,   r1   rL   s       r8   auth_passwordzAuthHandler.auth_passwordw   ss    ##%	*#DO)D$DM$DM NN'')DNN'')rR   c                 N   | j                   j                  j                          	 || _        d| _        || _        || _        || _        | j                          | j                   j                  j                          y# | j                   j                  j                          w xY w)K
        response_list = handler(title, instructions, prompt_list)
        keyboard-interactiveN)
r+   rH   rI   r.   r/   r,   r3   r4   rJ   rK   )r7   r,   handlerrL   r4   s        r8   auth_interactivezAuthHandler.auth_interactive   s}     	##%	*#DO5D$DM'.D$(DO NN'')DNN'')s   3A> >&B$c                 R    | j                   | j                   j                          y y r<   )r.   setr@   s    r8   abortzAuthHandler.abort   s!    ??&OO! 'r:   c                     t               }|j                  t               |j                  d       | j                  j                  |       y Nssh-userauth)r   add_byter   
add_stringr+   _send_messager7   ms     r8   rJ   zAuthHandler._request_auth   s4    I	

'(	^$$$Q'r:   c                    t               }|j                  t               |j                  t               |j                  d       |j                  d       | j                  j                  |       | j                  j                          y )NzService not availableen)	r   r`   r   add_intr   ra   r+   rb   closerc   s     r8   !_disconnect_service_not_availablez-AuthHandler._disconnect_service_not_available   s]    I	

?#			23	,-	T$$Q'r:   c                    t               }|j                  t               |j                  t               |j                  d       |j                  d       | j                  j                  |       | j                  j                          y )NzNo more auth methods availablerf   )	r   r`   r   rg   r   ra   r+   rb   rh   rc   s     r8   _disconnect_no_more_authz$AuthHandler._disconnect_no_more_auth   s]    I	

?#			;<	56	T$$Q'r:   c                     |j                   r,|j                   j                  |j                   j                  fS |j                         |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)r7   rP   s     r8   _get_key_type_and_bitsz"AuthHandler._get_key_type_and_bits   s;     ????++S__-E-EEE<<>3&&r:   c                    t               }|j                  | j                  j                         |j	                  t
               |j                  |       |j                  |       |j                  d       |j                  d       | j                  |      \  }}|j                  |       |j                  |       |j                         S )NrO   T)	r   ra   r+   
session_idr`   r   add_booleanrq   asbytes)r7   rP   servicer,   	algorithmrd   _bitss           r8   _get_session_blobzAuthHandler._get_session_blob   s    I	T^^../	

()	X	W	[!	d--c24	Y	Tyy{r:   c                    d }| j                   j                  +t        j                         | j                   j                  z   }	 |j                  d       | j                   j	                         sC| j                   j                         }|t        |j                  t              rt        d      }||j                         rn%|"|t        j                         k  rt        d      | j                         sO| j                   j                         }|t        d      }t        |j                  t              r|j                  S |g S )Ng?z5Authentication failed: transport shut down or saw EOFzAuthentication timeout.zAuthentication failed.)r+   auth_timeouttimewait	is_activeget_exception
issubclass	__class__EOFErrorr   is_setrA   r!   allowed_types)r7   rL   max_tses       r8   wait_for_responsezAuthHandler.wait_for_response   s   >>&&2YY[4>>#>#>>FJJsO>>++-NN002I*Q[[("C/OA ||~!f		&;-.GHH  $$&,,.Ay+,DE !++'<=&G	r:   c                    |j                         }| j                  j                  r|dk(  rt               }|j	                  t
               |j                  |       | j                  j                  |       | j                  j                  j                         \  }}|r\t               }|j	                  t               |j                  |       |j                  |       | j                  j                  |       y | j                          y r^   )get_textr+   rC   r   r`   r   ra   rb   server_object
get_bannerr   ri   )r7   rd   rv   r0   languages        r8   _parse_service_requestz"AuthHandler._parse_service_request   s    **,>>%%7n+D	AJJ*+LL!NN((+#~~;;FFHFHI

/0V$X&,,Q/..0r:   c                     | j                   j                  }|j                  dd      |vr(d}| j                  t        |j                  |             y  | j                   j                  |   t        |            S )N-cert-v01@openssh.comr(   z<Auth rejected: pubkey algorithm '{}' unsupported or disabled)r+   preferred_pubkeysreplacer=   r	   format	_key_infor   )r7   rw   keybloboptionserrs        r8   _generate_key_from_requestz&AuthHandler._generate_key_from_request   sl    ..224b9HN  IIdCJJy122t~~''	2773CDDr:   c                    d|vr|S | j                  t        dj                  |             | j                  j                  D cg c]	  }d|v s| }}| j                  t        dj                  |             |st        d      t        | j                  j                  j                  dt        d                  }d}|r|j                  d      }| j                  t        d	j                  |             t        t        |j                  |            }|r+|d
   }| j                  t        dj                  |             nR| j                  t        d       d}t        |j                  |            |d
   }d| }	| j                  t        |	       |j                  d      r|dz  }|| j                  _        |S c c}w )a  
        Given a key type, decide which pubkey algorithm to use with it.

        In most cases this is simply "that key type, again".

        For RSA, this will be one of the SHA2 algorithms, depending on our
        (transport's) configured pubkey algorithms list.
        rsaz0Finalizing pubkey algorithm for key of type {!r}zOur pubkey algorithm list: {}zFAn RSA key was specified, but no RSA pubkey algorithms are configured!zserver-sig-algsr(   N,zServer-side algorithm list: {}r   z!Agreed upon {!r} pubkey algorithmz)No common pubkey algorithms exist! Dying.z=Unable to agree on a pubkey algorithm for signing a {!r} key!z[Server did not send a server-sig-algs list; defaulting to first RSA algorithm in our list: r   )r=   r   r   r+   r   r"   r$   server_extensionsgetr#   splitlistfilter__contains__r   endswith_agreed_pubkey_algorithm)
r7   rn   xmy_algosserver_algo_strpubkey_algoserver_algos	agreementr   msgs
             r8   _finalize_pubkey_algorithmz&AuthHandler._finalize_pubkey_algorithm  s     O		>EE	
  $~~??N!5A:ANN		%8??IJX  NN,,001BAbEJ
 *005LII7>>|L VL$=$=xHII'l		7>>{K
 		%!LM V-cjj.BCC #1+Kop{o|}CIIeS! 4522K2=/[ Os   	F?F?c                    |j                         }|dk(  r| j                  t        d       t               }|j	                  t
               |j                  | j                         |j                  d       |j                  | j                         | j                  dk(  r9|j                  d       t        | j                        }|j                  |       n7| j                  dk(  r|j                  d       | j                  | j                        \  }}| j                  |      }|j                  |       |j                  |       | j                  | j                  d| j                  |      }| j                  j!                  ||      }|j                  |       np| j                  dk(  r-|j                  d	       |j                  | j"                         n4| j                  d
k(  rn$t%        dj'                  | j                              | j(                  j+                  |       y | j                  t        dj'                  |             y )Nr_   zuserauth is OKssh-connectionr1   FrO   TrW   r(   rG   zUnknown auth method "{}"z!Service request "{}" accepted (?))r   r=   r   r   r`   r   ra   r,   r/   rt   r#   r1   rq   r2   r   rz   sign_ssh_datar4   r"   r   r+   rb   )	r7   rd   rv   r1   rn   ry   rw   blobsigs	            r8   _parse_service_acceptz!AuthHandler._parse_service_acceptG  s   **,n$IIe-.	AJJ,-LL'LL)*LL))*:-e$T]]+X&!![0d#!%!<!<T=M=M!N$ ;;HE	Y'T"--$$$MM	 &&44T9ES!!!%;;R T__-!!V+".55d6F6FG  NN((+II:AA'Jr:   c                    t               }|t        k(  rB| j                  t        dj	                  |             |j                  t               d| _        n| j                  t        dj	                  |             |j                  t               |j                  | j                  j                  j                  |             |t        k(  r|j                  d       n&|j                  d       | xj                  dz  c_        | j                  j!                  |       | j                  dk\  r| j#                          |t        k(  r| j                  j%                          y y )NzAuth granted ({}).TzAuth rejected ({}).F   
   )r   r   r=   r	   r   r`   r   r-   r   ra   r+   r   get_allowed_authsr   rt   r6   rb   rk   _auth_trigger)r7   r,   methodresultrd   s        r8   _send_auth_resultzAuthHandler._send_auth_resultq  s   I_$IId077?@JJ,-!%DIId188@AJJ,-LL,,>>xH 22d#e$$$)$$$Q'2%))+_$NN((* %r:   c                    t               }|j                  t               |j                  |j                         |j                  |j
                         |j                  t                      |j                  t        |j                               |j                  D ]*  }|j                  |d          |j                  |d          , | j                  j                  |       y )Nr   r   )r   r`   r   ra   nameinstructionsbytesrg   lenpromptsrt   r+   rb   )r7   qrd   ps       r8   _interactive_queryzAuthHandler._interactive_query  s    I	

-.	QVV	Q^^$	UW			#aii.! 	 ALL1MM!A$	  	$$Q'r:   c           	      2	   | j                   j                  s]t               }|j                  t               |j                  d       |j                  d       | j                   j                  |       y | j                  ry |j                         }|j                         }|j                         }| j                  t        dj                  |||             |dk7  r| j                          y | j                  6| j                  |k7  r'| j                  t        d       | j!                          y || _        |dk(  r'| j                   j"                  j%                  |      }nk|dk(  r|j'                         }|j)                         }	 |j+                  d      }|rA| j                  t        d       |j)                         }	 |j+                  dd	      }t.        }n| j                   j"                  j1                  ||      }n|d
k(  rA|j'                         }	|j                         }
|j)                         }	 | j3                  |
|      }|| j!                          y | j                   j"                  jA                  ||      }|t.        k7  r=|	s]t               }|j                  tB               |j                  |
       |j                  |       | j                   j                  |       y t        |j)                               }| jE                  ||||
      }|jG                  ||      s| j                  t6        d       t.        }n|dk(  rX|jI                         }| j                   j"                  jK                  ||      }tM        |tN              r7| jQ                  |       y | j                   j"                  j%                  |      }| jS                  |||       y # t,        $ r Y Tw xY w# t,        $ r Y )w xY w# t4        $ r;}| j                  t6        dj                  t9        |                   d }Y d }~d }~wt:        $ rI}d}| j                  t6        |j                  |j<                  j>                  |             d }Y d }~Cd }~ww xY w)NrG   Fz.Auth request (type={}) service={}, username={}r   zKAuth rejected because the client attempted to change username in mid-flightr1   zUTF-8z+Auth request to change passwords (rejected)r   rO   zAuth rejected: public key: {}z9Auth rejected: unsupported or mangled public key ({}: {})z Auth rejected: invalid signaturerW   )*r+   rC   r   r`   r   ra   rt   rb   r-   r   r=   r   r   ri   r5   r   rk   r   check_auth_noneget_boolean
get_binarydecodeUnicodeErrorr   check_auth_passwordr   r"   r	   str	Exceptionr   __name__check_auth_publickeyr   rz   verify_ssh_sig
get_stringcheck_auth_interactive
isinstancer   r   r   )r7   rd   r,   rv   r   r   	changereqr1   newpasswordsig_attachedrw   r   rP   r   r   r   r   r4   s                     r8   _parse_userauth_requestz#AuthHandler._parse_userauth_request  s   ~~))	AJJ,-LL MM% NN((+::<**,		<CC	
 &&224*(*II] ))+%V^^11AA(KFz!I||~H#??73
  		%!NOlln"-"4"4Wi"HK %55IIh {"==?L 

I llnG55iI {--/^^11FF#F $#  	AJJ23LL+LL)NN003alln---(I ))$4IId$FG(F--J^^11HH*F &"23''/^^11AA(KFx8]     $ ,   		$ ? F Fs1v NO Q		$

1;;+?+? CDsH   	O" O2 <P "	O/.O/2	O?>O?	R0QR>RRc                     | j                  t        dj                  | j                               d| _        | j
                  j                          | j                  | j                  j                          y y )NzAuthentication ({}) successful!T)	r=   r	   r   r/   r-   r+   r   r.   r[   rc   s     r8   _parse_userauth_successz#AuthHandler._parse_userauth_success  s^    		3::4;K;KL	
 "$$&??&OO! 'r:   c                    |j                         }|j                         }|rS| j                  t        d       | j                  t        dt        |      z          t        |      | j                  _        n| j                  |vrcdj                  | j                        dj                  |      fD ]  }| j                  t        |        t        d|      | j                  _        n/| j                  t        dj                  | j                               d| _        d | _        | j                  | j                  j                          y y )NzAuthentication continues...z	Methods: z'Authentication type ({}) not permitted.zAllowed methods: {}zBad authentication typezAuthentication ({}) failed.F)get_listr   r=   r	   r   r   r!   r+   saved_exceptionr/   r   r    r-   r,   r.   r[   )r7   rd   authlistpartialr   s        r8   _parse_userauth_failurez#AuthHandler._parse_userauth_failure  s   ::< --/IId9:IIe[3x=89-B8-LDNN*X-9@@$$ &,,X6	 & 		%%& .C)8.DNN* II3::4;K;KL #??&OO! 'r:   c                 |    |j                         }|| _        | j                  t        dj	                  |             y )NzAuth banner: {})r   r0   r=   r	   r   )r7   rd   r0   s      r8   _parse_userauth_bannerz"AuthHandler._parse_userauth_banner7  s.    		$)0089r:   c                 8   | j                   dk7  rt        d      |j                         }|j                         }|j                          |j	                         }g }t        |      D ]1  }|j                  |j                         |j                         f       3 | j                  |||      }t               }|j                  t               |j                  t        |             |D ]  }|j                  |        | j                  j!                  |       y )NrW   z Illegal info request from server)r/   r"   r   r   get_intrangeappendr   r3   r   r`   r   rg   r   ra   r+   rb   )	r7   rd   titler   r   prompt_listiresponse_listrs	            r8   _parse_userauth_info_requestz(AuthHandler._parse_userauth_info_request=  s    55ABB

zz|	))+w 	@A

ammo>?	@00<
 I	

./			#m$% 	ALLO	$$Q'r:   c                    | j                   j                  st        d      |j                         }g }t	        |      D ]!  }|j                  |j                                # | j                   j                  j                  |      }t        |t              r| j                  |       y | j                  | j                  d|       y )Nz!Illegal info response from serverrW   )r+   rC   r"   r   r   r   r   r   check_auth_interactive_responser   r   r   r   r5   )r7   rd   n	responsesr   r   s         r8   _parse_userauth_info_responsez)AuthHandler._parse_userauth_info_responseR  s    ~~))BCCIIK	q 	+AQZZ\*	+--MM
 f./##F+ 6	
r:   c                 f    t         | j                  t        | j                  t        | j
                  iS r<   )r   r   r   r   r   r   r@   s    r8   _server_handler_tablez!AuthHandler._server_handler_tablel  s/      !<!< $">">&(J(J
 	
r:   c           
          t         | j                  t        | j                  t        | j
                  t        | j                  t        | j                  iS r<   )
r
   r   r   r   r   r   r   r   r   r   r@   s    r8   _client_handler_tablez!AuthHandler._client_handler_tablex  sE      : : $">"> $">">!<!<%t'H'H
 	
r:   c                 ^    | j                   j                  r| j                  S | j                  S r<   )r+   rC   r   r   r@   s    r8   _handler_tablezAuthHandler._handler_table  s'    >>%%------r:   Nr(   )#r   
__module____qualname____doc__r9   r=   rA   rD   rM   rQ   rT   rY   r\   rJ   ri   rk   rq   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   r    r:   r8   r&   r&   B   s    !*"!*	*	**"(
'<1&	EAF(T+0(x9t""<:(*
4 
 
 
 
 . .r:   r&   c                   N     e Zd ZdZe fd       ZddZd Zd Zd Z	d	dZ
 xZS )
AuthOnlyHandlerzU
    AuthHandler, and just auth, no service requests!

    .. versionadded:: 3.2
    c                 F    t         |   j                         }|t        = |S r<   )superr   copyr
   )r7   my_tabler   s     r8   r   z%AuthOnlyHandler._client_handler_table  s$    70557'(r:   c                    || _         || _        t               }|j                  t               |j                  |       |j                  d       |j                  |        ||       | j                  j                  5  | j                  j                  |       ddd       t        j                         | _        | j                  | j                        S # 1 sw Y   =xY w)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)r/   r,   r   r`   r   ra   r+   rH   rb   	threadingEventr.   r   )r7   r,   r   finish_messagerd   s        r8   send_auth_requestz!AuthOnlyHandler.send_auth_request  s     " I	

()	X	%&	Vq ^^   	,NN((+	, $//+%%doo66	, 	,s   ?CC c                 &    | j                  |d      S rF   r  )r7   r,   s     r8   rM   zAuthOnlyHandler.auth_none  s    %%h77r:   c                     | j                        \  }| j                  |      | j                  d|      fd}| j                  |d|      S )Nr   c                     | j                  d       | j                         | j                         | j                  j                               y )NT)rt   ra   r   )rd   rw   ry   r   rP   s    r8   finishz.AuthOnlyHandler.auth_publickey.<locals>.finish  sB    
 MM$LL#LLLL**4;<r:   rO   )rq   r   rz   r  )r7   r,   rP   rn   r
  rw   ry   r   s     `  @@@r8   rQ   zAuthOnlyHandler.auth_publickey  sa     44S9$33H=	%%	
	= %%hVDDr:   c                 4    fd}| j                  |d|      S )Nc                 \    | j                  d       | j                  t                     y )NF)rt   ra   r#   )rd   r1   s    r8   r
  z-AuthOnlyHandler.auth_password.<locals>.finish  s!     MM% LL8%r:   r1   r  )r7   r,   r1   r
  s     ` r8   rT   zAuthOnlyHandler.auth_password  s    	& %%h
FCCr:   c                 P    d| _         || _        fd}| j                  |d|      S )rV   keyboard_interactivec                 J    | j                  d       | j                         y )Nr(   )ra   )rd   r4   s    r8   r
  z0AuthOnlyHandler.auth_interactive.<locals>.finish  s     LLLL$r:   rW   )r/   r3   r  )r7   r,   rX   r4   r
  s      ` r8   rY   z AuthOnlyHandler.auth_interactive  s2     2#* 	% %%h0FOOr:   r<   r   )r   r   r   r   r   r   r  rM   rQ   rT   rY   __classcell__)r   s   @r8   r   r     s9      
'7R8E0DPr:   r   )-r   r  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   paramiko.messager   paramiko.serverr   paramiko.ssh_exceptionr   r    r!   r"   paramiko.utilr#   r$   r&   r   r   r:   r8   <module>r     sl   &         8 % ,  G	. G	.ToPk oPr:   