3 g+ @sZddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z dd l mZy$ddlZddlZddlZddlZWn<ek rddljZddljZddljZddljZYnXddlZejd d d Zeed s eje_ejZ ddZ!Gddde j"Z#GdddZ$dddZ%dddZ&ddZ'dS)N)config) clientCaps) up2dateLog) up2dateErrors) up2dateUtils)SSL)rpclib) raise_with_tbzrhn-client-toolsT)ZfallbackugettextcCs t|dS)N)print)msgr /usr/lib/python3.6/rpcServer.pystdoutMsgCallback$src@s$eZdZddZddZddZdS) RetryServercCs ||_dS)N) serverList)selfrr r r addServerList)szRetryServer.addServerListc Cstj|_xry|j||}WnXtjk r:Yn@tjk rRYn(tj k r|jj dt t dt jd Yn|jj}|dkr|jjd|j}|dt jdt jdf}|d|jj}|jj |tj|jj}|d}|d|_|d|_|j}|d krDttjd ||j|_||_|jj|_|jsld |_d|_wYnXPqW|S)Nz,Error: Server Unavailable. Please try later.z!An error occurred talking to %s: z%s %s rzTrying the next serverURL: %s httphttpsz%Redirected to unsupported protocol %sz/RPC2)rr)rinitLoglogZ_requestrZInvalidRedirectionError xmlrpclibZFaulthttplibZ BadStatusLinelog_mer_sysexitrnextresetServerIndexZ_hostexc_infoserverurlparseZurlsplitZ_handlerlowerr Z _orig_handlerZ_typeZ_uriZ_allow_redirect)rZ methodnameZparamsretr$r Z parse_restypr r r _request1,sN             zRetryServer._request1cCstjj|j|S)N)rrZ_Methodr))rnamer r r __getattr__^szRetryServer.__getattr__N)__name__ __module__ __qualname__rr)r+r r r rr(s2rc@s0eZdZgfddZddZddZddZd S) ServerListcCs||_d|_dS)Nr)rindex)rZ serverlistr r r__init__eszServerList.__init__cCs|j|j|_|jS)N)rr0Z serverurl)rr r rr$iszServerList.servercCs(|jd|_|jt|jkr dS|jS)Nr)r0lenrr$)rr r rr!ns zServerList.nextcCs d|_dS)Nr)r0)rr r rr"tszServerList.resetServerIndexN)r,r-r.r1r$r!r"r r r rr/ds r/cCsFtj}|dkr:|d}|dks0t|jdkr4d}|g}t|||S)NZ clnServerURLrz&http://cln.cloudlinux.com/clweb/xmlrpc)rinitUp2dateConfigr2strip getServer)refreshCallbackserverOverridetimeoutcfgr r r getCLNServerwsr:cCstj}tj}|d}t|ts(|g}|p0dg}|drDtj}nd}|sVtj}n|}t|} d} d} |dr|dp|d} |dpd} d} xFdD]>} | t j krt j | sqt j | j d d } | j d d } PqWt | j ||| | |d}|j| |jdtj| r|j| dd|jjD}|rxP|D]H}t j|t jsrdtd|f}|jd|tj||j|q6Wtjtjj}x|D]\}}|j||qW|S)NZ sslCACertz'/usr/share/rhn/CLN-ORG-TRUSTED-SSL-CERTZ enableProxyZenableProxyAuth proxyUser proxyPasswordLANGUAGELC_ALL LC_MESSAGESLANG:r.)r6proxyZusernameZpasswordr8zX-Up2date-VersioncSs"g|]}tj|ddkrdqS)rrT)r%).0ir r r szgetServer..z%s: %sz ERROR: can not find RHNS CA filez%s)r=r>r?r@)rrrr3 isinstancelistZgetProxySettingZ getServerlURLr/osenvironsplitrr$rZ add_headerrversionZsetlangraccessR_OKrrrZSSLCertificateFileNotFoundZadd_trusted_certrZ loadLocalCapsZcapsZ headerFormat)r6r7r8rr9ZcaZ rhns_ca_certsZ proxyHostZ serverUrlsrr;r<ZlangenvsZneed_caZ rhns_ca_certr Z headerlistZ headerNamevaluer r rr5sd              r5cOstj}|jd|jdtj}d}d}yt|d}Wntk rTd}YnX|dkrbd}xPd}d}y|||}Wntk rt t j t dYnt jtjfk r4|jdtjd|f||kr*tjd} t| jdkrt t j | jdnt t j | jdnd}YnBtjk rbtdt t j dYntjk rtjd} d } | d | j} | d | j} | d | j} |j| t t j | Yntjk rPtjd} |jd | j |f| j!dkr$|jd| j"|jdt#j$| j%\} } d} t&| dkrh|jd| ddl'm(}|j)t&| dkr|jt dt t j | j t&| dkr&t*|dt*gkr|d}n|d}t*|t*gkrd|d|d|d|df}n|}d|| f} |j| t t j+| | sL||krHt t j | j nd}Yn&tj,k rtt t j dYnX|dkrPnd}|rt-j.d|d}||krft j dqfW|S)NzrpcServer: Calling XMLRPC %sZ _Method__namerZnetworkRetriesrzConnection aborted by the userz(A socket error occurred: %s, attempt #%szhttplib.IncompleteReadz An HTTP error occurred: zURL: %s zStatus Code: %s zError Message: %s z,A protocol error occurred: %s , attempt #%s,izCould not find URL, %sz)Check server name and/or URL, then retry "z'Auth token timeout occurred errmsg: %s) up2dateAuth3z.Server has refused connection due to high loadz %s-%s-%s.%srzFile Not Found: %s %sz Broken response from the server.z0The data returned from the server was incomplete)/rrZ log_debug__dict__rr3int ValueErrorKeyboardInterruptr rZCommunicationErrorrsocketerrorrZ socket_errorrrr#r2argsrZIncompleteReadr urllib2Z HTTPErrorfilenamecoder rZ ProtocolErrorerrmsgZerrcodeZurlrZ reportErrorZheadersabsup2date_clientrSZupdateLoginInfotypeFileNotFoundErrorZ ResponseErrortimeZsleep)methodr^kwargsrr9r'Z attempt_countZattemptsZfailureer ZerrCodeZerrMsgresetrSZpkgZpkgNamer r rdoCalls           "     rl)NNN)NNN)(rIrr\rgrdrrrrrZrhnrrZrhn.tbr rr_r%r ImportErrorZ http.clientZclientZurllib.requestZrequestZ urllib.parseparseZ xmlrpc.clientgettextZ translationthasattrr rrZServerrr/r:r5rlr r r rs@             < L