509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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	ƒsže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/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/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r®qH|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rúttjj|ƒ}|jtd
|djtt|ƒƒf ƒƒ |jdƒ q¦W |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