Ñò UVà[c @s dZddkZddkZddkZddkTddklZddkl Z ddk l Z l Z l Z lZddklZdefd „ƒYZdS( s L{AuthHandler} iÿÿÿÿN(t*(tutil(tMessage(t SSHExceptiontAuthenticationExceptiontBadAuthenticationTypetPartialAuthentication(tInteractiveQueryt AuthHandlercBs3eZdZd„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„Zhee6ee6ee6Zhee6ee6ee 6ee!6ee"6Z#e$d„ƒZ%RS(sC Internal class to handle the mechanics of authentication. cCspti|ƒ|_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 ((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt__init__*s         cCs|iS(N(R(R((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pytis_authenticated8scCs |iio|iS|iSdS(N(R t server_modeRR(R((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt get_username;s cCsQ|iiiƒz)||_d|_||_|iƒWd|iiiƒXdS(Ntnone(R tlocktacquireRRRt _request_authtrelease(RRtevent((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt auth_noneAs   cCsZ|iiiƒz2||_d|_||_||_|iƒWd|iiiƒXdS(Nt publickey( R RR RRRRR!R"(RRtkeyR#((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pytauth_publickeyKs    cCsZ|iiiƒz2||_d|_||_||_|iƒWd|iiiƒXdS(NR( R RR RRRRR!R"(RRRR#((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt auth_passwordVs    R cCsc|iiiƒz;||_d|_||_||_||_|iƒWd|iii ƒXdS(sK response_list = handler(title, instructions, prompt_list) skeyboard-interactiveN( R RR RRRRRR!R"(RRthandlerR#R((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pytauth_interactiveas     cCs%|idj o|iiƒndS(N(RR tset(R((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pytabortpscCs=tƒ}|ittƒƒ|idƒ|ii|ƒdS(Ns ssh-userauth(Rtadd_bytetchrtMSG_SERVICE_REQUESTt add_stringR t _send_message(Rtm((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyR!xs  cCsdtƒ}|ittƒƒ|itƒ|idƒ|idƒ|ii|ƒ|ii ƒdS(NsService not availableten( RR-R.tMSG_DISCONNECTtadd_intt DISCONNECT_SERVICE_NOT_AVAILABLER0R R1tclose(RR2((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt!_disconnect_service_not_available~s    cCsdtƒ}|ittƒƒ|itƒ|idƒ|idƒ|ii|ƒ|ii ƒdS(NsNo more auth methods availableR3( RR-R.R4R5t)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLER0R R1R7(RR2((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_disconnect_no_more_auth‡s    cCs“tƒ}|i|iiƒ|ittƒƒ|i|ƒ|i|ƒ|idƒ|idƒ|i|iƒƒ|it |ƒƒt |ƒS(NR%i( RR0R t session_idR-R.tMSG_USERAUTH_REQUESTt add_booleantget_nametstr(RR&tserviceRR2((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_get_session_blobs     cCséx„to||idƒ|iiƒpI|iiƒ}|djpt|itƒot dƒ}n|‚n|i ƒoPqqW|i ƒpQ|iiƒ}|djot dƒ}nt|it ƒo|i S|‚ngS(Ngš™™™™™¹?sAuthentication failed.(tTruetwaitR t is_activet get_exceptionR t issubclasst __class__tEOFErrorRtisSetRRt allowed_types(RR#te((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pytwait_for_responseœs$        cCsr|iƒ}|iioK|djo>tƒ}|ittƒƒ|i|ƒ|ii|ƒdS|i ƒdS(Ns ssh-userauth( t get_stringR RRR-R.tMSG_SERVICE_ACCEPTR0R1R8(RR2R@((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_service_request±s   cCsì|iƒ}|djo¸|iitdƒtƒ}|ittƒƒ|i|i ƒ|idƒ|i|i ƒ|i djoJ|i t ƒ|i }t|tƒo|idƒ}n|i|ƒnï|i djo†|i tƒ|i|iiƒƒ|it|iƒƒ|i|id|i ƒ}|ii|ii|ƒ}|it|ƒƒnY|i djo!|idƒ|i|iƒn(|i d jontd |i ƒ‚|ii|ƒn|iitd |ƒ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_datatrandpoolRRR1(RR2R@Rtblobtsig((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_service_accept½s:        cCstƒ}|tjo7|iitd|ƒ|ittƒƒt|_ n|iitd|ƒ|itt ƒƒ|i |ii i |ƒƒ|tjo|idƒn|idƒ|id7_|ii|ƒ|idjo|iƒn|tjo|iiƒ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((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_send_auth_resultÞs"      cCs©tƒ}|ittƒƒ|i|iƒ|i|iƒ|idƒ|it|i ƒƒx3|i D](}|i|dƒ|i |dƒqiW|i i |ƒdS(NR ii( RR-R.tMSG_USERAUTH_INFO_REQUESTR0tnamet instructionsR5tlentpromptsR=R R1(RtqR2tp((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_interactive_queryôs   c Cs*|iipKtƒ}|ittƒƒ|idƒ|idƒ|ii|ƒdS|i odS|i ƒ}|i ƒ}|i ƒ}|ii t d|||fƒ|djo|i ƒdS|idj o2|i|jo"|ii tdƒ|iƒdS||_|djo|iii|ƒ}nÜ|djo¹|iƒ}|i ƒ}y|idƒ}Wntj onX|oU|ii t dƒ|i ƒ}y|idd ƒ}Wntj onXt}q|iii||ƒ}n|d jo|iƒ} |i ƒ} |i ƒ} y |ii| t| ƒƒ} WnWtj o,} |ii td t| ƒƒd} n!|ii td ƒd} nX| djo|iƒdS|iii|| ƒ}|tjo­| pKtƒ}|ittƒƒ|i| ƒ|i| ƒ|ii|ƒdSt|i ƒƒ}|i| ||ƒ}| i ||ƒp|ii td ƒt}q—qny|djoV|i ƒ}|i ƒ}|iii!||ƒ}t"|t#ƒo|i$|ƒdSn|iii|ƒ}|i%|||ƒ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((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_requestsš                                      cCsU|iitd|iƒt|_|iiƒ|idjo|ii ƒndS(NsAuthentication (%s) successful!( R RPR[RRBRRaRR R+(RR2((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_success_s   cCs|iƒ}|iƒ}|oF|iitdƒ|iitdt|ƒƒt|ƒ|i_n{|i |joP|iitd|i ƒ|iitdt|ƒƒt d|ƒ|i_n|iitd|i ƒt |_ d|_|idjo|iiƒ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((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_failurefs    cCs3|iƒ}|iƒ}|iitd|ƒdS(Ns Auth banner: (RMR RPR[(RR2tbannerR((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_bannerxs  c Cs|idjotdƒ‚n|iƒ}|iƒ}|iƒ|iƒ}g}x3t|ƒD]%}|i|iƒ|iƒfƒqaW|i|||ƒ}tƒ}|i t t ƒƒ|i t |ƒƒx|D]}|i|ƒqÕW|ii|ƒdS(Nskeyboard-interactives Illegal info request from server(RRRMtget_inttrangetappendRpRRR-R.tMSG_USERAUTH_INFO_RESPONSER5RhR0R R1( RR2ttitleRgRit prompt_listtit response_listtr((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_info_request~s$     # cCs°|iiptdƒ‚n|iƒ}g}x't|ƒD]}|i|iƒƒq<W|iii|ƒ}t t |ƒt ƒo|i |ƒdS|i |id|ƒdS(Ns!Illegal info response from serverskeyboard-interactive(R RRR‰RŠR‹RMR^tcheck_auth_interactive_responseRRttypeRRlRdR(RR2tnt responsesRRc((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_parse_userauth_info_response‘s    cCs |iio|iS|iSdS(N(R Rt_server_handler_tablet_client_handler_table(R((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyt_handler_table°s (&t__name__t __module__t__doc__RRRR$R'R(R*R,R!R8R:RARLRORYRdRlR€RR†RˆR’R—R/R<RŒR˜RNR\R]tMSG_USERAUTH_BANNERReR™tpropertyRš(((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyR%sF        !  ^       (Rt threadingR tencodings.utf_8t encodingstparamiko.commontparamikoRtparamiko.messageRtparamiko.ssh_exceptionRRRRtparamiko.serverRtobjectR(((s9/usr/lib/python2.6/site-packages/paramiko/auth_handler.pyts    "