Current File : //lib/python3.6/site-packages/up2date_client/__pycache__/config.cpython-36.pyc
3

c8h�9�@sndZddlZddlZddlZddlZddlmZmZddlm	Z	m
Z
yddlmZm
Z
Wn$ek
r|ddlmZm
Z
YnXddlZejddd�Zeed	�s�eje_ejZdEdFdGdHdIdJdKdLdMdNdOdPdQdRdd d!d"d#gfd$�Zd%d d&gZGd'd(�d(�ZGd)d*�d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�ZdSd6d7�ZdTd8d9�Z dUd:d;�Z!d<d=�Z"d>d?�Z#d@dA�Z$dVdCdD�Z%dS)Wzj
This module includes the Config and Up2date Config classes use by the
up2date agent to hold config info.
�N)�idn_ascii_to_puny�idn_puny_to_unicode)�ustr�sstr)�urlsplit�
urlunsplitzrhn-client-toolsT)Zfallback�ugettext�Use a HTTP Proxy�Remote server URL�)https://xmlrpc.cln.cloudlinux.com/XMLRPC/�&Remote server URL for access over IPv6�.https://ipv6.xmlrpc.cln.cloudlinux.com/XMLRPC/�Mirror list URL�>https://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrors�#Whether or not debugging is enabled�Location of system id�/etc/sysconfig/rhn/systemid�4Override the automatically determined system version��;HTTP proxy in host:port format, e.g. squid.example.com:3128�'The username for an authenticated proxy�.The password to use for an authenticated proxy�$To use an authenticated proxy or not�BNumber of attempts to make at network connections before giving up��)The CA cert used to verify the ssl server�'/usr/share/rhn/CLN-ORG-TRUSTED-SSL-CERT�Disable the reboot actionzDConfig options that can not be overwritten by a config update action�	sslCACert�	serverURL�disallowConfChanges�noReboot)ZenableProxyr�
serverURLipv6�	mirrorURL�debug�systemIdPathZversionOverride�	httpProxy�	proxyUser�
proxyPasswordZenableProxyAuthZnetworkRetriesrr!r r%ZtmpDirc@sleZdZdZddd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�
ConfigFilez;class for handling persistent config options for the clientNcCsi|_||_|jr|j�dS)N)�dict�fileName�load)�self�filename�r/�/usr/lib/python3.6/config.py�__init__CszConfigFile.__init__cCs�|r
||_|jdkrdStj|jtj�s,dSt|jd�}d}�x�|j�D�]�}|jd�dkr^qH||j�}|spqH|ddkr�|dd�j�}qHnd}|jdd�}t	|�dkr�qH|dj�}t
|dj��}d}|jd	�}	|	dkr�|d|	�}|}d}|�rx|jd
�}
|dk�r"t|jt
j���}nVt	|
�dk�rVyt|�}Wntk
�rRYnXn"|
ddk�rjg}nd
d�|
D�}||f}||jk�r�|j|}|dk	�r�||df}|dk	�r�|d|f}||j|<qHW|j�dS)N�rr�#rr�\�=�z	[comment]�;r'r(cSsg|]}|j�r|j��qSr/)�strip)�.0�valr/r/r0�
<listcomp>�sz#ConfigFile.load.<locals>.<listcomp>���r<r<)r'r()r+�os�access�R_OK�open�	readlines�findr8�split�lenrr�encode�locale�getpreferredencoding�int�
ValueErrorr*�close)r-r.�fZ	multiline�linerC�key�value�comment�pos�valuesZnewvalr/r/r0r,Isd






zConfigFile.loadc	CsJ|jdkrdStj|jtj�sTtjtjj|j�tj�sTttdtjj|j���dSt|jdd�}tj	|jdt
dd��|jd�|jd�|jd�x�|jj
�D]�}|j|\}}|jtd	||f��t|�tg�kr�|g}|tkr�ttjj|�}|jtd
|djtt|��f��|jd�q�W|j�tj|jd|j�dS)
Nz%s was not foundz.new�wZ0644�zI# Automatically generated Red Hat Update Agent config file, do not edit.
z# Format: 1.0
rz%s[comment]=%s
z%s=%s
r7�
)r+r=r>r?�path�dirname�print�_r@�chmodrH�writer*�keysr�type�FileOptions�map�abspath�join�strrJ�rename)r-rKrMrOrNr/r/r0�save�s,
	


