
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
`Y/                 @   s4  d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	 yddl
mZmZ W n$ ek
rt   ddlmZmZ Y nX ddlZejdddZeed	seje_ejZd6d7d8d9d:d;d<d=d>d?d@dAdddddgfd Zd!dd"gZG d#d$ d$ZG d%d& d&Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 ZdBd4d5ZdS )Czj
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
urlunsplitzrhn-client-toolsT)ZfallbackugettextUse a HTTP ProxyRemote server URL#https://your.server.url.here/XMLRPC#Whether or not debugging is enabledLocation of system id/etc/sysconfig/rhn/systemid4Override 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 notBNumber of attempts to make at network connections before giving up   )The CA cert used to verify the ssl server'/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERTDisable the reboot actionzDConfig options that can not be overwritten by a config update action	sslCACert	serverURLdisallowConfChangesnoReboot)ZenableProxyr   debugsystemIdPathZversionOverride	httpProxy	proxyUserproxyPasswordZenableProxyAuthZnetworkRetriesr   r   r   r   ZtmpDirc               @   sl   e Zd ZdZdddZdddZdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )
ConfigFilez;class for handling persistent config options for the clientNc             C   s   i | _ || _| jr| j  d S )N)dictfileNameload)selffilename r)   /usr/lib/python3.6/config.py__init__G   s    zConfigFile.__init__c             C   s  |r
|| _ | j d krd S tj| j tjs,d S t| j d}d}x|j D ]}|jddkr^qH||j  }|spqH|d dkr|d d j }qHnd}|jdd}t	|dkrqH|d j }t
|d j }d }|jd	}	|	dkr|d |	 }|}d }|rx|jd
}
|dkr"t|jtj }nVt	|
dkrVyt|}W n tk
rR   Y nX n"|
d dkrjg }ndd |
D }||f}|| jkr| j| }|d k	r||d f}|d k	r|d |f}|| j|< qHW |j  d S )Nrr   #r   r   \=   z	[comment];r!   r"   c             S   s   g | ]}|j  r|j  qS r)   )strip).0valr)   r)   r*   
<listcomp>   s    z#ConfigFile.load.<locals>.<listcomp>r6   r6   )r!   r"   )r%   osaccessR_OKopen	readlinesfindr2   splitlenr   r   encodelocalegetpreferredencodingint
ValueErrorr$   close)r'   r(   fZ	multilineliner=   keyvaluecommentposvaluesZnewvalr)   r)   r*   r&   M   sd    






zConfigFile.loadc          	   C   sJ  | j d krd S tj| j tjsTtjtjj| j tjsTttdtjj| j   d S t| j d d}tj	| j d t
dd |jd |jd |jd x| jj D ]}| j| \}}|jtd	||f  t|tg kr|g}|tkrttjj|}|jtd
|djtt|f  |jd qW |j  tj| j d | j  d S )Nz%s was not foundz.newwZ0644   zI# Automatically generated Red Hat Update Agent config file, do not edit.
z# Format: 1.0
r   z%s[comment]=%s
z%s=%s
r1   
)r%   r7   r8   r9   pathdirnameprint_r:   chmodrB   writer$   keysr   typeFileOptionsmapabspathjoinstrrD   rename)r'   rE   rG   rI   rH   r)   r)   r*   save   s,    
	


"zConfigFile.savec             C   s
   || j kS )N)r$   )r'   namer)   r)   r*   __contains__   s    zConfigFile.__contains__c             C   s   || kS )Nr)   )r'   r^   r)   r)   r*   has_key   s    zConfigFile.has_keyc             C   s
   | j j S )N)r$   rU   )r'   r)   r)   r*   rU      s    zConfigFile.keysc             C   s   dd | j j D S )Nc             S   s   g | ]}|d  qS )r   r)   )r3   ar)   r)   r*   r5      s    z%ConfigFile.values.<locals>.<listcomp>)r$   rK   )r'   r)   r)   r*   rK      s    zConfigFile.valuesc             C   s   | j j| d S )N)r$   update)r'   r$   r)   r)   r*   rb      s    zConfigFile.updatec             C   s   || j kr| j | d S d S )Nr   )r$   )r'   r^   r)   r)   r*   __getitem__   s    
zConfigFile.__getitem__c             C   s0   || j kr| j | }nd}|d |f| j |< d S )Nr   )NN)r$   )r'   r^   rH   r4   r)   r)   r*   __setitem__   s    
zConfigFile.__setitem__c             C   s   || j kr| j | d S dS )Nr   r   )r$   )r'   r^   r)   r)   r*   info   s    
zConfigFile.info)N)N)__name__
__module____qualname____doc__r+   r&   r]   r_   r`   rU   rK   rb   rc   rd   re   r)   r)   r)   r*   r#   E   s   

