
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼me}  ã               @   sH   d dl Z d dlmZ d dlmZ d dlmZ e jeƒZ	G dd„ dƒZ
dS )é    N)ÚStringIO)Úutil)Úchop_commentc               @   s~   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZejd	d„ ƒZed
d„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
ResolvConfc             C   s   || _ d | _d S )N)Ú_textÚ	_contents)ÚselfÚtext© r
   ú!/usr/lib/python3.6/resolv_conf.pyÚ__init__   s    zResolvConf.__init__c             C   s   | j d kr| j| jƒ| _ d S )N)r   Ú_parser   )r   r
   r
   r   Úparse   s    
zResolvConf.parsec             C   s   | j ƒ  | jdƒS )NÚ
nameserver)r   Ú_retr_option)r   r
   r
   r   Únameservers   s    zResolvConf.nameserversc             C   s"   | j ƒ  | jdƒ}|r|d S d S )NÚdomainr   )r   r   )r   Zdmr
   r
   r   Úlocal_domain   s
    
zResolvConf.local_domainc             C   s0   | j ƒ  | jdƒ | jjddt|ƒdgfƒ |S )Nr   ÚoptionÚ )r   Ú_remove_optionr   ÚappendÚstr)r   r   r
   r
   r   r   '   s    
c             C   sJ   | j ƒ  | jdƒ}g }x.|D ]&}x |jd ƒD ]}|r,|j|ƒ q,W qW |S )NÚsearch)r   r   Úsplitr   )r   Zcurrent_sdsÚflat_sdsZsdlistZsdr
   r
   r   Úsearch_domains.   s    

zResolvConf.search_domainsc             C   s–   | j ƒ  tƒ }x~| jD ]t\}}|dkr2|jdƒ q|dkrN|jd|d  ƒ q|dkr|\}}}d||f }t|ƒr|||7 }|jd| ƒ qW |jƒ S )NÚblankÚ
Úall_commentz%s
r   r   z%s %s)r   r   r   ÚwriteÚlenÚgetvalue)r   ÚcontentsÚ	line_typeÚ
componentsÚcfg_optÚ	cfg_valueZcomment_tailÚliner
   r
   r   Ú__str__9   s    
zResolvConf.__str__c             C   s@   g }x6| j D ],\}}|dkr|\}}}||kr|j|ƒ qW |S )Nr   )r   r   )r   Úopt_nameÚfoundr$   r%   r&   r'   Ú_comment_tailr
   r
   r   r   I   s    
zResolvConf._retr_optionc             C   sx   | j ƒ  | jdƒ}t|ƒ}|jt|ƒƒ tj|ƒ}t|ƒt|ƒkrF|S | jdƒ x"|D ]}| j	jdd|dgfƒ qVW |S )Nr   r   r   )
r   r   Úlistr   r   r   Ú	uniq_listr!   r   r   )r   ÚnsZ
current_nsZnew_nsÚnr
   r
   r   Úadd_nameserverR   s    



zResolvConf.add_nameserverc                s<   ‡ fdd„}g }x | j D ]}||ƒs|j|ƒ qW || _ d S )Nc                s.   | \}}|dkrdS |\}}}|ˆ kr*dS dS )Nr   FTr
   )Úitemr$   r%   r&   Z
_cfg_valuer,   )r*   r
   r   Ú
remove_opt`   s    
z-ResolvConf._remove_option.<locals>.remove_opt)r   r   )r   r*   r3   Znew_contentsÚcr
   )r*   r   r   _   s    	zResolvConf._remove_optionc             C   s˜   | j }t|ƒ}|jt|ƒƒ tj|ƒ}t|ƒt|ƒkr:|S t|ƒdkrRtd| ƒ‚dj|ƒ}t|ƒdkrttd| ƒ‚| j	dƒ | j
jdd|dgfƒ |S )	Né   z8Adding %r would go beyond the '6' maximum search domainsú é   zEAdding %r would go beyond the 256 maximum search list character limitr   r   r   )r   r-   r   r   r   r.   r!   Ú
ValueErrorÚjoinr   r   )r   Zsearch_domainr   Znew_sdsZs_listr
   r
   r   Úadd_search_domaino   s$    


zResolvConf.add_search_domainc             C   sê   g }xàt |jƒ ƒD ]Ð\}}|jƒ }|s8|jd|gfƒ qt|dƒ\}}t|jƒ ƒsd|jd|gfƒ q|sld}y|jd dƒ\}}	W n8 ttfk
r¸ }
 zt	d|d  ƒ|
‚W Y d d }
~
X nX |dkrÎt	d| ƒ‚|jd||	|gfƒ qW |S )Nr   z;#r   r   é   z)Incorrectly formatted resolv.conf line %sr   r   r   ÚsortlistÚoptionsz Unexpected resolv.conf option %sr   )r   r   r   r<   r=   )
Ú	enumerateÚ
splitlinesÚstripr   r   r!   r   Ú
IndexErrorr8   ÚIOError)r   r#   ZentriesÚir(   ZslineÚheadÚtailr&   Z
cfg_valuesÚer
   r
   r   r   ‡   s6        zResolvConf._parseN)Ú__name__Ú
__module__Ú__qualname__r   r   Úpropertyr   r   Úsetterr   r)   r   r1   r   r:   r   r
   r
   r
   r   r      s   	r   )ZloggingÚior   Z	cloudinitr   Zcloudinit.distros.parsersr   Z	getLoggerrG   ZLOGr   r
   r
   r
   r   Ú<module>   s
   
