ó —¤Ø[c@s›dZddlmZddlmZddlZddlZddlZddlZdZdfd„ƒYZ d„Z d ej ej fd „ƒYZ dS( sK rhn.SSL builds an abstraction on top of the objects provided by pyOpenSSL iÿÿÿÿ(tSSL(tcryptoNixt SSLSocketcBs¹eZdZdd„Zd„Zd„Zdd„Zd„Zd„Z d„Z d„Z d „Z d „Z d d „Zdd „Zd„Zd„Zd„ZeZeZdd„ZRS(sM Class that wraps a pyOpenSSL Connection object, adding more methods cCs—d|_d|_||_g|_|p-g}x|D]}|j|ƒq7Wtj|_tj |_ d|_ d|_ d|_ d|_d|_dS(Ni it(tNonet_ctxt _connectiont_sockt_trusted_certstadd_trusted_certRt SSLv23_METHODt _ssl_methodt VERIFY_PEERt_ssl_verify_flagst _buffer_sizet_post_buffert_makefile_calledt_closed(tselftsockett trusted_certstf((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyt__init__+s            cCs9tj|tjƒs%td|‚n|jj|ƒdS(sh Adds a trusted certificate to the certificate store of the SSL context object. s"Unable to read certificate file %sN(tostaccesstR_OKt ValueErrorRtappend(Rtfile((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR HscCså|jƒtj|jƒ|_|jjtjƒ|jjtjƒ|jrux-|jD]}|jj |ƒqXWn d|_ |jj |j t ƒt tdƒr¹|jjtjƒntj|j|jƒ|_|jjƒdS(s1 Initializes the SSL connection. itOP_DONT_INSERT_EMPTY_FRAGMENTSN(t _check_closedRtContextR Rt set_optionst OP_NO_SSLv2t OP_NO_SSLv3Rtload_verify_locationsR t set_verifytssl_verify_callbackthasattrRt ConnectionRRtset_connect_state(RR((s+/usr/lib/python2.7/site-packages/rhn/SSL.pytinit_sslQs   cCs&|r||_n|jd|_|S(sG Returns self, since we are a file-like object already i(RR(Rtmodetbufsize((s+/usr/lib/python2.7/site-packages/rhn/SSL.pytmakefileos cCs8|jr dS|js$|jƒdS|jd|_dS(s+ Closes the SSL connection Ni(RRt _really_close(R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pytclose|s    cCs|jdkrdStjddkrN|jjƒdkrs|jjƒqsn%|jjƒdkrs|jjƒn|jjƒd|_dS(Niis%SSL negotiation finished successfullyi( RRtsyst version_infotget_state_stringtshutdownt state_stringR/R(R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR.‹s cCs|jrtd‚ndS(NsI/O operation on closed file(RR(R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRœs cCs/t|j|ƒr"t|j|ƒSt|‚dS(N(R'RtgetattrtAttributeError(Rtname((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyt __getattr__ scCsdS(s' Returns false always. i((R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pytisatty¦scCs|jS(N(R(R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyttell¬sicCs td‚dS(Ntseek(tNotImplementedError(RtposR+((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR;¯scCs|jƒ|j}t|jƒ}x||ks=|dkr<|dk r_t|||ƒ}nyT|jj|ƒ}|j||_t|jƒ}|jjƒ}|dkr²PnWq%t j k rÊPq%t j k rì}dG|j GHPq%t j k r|jtjdƒq%t jk r8|jtjdƒq%Xq%W|rc|j| }|j||_n|j}d|_|jt|ƒ|_|S(s@ Reads up to amt bytes from the SSL connection. is SSL exceptiontreadRN(RRtlenRRtminRtrecvtpendingRtZeroReturnErrort SysCallErrortargstWantWriteErrort_polltselecttPOLLOUTt WantReadErrortPOLLINR(Rtamtt buffer_sizet buffer_lengthtdataRBtetret((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR>²s:        cCs[tjƒ}|j|j|ƒ|j|jjƒdƒ}|gkrWtd|‚ndS(NièsConnection timed out on %s(RHtpolltregisterRt gettimeouttTimeoutException(Rt filter_typet caller_nametpollertres((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRGäs   cCs­|jƒt|ƒ}xtr¨y6|jj|ƒ}|t|ƒkrJPn||}Wqtjk r~|jtj dƒqtj k r¤|jtj dƒqXqW|S(s/ Writes to the SSL connection. twrite( RR?tTrueRtsendRRFRGRHRIRJRK(RROtoriglentsent((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRZës   cCs |j|ƒS(N(R>(RRL((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRAscCs–|jƒx]trid}|jjdƒ}|dkrD|d}n$|rht|jƒ|krh|}n|dk r«|j| }|j||_|jt|ƒ|_|S|j}|rÜt|j|t|jƒƒ}ny&|j j |ƒ}|j||_Wq t j k rPq t j k r?|jtjdƒq t jk re|jtjdƒq Xq W|j}d|_|jt|ƒ|_|S(sg Reads a single line (up to `length' characters long) from the SSL connection. s iitreadlineRN(RR[RRtfindR?RRR@RRARRCRFRGRHRIRJRK(Rtlengtht charcounttiRQR,RO((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR_s:        "  N(t__name__t __module__t__doc__RRR R*R-R/R.RR8R9R:R;R>RGRZRAR\tsendallR_(((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR's&          2   cCs|S(sb Verify callback, which will be called for each certificate in the certificate chain. ((tconntcertterrnumtdepthtok((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyR&7sRUcBseZd„Zd„ZRS(cGs ||_dS(N(RE(RRE((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRAscCsdS(NsTimeout Exception((R((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyt__str__Ds(RdReRRm(((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyRU?s (RftOpenSSLRRRR0RRHtDEFAULT_TIMEOUTRR&tErrorttimeoutRU(((s+/usr/lib/python2.7/site-packages/rhn/SSL.pyts    ÿ