H$r#   c               @   sv   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )ConfigNc             C   s.   t  | _| jjt |r$| jj| i | _d S )N)r#   storedrb   Defaultsr&   runtime)r'   r(   r)   r)   r*   r+      s
    zConfig.__init__c             C   s    || j krdS || jkrdS dS )NTF)rm   rk   )r'   r^   r)   r)   r*   r_      s
    

zConfig.__contains__c             C   s   || kS )Nr)   )r'   r^   r)   r)   r*   r`      s    zConfig.has_keyc             C   s8   t | jj }x$| jj D ]}||kr|j| qW |S )N)listrm   rU   rk   append)r'   retkr)   r)   r*   rU      s
    zConfig.keysc             C   s*   g }x | j  D ]}|j| j| qW |S )N)rU   ro   rc   )r'   rp   rq   r)   r)   r*   rK      s    zConfig.valuesc             C   s.   g }x$| j  D ]}|j|| j|f qW |S )N)rU   ro   rc   )r'   rp   rq   r)   r)   r*   items  s    zConfig.itemsc             C   s   t | j S )N)r>   rU   )r'   r)   r)   r*   __len__  s    zConfig.__len__c             C   s   || j |< d S )N)rm   )r'   r^   rH   r)   r)   r*   rd     s    zConfig.__setitem__c             C   s,   || j kr| j | S || jkr(| j| S d S )N)rm   rk   )r'   r^   r)   r)   r*   rc     s
    



zConfig.__getitem__c             C   s   | j j|S )N)rk   re   )r'   r^   r)   r)   r*   re     s    zConfig.infoc             C   s   | j j  d S )N)rk   r]   )r'   r)   r)   r*   r]     s    zConfig.savec             C   s8   | j j| x&| j j D ]}|| jkr(q| j|= qW d S )N)rk   r&   rU   rm   )r'   r(   rq   r)   r)   r*   r&     s
    
zConfig.loadc             C   s    || j |< || jkr| j|= d S )N)rk   rm   )r'   r^   rH   r)   r)   r*   set(  s    

z
Config.set)N)rf   rg   rh   r+   r_   r`   rU   rK   rr   rs   rd   rc   re   r]   r&   rt   r)   r)   r)   r*   rj      s   
		
rj   c              C   s^   t  } d}| d }|rZ|dd dkr2|dd }|jd}tt|d |d< dj|}|S )zl returns proxy string in format hostname:port
    hostname is converted to Punycode (RFC3492) if needed
    Nr       zhttp://:r   )initUp2dateConfigr=   r[   r   rZ   )cfgproxyZ	proxyHostpartsr)   r)   r*   getProxySetting/  s    

r{   c             C   s:   t | }tt|d tt|d |d |d |d fS )z? returns url where hostname is converted to Punycode (RFC3492) r   r   r0         )r   r   r   r   r   )urlsr)   r)   r*   convert_url_to_puny@  s    r   c             C   s6   t | }tt|d t|d |d |d |d fS )zZ returns url where hostname is converted from Punycode (RFC3492). Returns unicode string. r   r   r0   r|   r}   )r   r   r   r   )r~   r   r)   r)   r*   convert_url_from_punyE  s    r   c              C   s>   t  } t| d tg kr,dd | d D S t| d gS dS )z return list of serverURL from config
        Note: in config may be one value or more values, but this
        function always return list
    r   c             S   s   g | ]}t |qS r)   )r   )r3   ir)   r)   r*   r5   S  s    z!getServerlURL.<locals>.<listcomp>N)rw   rV   r   )rx   r)   r)   r*   getServerlURLJ  s    r   c             C   s   t  }|jd|  dS )z Set serverURL in config r   N)rw   rt   )r   rx   r)   r)   r*   setServerURLW  s    r   c             C   s   t  }|jd|  dS )z Set sslCACert in config r   N)rw   rt   )r   rx   r)   r)   r*   setSSLCACert\  s    r   /etc/sysconfig/rhn/up2datec             C   sP   yt  W n tk
r    da Y nX t dkrLt| a dt d< tjj rLdt d< t S )z<This function is the right way to get at the up2date config.NFisattyT)rx   	NameErrorrj   sysstdoutr   )Zcfg_filer)   r)   r*   rw   b  s    

rw   )r	   r   )r
   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   ) ri   r7   r   r@   Zrhn.connectionsr   r   Zrhn.i18nr   r   Zurlparser   r   ImportErrorZurllib.parsegettextZtranslationthasattrr   rR   rl   rW   r#   rj   r{   r   r   r   r   r   rw   r)   r)   r)   r*   <module>   sh   
            
 O