"zConfigFile.savecCs
||jkS)N)r*)r-�namer/r/r0�__contains__�szConfigFile.__contains__cCs||kS)Nr/)r-rdr/r/r0�has_key�szConfigFile.has_keycCs
|jj�S)N)r*r[)r-r/r/r0r[�szConfigFile.keyscCsdd�|jj�D�S)NcSsg|]}|d�qS)rr/)r9�ar/r/r0r;�sz%ConfigFile.values.<locals>.<listcomp>)r*rQ)r-r/r/r0rQ�szConfigFile.valuescCs|jj|�dS)N)r*�update)r-r*r/r/r0rh�szConfigFile.updatecCs||jkr|j|dSdS)Nr)r*)r-rdr/r/r0�__getitem__�s
zConfigFile.__getitem__cCs0||jkr|j|}nd}|d|f|j|<dS)Nr)NN)r*)r-rdrNr:r/r/r0�__setitem__�s
zConfigFile.__setitem__cCs||jkr|j|dSdS)Nrr)r*)r-rdr/r/r0�info�s
zConfigFile.info)N)N)�__name__�
__module__�__qualname__�__doc__r1r,rcrerfr[rQrhrirjrkr/r/r/r0r)@s

H#r)c@sveZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�ConfigNcCs.t�|_|jjt�|r$|jj|�i|_dS)N)r)�storedrh�Defaultsr,�runtime)r-r.r/r/r0r1�s
zConfig.__init__cCs ||jkrdS||jkrdSdS)NTF)rsrq)r-rdr/r/r0re�s


zConfig.__contains__cCs||kS)Nr/)r-rdr/r/r0rf�szConfig.has_keycCs8t|jj��}x$|jj�D]}||kr|j|�qW|S)N)�listrsr[rq�append)r-�ret�kr/r/r0r[�s
zConfig.keyscCs*g}x |j�D]}|j|j|��qW|S)N)r[ruri)r-rvrwr/r/r0rQ�sz
Config.valuescCs.g}x$|j�D]}|j||j|�f�qW|S)N)r[ruri)r-rvrwr/r/r0�items�szConfig.itemscCst|j��S)N)rDr[)r-r/r/r0�__len__szConfig.__len__cCs||j|<dS)N)rs)r-rdrNr/r/r0rjszConfig.__setitem__cCs,||jkr|j|S||jkr(|j|SdS)N)rsrq)r-rdr/r/r0ri
s




zConfig.__getitem__cCs|jj|�S)N)rqrk)r-rdr/r/r0rkszConfig.infocCs|jj�dS)N)rqrc)r-r/r/r0rcszConfig.savecCs8|jj|�x&|jj�D]}||jkr(q|j|=qWdS)N)rqr,r[rs)r-r.rwr/r/r0r,s

zConfig.loadcCs ||j|<||jkr|j|=dS)N)rqrs)r-rdrNr/r/r0�set#s

z
Config.set)N)rlrmrnr1rerfr[rQrxryrjrirkrcr,rzr/r/r/r0rp�s
		
rpcCs^t�}d}|d}|rZ|dd�dkr2|dd�}|jd�}tt|d��|d<dj|�}|S)zkreturns proxy string in format hostname:port
    hostname is converted to Punycode (RFC3492) if needed
    Nr&�zhttp://�:r)�initUp2dateConfigrCrarr`)�cfg�proxyZ	proxyHost�partsr/r/r0�getProxySetting*s

