3 0Q=ji4 @sDddlZddlZddlZddlZddlZddlZddlmZyddlm Z Wne k rde Z YnXddl m Z ddlmZddlmZddlmZddlmZdd lmZdd lmZdad Zd d ZddZddZddZddZddZd)ddZd*ddZd+ddZGdd d eZ d!d"Z!d#d$Z"d%d&Z#d'd(Z$dS),N) rpcServer)DictType)rpclib)config) rhnserver) up2dateErrors) up2dateLog) up2dateUtils) statisticsz /var/spool/up2date/loginAuth.pklcCs@tj}|d}tj|tjs"dSt|d}|j}|j|S)N systemIdPathr)rinitUp2dateConfigosaccessR_OKopenreadclose)cfgpathfretr!/usr/lib/python3.6/up2dateAuth.py getSystemIds rc Cstj}t}d}|dkr|SyDtjj|dd}|jdd}|dkrN|}n|jd||f|Stk r|jd|j t j YnX|S) z Extract the preferred_interface parameter from system_id XML Returns 'IPv4' or 'IPv6' if specified, otherwise 'IPv4' as default IPv4Nrpreferred_interfaceIPv6zGInvalid preferred_interface value '%s' in system_id, defaulting to '%s'zGFailed to parse system_id XML, preferred_interface defaulting to 'IPv4')rr) rinitLogrr xmlrpclibloadsgetlog_me Exception log_exceptionsysexc_info)logsystemIdrZparamsZ cfg_interfacerrrgetPreferredInterface(s$   r)c $CsvtjjdrdStj}ytjjtddd}Wn dSt j }|d oZ||krrt j }|j jt|}|d}|d|jd}tj|tjsytj|Wn dStj|tjsdStjj|r|d}ytj||Wn dStj|tjtjBtjBtjBtjBd}ytj|d } Wn"tk rVtj|YnXz| j|Wd| jXdS) NZLEAPP_IPU_IN_PROGRESSrZ os_releaseZchannelOverrider /z.saveiw) renvironr!rr rrr rr Z getVersionrZRegistrationRhnServerZ registrationZupgrade_versionrfindrW_OKmkdirrlexistsrenamerO_WRONLYO_CREATO_TRUNC O_NOFOLLOW O_CLOEXECfdopenr#rwrite) ridVerZ systemVersZ newSystemIdrdirZsavePathfdrrrrmaybeUpdateVersionLsF ( r=c!Csftj}|jdts$|jddStjtd}tjjt}tj |tj svytj |dWn|j d|dSytjj trtjttjttjtjBtjBtjBtjBd}ytj|dtj|d}Wn tk rtj|YnX|tj||Wd QRXWn$tk r6|j d tdSX|d ttd }|jd |d d|ddS)z Pickle loginInfo to a file Returns: True -- wrote loginInfo to a pickle file False -- did _not_ write loginInfo to a pickle file zwriteCachedLogin() invokedz1writeCachedLogin() loginInfo is None, so bailing.F)time loginInfoiz'Unable to write pickled loginInfo to %sir+NzUnable to write loginInfo to %sr>zX-RHN-Auth-Expire-OffsetzWrote pickled loginInfo at z with expiration of z seconds.T)rr log_debugr?r>rrdirnamepcklAuthFileNamerr.r/r"r0unlinkrr2r3r4r5r6fchmodr7r#rjsondumpfloat)r'dataZpcklDirr<pcklAuth expireTimerrrwriteCachedLoginsF       rKc CsTtj}|jdtjttjs2|jdtdSttd}ytj |}Wn*t t fk rt|jd|j dSX|j yLt jjtddd}d|d d }||kr|jd ||fdSWn YnX|d }|d }tj}|t|d }|jd|d|dt|d ||kr<|jd||fdSt||jd|dS)zb Read pickle info from a file Caches authorization info for connecting to the server. zreadCachedLogin invokedz'Unable to read pickled loginInfo at: %sFr zSUnexpected EOF. Probably an empty file, regenerate auth filerZ system_idzID-%sr?zX-RHN-Server-Idz#system id version changed: %s vs %sr>zX-RHN-Auth-Expire-Offsetz(Checking pickled loginInfo, currentTime=z , createTime=z, expire-offset=z9Pickled loginInfo has expired, created = %s, expire = %s.zrG_updateLoginInfo) r'rIrHr9ZcidVerZ createdTimeliZ currentTimerJrrrreadCachedLoginsH     rQcCs2t|tkr*tttkr$tj|q.|andadS)z, Update the global var, "loginInfo" N)typerr?update)rPrrrrOs    rOFcstj}|jd|| r,t r,tr,tStj|d}|dkrFt}|sNdSt|j d|j j |t j t|tj}t|ttr|j dtttrtdfd d tjD}|jd |n|jd ttjtS)Nzlogin(forceUpdate=%s) invoked)timeoutzlogging into up2date serverz?successfully retrieved authentication token from up2date serverX-RHN-Server-IdX-RHN-Auth-User-IdX-RHN-Auth-Server-TimeX-RHN-Auth-Expire-OffsetX-RHN-Auth-Channelscs"i|]\}}|kr|nd|qS)z r).0kv)_SAFE_LOGIN_KEYSrr "szlogin..z logininfo:zlogininfo: )rUrVrWrXrY)rrr@r?rQrZ RhnServerrr=r"Zup2dateloginsocketZgetfqdn_get_panel_namer Zcount_server_usersrOrK isinstancedict frozensetitemsrR__name__)r( forceUpdaterTr'ZserverrPZredactedr)r]rr_s>        r_cCs0tj}|jdtd|dts,tjdtS)NzupdateLoginInfo() login infoT)rgrTzUnable to authenticate)rrr"r_r?rZAuthenticationError)rTr'rrrupdateLoginInfo+s    rhc Cs8ytaWntk r daYnXtr*tSt|dtS)N)rT)r? NameErrorr_)rTrrr getLoginInfo5s  rjc@s eZdZdS)_FailedToGetPanelNameN)rf __module__ __qualname__rrrrrkBsrkc CsLy t}Wn8tk rBts8|jtj|jdt}YnX|jS)Nz?Failed to get panel name via cldetect, using fallback mechanism) _get_panel_name_via_cldetectrk_is_cldeploy_runningr$r%r&r"_fallback_get_panel_namelower)r'Z panel_namerrrraFs   racCstd}d}d}tjj|r8t|}|jj}WdQRX|rpd|}tjj|rpt|}d|jk}WdQRX|S)Nz/var/lock/cldeploy.lckFz/proc/%s/cmdlineZcldeploy)rrexistsrrstrip)Zlock_file_pathZcldeploy_runningpidrZpid_cmdline_pathrrrroSs    rocCsrddg\}}}tjj|s(td|tj|tjtjdd}|j\}}|jdkrjtddj ||f|j S) Nz/usr/bin/cldetectz--detect-cp-nameonlyz7Failed to obtain panel name because '%s' does not existT)stdoutstderrZuniversal_newlinesrz:Failed to obtain panel name using '%s' command; stderr: %s ) rrrrrk subprocessPopenPIPEZ communicate returncodejoinrs)Zbinary_cmdZprocessrurvrrrrnds   rncCsdtjjdrdStjjdr dStjjdr0dStjjdr@dStjjd rPd Stjjd r`d Sd S)Nz/usr/local/psa/admin/Zpleskz/usr/local/interworx/Z interworxz#/usr/local/cpanel/whostmgr/docroot/Zcpanelz/usr/local/ispmgr/Zispmgrz/usr/local/directadmin/Z directadminz/usr/local/mgr5/sbin/mgrctlZispmgr5unknown)rrisdirisfilerrrrrpws      rp)NFN)N)N)%rErr%r>r`rxZup2date_clientrtypesr ImportErrorrcZrhnrrrrrr r r?rBrr)r=rKrQrOr_rhrjr#rkrarornrprrrrsB          $69, 3