
­­­­­­­­­­­­­­­­­­
<!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 }xt |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rt	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
   