r�cCs:t|�}tt|dtt|d��|d|d|df��S)z=returns url where hostname is converted to Punycode (RFC3492)rrr6��)rrrrr)�url�sr/r/r0�convert_url_to_puny<sr�cCs6t|�}tt|dt|d�|d|d|df��S)zXreturns url where hostname is converted from Punycode (RFC3492). Returns unicode string.rrr6r�r�)rrrr)r�r�r/r/r0�convert_url_from_punyBsr�c
Csvtd}|dkrd}|jd�rVt|jdd�d�� }ttj|j��}dd�|D�SQRXtj	|�}dd�|j
jd	�D�S)
Nr#z>https://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrorszfile://rr2cSsg|]}|rt|��qSr/)r�)r9�mirrorr/r/r0r;Osz+getServerlURLFromMirror.<locals>.<listcomp>cSsg|]}|rt|��qSr/)r�)r9r�r/r/r0r;QsrT)r~�
startswithr@�replacer^rar8rA�requests�get�textrC)r�Z
mirrorlistZmirrorsZrequestr/r/r0�getServerlURLFromMirrorHs

r�cCs&t|t�rdd�|D�St|�gSdS)z�
    Internal function to process server URL to Punycode format.

    Processes both single URLs and lists of URLs.

    :param serverUrl: URL or list of URLs to process.
    :return: List of processed URLs in Punycode format.
    cSsg|]}t|��qSr/)r�)r9�ir/r/r0r;^sz$processServerURL.<locals>.<listcomp>N)�
isinstancertr�)Z	serverUrlr/r/r0�processServerURLTs	
r�FcCs^t�}t|d�}t|d�}||f}||f}|r6|Sddlm}|j�}|dkrZ|rZ|S|S)a�
    Return a pair of server URLs (primary and fallback) based on the preferred interface.

    :param registration: If True, it indicates that the URLs are being fetched for registration purposes.
    If that is the case, the function will always use IPv4 URLs with IPv6 as fallback,
    regardless of the preferred_interface setting.
    Assumed false by default, expected to be specified explicitly when needed.

    :return: Pair of server URL configs, first is the primary, second is the fallback.
    rr"r)�up2dateAuthZIPv6)r}r�Zup2date_clientr�ZgetPreferredInterface)�registrationr~Zipv4_urlZipv6_urlZipv4_primary_pairZipv6_primary_pairr�Zpreferred_interfacer/r/r0�getServerURLPaircsr�cCst|d�dS)az
    Return the primary server URL from config based on preferred_interface.

    If preferred_interface=IPv6 in system_id, returns serverURLipv6 if available.
    Otherwise returns normal serverURL.
    Note: the config may have one value or a list of values, but this function always returns a list.

    :return: List of server URLs with hostnames converted to Punycode.
    )r�r)r�)r�r/r/r0�getServerURL�s
r�cCst|d�dS)z�
    Determine the fallback server URL from system_id.

    The fallback server URL is the one that is *not* set as preferred_interface.
    If preferred_interface is IPv6, it returns serverURL (i.e. IPv4 host), otherwise serverURLipv6.
    )r�r)r�)r�r/r/r0�getFallbackServerURL�sr�cCst�}|jd|�dS)zSet serverURL in configrN)r}rz)rr~r/r/r0�setServerURL�sr�cCst�}|jd|�dS)zSet serverURLipv6 in configr"N)r}rz)rr~r/r/r0�setServerURLipv6�sr�cCst�}|jd|�dS)zSet sslCACert in configrN)r}rz)rr~r/r/r0�setSSLCACert�sr��/etc/sysconfig/rhn/up2datecCsPytWntk
r daYnXtdkrLt|�adtd<tjj�rLdtd<tS)z<This function is the right way to get at the up2date config.NF�isattyT)r~�	NameErrorrp�sys�stdoutr�)Zcfg_filer/r/r0r}�s

r})r	r)r
r)rr
)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)F)F)F)r�)&ror=r�rFr�Zrhn.connectionsrrZrhn.i18nrrZurlparserr�ImportErrorZurllib.parse�gettextZtranslation�t�hasattrrrXrrr]r)rpr�r�r�r�r�r�r�r�r�r�r�r}r/r/r/r0�<module>sb
O
'