ó õùPc@s dZddlZddlZddlZddlTddlmZddlm Z ddl m Z m Z m Z mZddlmZdefd „ƒYZdS( s L{AuthHandler} iÿÿÿÿN(t*(tutil(tMessage(t SSHExceptiontAuthenticationExceptiontBadAuthenticationTypetPartialAuthentication(tInteractiveQueryt AuthHandlercBseZdZd„Zd„Zd„Zd„Zd„Zd„Zdd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Ziee6ee6ee6ee6ee6ee6ee 6ee!6Z"RS(sC Internal class to handle the mechanics of authentication. cCsptj|ƒ|_d|_t|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_dS(Nti(tweakreftproxyt transporttNonetusernametFalset authenticatedt auth_eventt auth_methodtpasswordt private_keytinteractive_handlert submethodst auth_usernametauth_fail_count(tselfR ((s0..\python\site-packages\paramiko\auth_handler.pyt__init__*s         cCs|jS(N(R(R((s0..\python\site-packages\paramiko\auth_handler.pytis_authenticated8scCs|jjr|jS|jSdS(N(R t server_modeRR(R((s0..\python\site-packages\paramiko\auth_handler.pyt get_username;s cCsQ|jjjƒz)||_d|_||_|jƒWd|jjjƒXdS(Ntnone(R tlocktacquireRRRt _request_authtrelease(RRtevent((s0..\python\site-packages\paramiko\auth_handler.pyt auth_noneAs   cCsZ|jjjƒz2||_d|_||_||_|jƒWd|jjjƒXdS(Nt publickey( R RR RRRRR!R"(RRtkeyR#((s0..\python\site-packages\paramiko\auth_handler.pytauth_publickeyKs    cCsZ|jjjƒz2||_d|_||_||_|jƒWd|jjjƒXdS(NR( R RR RRRRR!R"(RRRR#((s0..\python\site-packages\paramiko\auth_handler.pyt auth_passwordVs    R cCsc|jjjƒz;||_d|_||_||_||_|jƒWd|jjj ƒXdS(sK response_list = handler(title, instructions, prompt_list) skeyboard-interactiveN( R RR RRRRRR!R"(RRthandlerR#R((s0..\python\site-packages\paramiko\auth_handler.pytauth_interactiveas     cCs#|jdk r|jjƒndS(N(RR tset(R((s0..\python\site-packages\paramiko\auth_handler.pytabortpscCs=tƒ}|jttƒƒ|jdƒ|jj|ƒdS(Ns ssh-userauth(Rtadd_bytetchrtMSG_SERVICE_REQUESTt add_stringR t _send_message(Rtm((s0..\python\site-packages\paramiko\auth_handler.pyR!xs  cCsdtƒ}|jttƒƒ|jtƒ|jdƒ|jdƒ|jj|ƒ|jj ƒdS(NsService not availableten( RR-R.tMSG_DISCONNECTtadd_intt DISCONNECT_SERVICE_NOT_AVAILABLER0R R1tclose(RR2((s0..\python\site-packages\paramiko\auth_handler.pyt!_disconnect_service_not_available~s    cCsdtƒ}|jttƒƒ|jtƒ|jdƒ|jdƒ|jj|ƒ|jj ƒdS(NsNo more auth methods availableR3( RR-R.R4R5t)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLER0R R1R7(RR2((s0..\python\site-packages\paramiko\auth_handler.pyt_disconnect_no_more_auth‡s    cCs“tƒ}|j|jjƒ|jttƒƒ|j|ƒ|j|ƒ|jdƒ|jdƒ|j|jƒƒ|jt |ƒƒt |ƒS(NR%i( RR0R t session_idR-R.tMSG_USERAUTH_REQUESTt add_booleantget_nametstr(RR&tserviceRR2((s0..\python\site-packages\paramiko\auth_handler.pyt_get_session_blobs     cCsÚx{tr}|jdƒ|jjƒsj|jjƒ}|dksRt|jtƒrat dƒ}n|‚n|j ƒrPqqW|j ƒsÖ|jjƒ}|dkr´t dƒ}nt|jt ƒrÍ|j S|‚ngS(Ngš™™™™™¹?sAuthentication failed.(tTruetwaitR t is_activet get_exceptionR t issubclasst __class__tEOFErrorRtisSetRRt allowed_types(RR#te((s0..\python\site-packages\paramiko\auth_handler.pytwait_for_responseœs"       cCso|jƒ}|jjra|dkratƒ}|jttƒƒ|j|ƒ|jj|ƒdS|j ƒdS(Ns ssh-userauth( t get_stringR RRR-R.tMSG_SERVICE_ACCEPTR0R1R8(RR2R@((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_service_request±s   cCsà|jƒ}|dkrÅ|jjtdƒtƒ}|jttƒƒ|j|j ƒ|jdƒ|j|j ƒ|j dkrÊ|j t ƒ|j }t|tƒrº|jdƒ}n|j|ƒnè|j dkr^|j tƒ|j|jjƒƒ|jt|jƒƒ|j|jd|j ƒ}|jj|jj|ƒ}|jt|ƒƒnT|j dkr|jdƒ|j|jƒn%|j d krŸntd |j ƒ‚|jj|ƒn|jjtd |ƒdS( Ns ssh-userauthsuserauth is OKsssh-connectionRsUTF-8R%skeyboard-interactiveR RsUnknown auth method "%s"s!Service request "%s" accepted (?)(RMR t_logtDEBUGRR-R.R<R0RRR=RRt isinstancetunicodetencodeRBRR>R?RAt sign_ssh_datatrngRRR1(RR2R@Rtblobtsig((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_service_accept½s:        cCstƒ}|tkrK|jjtd|ƒ|jttƒƒt|_ n~|jjtd|ƒ|jtt ƒƒ|j |jj j |ƒƒ|tkr­|jdƒn|jdƒ|jd7_|jj|ƒ|jdkrõ|jƒn|tkr|jjƒndS(NsAuth granted (%s).sAuth rejected (%s).iii (RtAUTH_SUCCESSFULR RPtINFOR-R.tMSG_USERAUTH_SUCCESSRBRtMSG_USERAUTH_FAILURER0t server_objecttget_allowed_authstAUTH_PARTIALLY_SUCCESSFULR=RR1R:t _auth_trigger(RRtmethodtresultR2((s0..\python\site-packages\paramiko\auth_handler.pyt_send_auth_resultÞs"       cCs©tƒ}|jttƒƒ|j|jƒ|j|jƒ|jdƒ|jt|j ƒƒx3|j D](}|j|dƒ|j |dƒqiW|j j |ƒdS(NR ii( RR-R.tMSG_USERAUTH_INFO_REQUESTR0tnamet instructionsR5tlentpromptsR=R R1(RtqR2tp((s0..\python\site-packages\paramiko\auth_handler.pyt_interactive_queryôs  cCs|jjsVtƒ}|jttƒƒ|jdƒ|jdƒ|jj|ƒdS|j rcdS|j ƒ}|j ƒ}|j ƒ}|jj t d|||fƒ|dkrÁ|j ƒdS|jdk r|j|kr|jj tdƒ|jƒdS||_|dkr-|jjj|ƒ}nÃ|dkrë|jƒ}|j ƒ}y|jdƒ}Wntk rwnX|rÐ|jj t dƒ|j ƒ}y|jdd ƒ}Wntk rÆnXt}qð|jjj||ƒ}n|d kr||jƒ} |j ƒ} |j ƒ} y |jj| t| ƒƒ} WnUtk rs} |jj td t| ƒƒd} n |jj td ƒd} nX| dkr­|jƒdS|jjj|| ƒ}|tkrð| s!tƒ}|jttƒƒ|j| ƒ|j| ƒ|jj|ƒdSt|j ƒƒ}|j| ||ƒ}| j ||ƒsy|jj td ƒt}qyqðnt|dkrÛ|j ƒ}|j ƒ}|jjj!||ƒ}t"|t#ƒrð|j$|ƒdSn|jjj|ƒ}|j%|||ƒdS(NRis.Auth request (type=%s) service=%s, username=%ssssh-connectionsKAuth rejected because the client attempted to change username in mid-flightRsUTF-8s+Auth request to change passwords (rejected)treplaceR%sAuth rejected: public key: %ss0Auth rejected: unsupported or mangled public keys Auth rejected: invalid signatureskeyboard-interactive(&R RRR-R.R]R0R=R1RRMRPRQR8RR tWARNINGR:R^tcheck_auth_nonet get_booleantdecodet UnicodeErrort AUTH_FAILEDtcheck_auth_passwordt _key_infoRR[R?tcheck_auth_publickeytMSG_USERAUTH_PK_OKRAtverify_ssh_sigtcheck_auth_interactiveRRRRlRd(RR2RR@RbRct changereqRt newpasswordt sig_attachedtkeytypetkeyblobR&RKRXRWtlangR((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_requestsš                                      cCsS|jjtd|jƒt|_|jjƒ|jdkrO|jj ƒndS(NsAuthentication (%s) successful!( R RPR[RRBRRaRR R+(RR2((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_success_s   cCs|jƒ}|jƒ}|rc|jjtdƒ|jjtdt|ƒƒt|ƒ|j_nx|j |krÁ|jjtd|j ƒ|jjtdt|ƒƒt d|ƒ|j_n|jjtd|j ƒt |_ d|_|jdkr |jjƒndS(NsAuthentication continues...s Methods: s'Authentication type (%s) not permitted.sAllowed methods: sBad authentication typesAuthentication (%s) failed.(tget_listRpR RPR[RQR?Rtsaved_exceptionRRRRR RRR+(RR2tauthlisttpartial((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_failurefs    cCs3|jƒ}|jƒ}|jjtd|ƒdS(Ns Auth banner: (RMR RPR[(RR2tbannerR((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_bannerxs  c Csþ|jdkrtdƒ‚n|jƒ}|jƒ}|jƒ|jƒ}g}x3t|ƒD]%}|j|jƒ|jƒfƒq_W|j|||ƒ}tƒ}|j t t ƒƒ|j t |ƒƒx|D]}|j|ƒqÓW|jj|ƒdS(Nskeyboard-interactives Illegal info request from server(RRRMtget_inttrangetappendRpRRR-R.tMSG_USERAUTH_INFO_RESPONSER5RhR0R R1( RR2ttitleRgRit prompt_listtit response_listtr((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_info_request~s     #  cCs¬|jjstdƒ‚n|jƒ}g}x't|ƒD]}|j|jƒƒq:W|jjj|ƒ}t t |ƒt ƒr’|j |ƒdS|j |jd|ƒdS(Ns!Illegal info response from serverskeyboard-interactive(R RRR‰RŠR‹RMR^tcheck_auth_interactive_responseRRttypeRRlRdR(RR2tnt responsesRRc((s0..\python\site-packages\paramiko\auth_handler.pyt_parse_userauth_info_response‘s   (#t__name__t __module__t__doc__RRRR$R'R(R*R,R!R8R:RARLRORYRdRlR€RR†RˆR’R—R/RNR<R\R]tMSG_USERAUTH_BANNERReRŒt_handler_table(((s0..\python\site-packages\paramiko\auth_handler.pyR%sB        !  ^     (Ršt threadingR tencodings.utf_8t encodingstparamiko.commontparamikoRtparamiko.messageRtparamiko.ssh_exceptionRRRRtparamiko.serverRtobjectR(((s0..\python\site-packages\paramiko\auth_handler.pyts    "