3 �Xji4� @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