3 0Q=ji4ã @sDddlZddlZddlZddlZddlZddlZddlmZyddlm Z Wne k rde Z YnXddl m Z ddlmZddlmZddlmZddlmZdd lmZdd lmZdad Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zd)dd„Zd*dd„Zd+dd„ZGdd „d eƒZ 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|tjƒs"dSt|dƒ}|jƒ}|jƒ|S)NÚ systemIdPathÚr)rÚinitUp2dateConfigÚosÚaccessÚR_OKÚopenÚreadÚclose)ÚcfgÚpathÚfÚret©rú!/usr/lib/python3.6/up2dateAuth.pyÚ getSystemIds rc Cs”tjƒ}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 ÚIPv4NrÚpreferred_interfaceÚIPv6zGInvalid preferred_interface value '%s' in system_id, defaulting to '%s'zGFailed to parse system_id XML, preferred_interface defaulting to 'IPv4')rr) rÚinitLogrrÚ xmlrpclibÚloadsÚgetÚlog_meÚ ExceptionÚ log_exceptionÚsysÚexc_info)ÚlogÚsystemIdrZparamsZ cfg_interfacerrrÚgetPreferredInterface(s$   r)c $CsvtjjdƒrdStjƒ}ytjjtƒƒddd}Wn dSt j ƒ}|d oZ||k�rrt j ƒ}|j jtƒ|ƒ}|d}|d|jdƒ…}tj|tjƒs¸ytj|ƒWn dStj|tjƒsÊdStjj|ƒ�rü|d}ytj||ƒWn dStj|tjtjBtjBtjBtjBdƒ}ytj|d ƒ} Wn"tk �rVtj|ƒ‚YnXz| j|ƒWd| jƒXdS) NZLEAPP_IPU_IN_PROGRESSrZ os_releaseZchannelOverrider ú/z.savei€Úw) rÚenvironr!rr rrr rr Z getVersionrZRegistrationRhnServerZ registrationZupgrade_versionÚrfindrÚW_OKÚmkdirrÚlexistsÚrenamerÚO_WRONLYÚO_CREATÚO_TRUNCÚ O_NOFOLLOWÚ O_CLOEXECÚfdopenr#rÚwrite) rÚidVerZ systemVerÚsZ newSystemIdrÚdirZsavePathÚfdrrrrÚmaybeUpdateVersionLsF ( r=c!Csftjƒ}|jdƒts$|jdƒdStjƒtdœ}tjjtƒ}tj |tj ƒsvytj |dƒWn|j d|ƒdSyœtjj tƒrŽtjtƒtjttjtjBtjBtjBtjBdƒ}ytj|dƒtj|dƒ}Wn tk ròtj|ƒ‚YnX|�tj||ƒWd QRXWn$tk �r6|j d tƒdSX|d ttd ƒ}|jd |d d|dƒdS)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Ú loginInfoiÀz'Unable to write pickled loginInfo to %si€r+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>rrÚdirnameÚpcklAuthFileNamerr.r/r"r0Úunlinkrr2r3r4r5r6Úfchmodr7r#rÚjsonÚdumpÚfloat)r'ÚdataZpcklDirr<ÚpcklAuthÚ expireTimerrrÚwriteCachedLogin‚sF       rKc CsTtjƒ}|jdƒtjttjƒs2|jdtƒdSttdƒ}ytj |ƒ}Wn*t t fk rt|jdƒ|j ƒdSX|j ƒyLt jjtƒƒddd}d|d d }||krÈ|jd ||fƒdSWn YnX|d }|d }tjƒ}|t|d ƒ}|jd|d|dt|d ƒƒ||k�r<|jd||fƒdSt|ƒ|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 createdTimeÚliZ currentTimerJrrrÚreadCachedLogin»sH     rQcCs2t|ƒtkr*ttƒtkr$tj|ƒq.|andadS)z, Update the global var, "loginInfo" N)Útyperr?Úupdate)rPrrrrOçs    rOFcsætjƒ}|jd|ƒ| r,t r,tƒr,tStj|d�}|dkrFtƒ}|sNdStƒ|j dƒ|j j |t j ƒt|ƒtjƒƒ}t|ƒtƒtr˜|j dƒtttƒrÎtdƒ‰‡fd d „tjƒDƒ}|jd |ƒn|jd ttƒjƒtS)Nzlogin(forceUpdate=%s) invoked)Útimeoutzlogging into up2date serverz?successfully retrieved authentication token from up2date serverúX-RHN-Server-IdúX-RHN-Auth-User-IdúX-RHN-Auth-Server-TimeúX-RHN-Auth-Expire-OffsetúX-RHN-Auth-Channelscs"i|]\}}|ˆkr|nd|“qS)z r)Ú.0ÚkÚv)Ú_SAFE_LOGIN_KEYSrrú "szlogin..z logininfo:zlogininfo: )rUrVrWrXrY)rrr@r?rQrZ RhnServerrr=r"Zup2dateÚloginÚsocketZgetfqdnÚ_get_panel_namer Zcount_server_usersrOrKÚ isinstanceÚdictÚ frozensetÚitemsrRÚ__name__)r(Ú forceUpdaterTr'ZserverrPZredactedr)r]rr_øs>        r_cCs0tjƒ}|jdƒtd|d�ts,tjdƒ‚tS)NzupdateLoginInfo() login infoT)rgrTzUnable to authenticate)rrr"r_r?rZAuthenticationError)rTr'rrrÚupdateLoginInfo+s    rhc Cs8ytaWntk r daYnXtr*tSt|d�tS)N)rT)r?Ú NameErrorr_)rTrrrÚ getLoginInfo5s  rjc@s eZdZdS)Ú_FailedToGetPanelNameN)rfÚ __module__Ú __qualname__rrrrrkBsrkc CsLy tƒ}Wn8tk rBtƒs8|jtjƒŽ|jdƒtƒ}YnX|jƒS)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_nameÚlower)r'Z panel_namerrrraFs   racCstd}d}d}tjj|ƒr8t|ƒ�}|jƒjƒ}WdQRX|rpd|}tjj|ƒrpt|ƒ�}d|jƒk}WdQRX|S)Nz/var/lock/cldeploy.lckFz/proc/%s/cmdlineZcldeploy)rrÚexistsrrÚstrip)Zlock_file_pathZcldeploy_runningÚpidrZpid_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)ÚstdoutÚstderrZuniversal_newlinesrz:Failed to obtain panel name using '%s' command; stderr: %sú ) rrrrrkÚ subprocessÚPopenÚPIPEZ communicateÚ returncodeÚjoinrs)ZbinaryÚ_ÚcmdZprocessrurvrrrrnds   rncCsdtjjdƒrdStjjdƒr dStjjdƒr0dStjjdƒr@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/mgrctlZispmgr5Úunknown)rrÚisdirÚisfilerrrrrpws      rp)NFN)N)N)%rErr%r>r`rxZup2date_clientrÚtypesrÚ ImportErrorrcZrhnrrrrrr r r?rBrr)r=rKrQrOr_rhrjr#rkrarornrprrrrÚsB          $69, 3