Ë
    x[hw  ã                   óh   — 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«      Z
y)é    N)ÚStringIO)Úutil)Úchop_commentc                   ó�   — e Zd Zd„ Zd„ Zed„ «       Zed„ «       Zej                  d„ «       Zed„ «       Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zy)Ú
ResolvConfc                 ó    — || _         d | _        y ©N)Ú_textÚ	_contents)ÚselfÚtexts     úG/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.pyÚ__init__zResolvConf.__init__   s   € ØˆŒ
Øˆ�ó    c                 ó^   — | j                   €!| j                  | j                  «      | _         y y r	   )r   Ú_parser
   ©r   s    r   ÚparsezResolvConf.parse   s%   € Ø�>‰>Ð!Ø!Ÿ[™[¨¯©Ó4ˆD�Nð "r   c                 óD   — | j                  «        | j                  d«      S )NÚ
nameserver©r   Ú_retr_optionr   s    r   ÚnameserverszResolvConf.nameservers   s   € à�
‰
ŒØ× Ñ  Ó.Ð.r   c                 óT   — | j                  «        | j                  d«      }|r|d   S y )NÚdomainr   r   )r   Údms     r   Úlocal_domainzResolvConf.local_domain   s*   € à�
‰
ŒØ×Ñ˜xÓ(ˆÙØ�a‘5ˆLØr   c                 óš   — | j                  «        | j                  d«       | j                  j                  ddt	        |«      dgf«       |S )Nr   ÚoptionÚ )r   Ú_remove_optionr   ÚappendÚstr)r   r   s     r   r   zResolvConf.local_domain'   s@   € à�
‰
ŒØ×Ñ˜HÔ%Ø�‰×Ñ˜x¨(´C¸³KÀÐ)DÐEÔFØˆr   c                 ó®   — | j                  «        | j                  d«      }g }|D ],  }|j                  d «      D ]  }|sŒ|j                  |«       Œ Œ. |S )NÚsearch)r   r   Úsplitr"   )r   Úcurrent_sdsÚflat_sdsÚsdlistÚsds        r   Úsearch_domainszResolvConf.search_domains.   s]   € à�
‰
ŒØ×'Ñ'¨Ó1ˆØˆØ!ò 	(ˆFØ—l‘l 4Ó(ò (�ÚØ—O‘O BÕ'ñ(ð	(ð ˆr   c                 óT  — | j                  «        t        «       }| j                  D ]p  \  }}|dk(  r|j                  d«       Œ|dk(  r|j                  d|d   z  «       Œ:|dk(  sŒ@|\  }}}|›d|›�}t	        |«      r||z  }|j                  d|z  «       Œr |j                  «       S )NÚblankú
Úall_commentz%s
r   r   ú )r   r   r   ÚwriteÚlenÚgetvalue)r   ÚcontentsÚ	line_typeÚ
componentsÚcfg_optÚ	cfg_valueÚcomment_tailÚlines           r   Ú__str__zResolvConf.__str__9   s¬   € Ø�
‰
ŒÜ“:ˆØ%)§^¡^ò 
	0Ñ!ˆI�zØ˜GÒ#Ø—‘˜tÕ$Ø˜mÒ+Ø—‘˜v¨°A©Ñ7Õ8Ø˜hÓ&Ø5?Ñ2�˜) \Ú")©9Ð5�Ü�|Ô$Ø˜LÑ(�DØ—‘˜v¨™Õ/ð
	0ð × Ñ Ó"Ð"r   c                 óx   — g }| j                   D ](  \  }}|dk(  sŒ|\  }}}||k(  sŒ|j                  |«       Œ* |S )Nr   ©r   r"   )r   Úopt_nameÚfoundr5   r6   r7   r8   Ú_comment_tails           r   r   zResolvConf._retr_optionI   sN   € ØˆØ%)§^¡^ò 	,Ñ!ˆI�zØ˜HÓ$Ø6@Ñ3�˜) ]Ø˜hÓ&Ø—L‘L Õ+ð		,ð
 ˆr   c                 ó^  — | j                  «        | j                  d«      }t        |«      }|j                  t	        |«      «       t        j                  |«      }t        |«      t        |«      k(  r|S | j                  d«       |D ]"  }| j                  j                  dd|dgf«       Œ$ |S )Nr   r   r    )
r   r   Úlistr"   r#   r   Ú	uniq_listr2   r!   r   )r   ÚnsÚ
current_nsÚnew_nsÚns        r   Úadd_nameserverzResolvConf.add_nameserverR   s›   € Ø�
‰
ŒØ×&Ñ& |Ó4ˆ
Ü�jÓ!ˆØ�‰”c˜"“gÔÜ—‘ Ó'ˆÜˆv‹;œ#˜j›/Ò)ØÐØ×Ñ˜LÔ)Øò 	EˆAØ�N‰N×!Ñ! 8¨l¸A¸rÐ-BÐ"CÕDð	Eàˆr   c                 óx   ‡— ˆfd„}g }| j                   D ]  } ||«      rŒ|j                  |«       Œ || _         y )Nc                 ó4   •— | \  }}|dk7  ry|\  }}}|‰k7  ryy)Nr   FT© )Úitemr5   r6   r7   Ú
_cfg_valuer@   r>   s         €r   Ú
remove_optz-ResolvConf._remove_option.<locals>.remove_opt`   s2   ø€ Ø$(Ñ!ˆI�zØ˜HÒ$ØØ3=Ñ0ˆW�j -Ø˜(Ò"ØØr   r=   )r   r>   rN   Únew_contentsÚcs    `   r   r!   zResolvConf._remove_option_   s@   ø€ ô	ð ˆØ—‘ò 	'ˆAÙ˜a•=Ø×#Ñ# AÕ&ð	'ð &ˆ�r   c                 ó¸  — | j                   }t        |«      }|j                  t        |«      «       t	        j
                  |«      }t        |«      t        |«      k(  r|S t        |«      dk\  rt        d|z  «      ‚dj                  |«      }t        |«      dkD  rt        d|z  «      ‚| j                  d«       | j                  j                  dd|dgf«       |S )	Né   z8Adding %r would go beyond the '6' maximum search domainsr0   é   zEAdding %r would go beyond the 256 maximum search list character limitr%   r   r    )r+   rB   r"   r#   r   rC   r2   Ú
ValueErrorÚjoinr!   r   )r   Úsearch_domainr(   Únew_sdsÚs_lists        r   Úadd_search_domainzResolvConf.add_search_domaino   sØ   € Ø×&Ñ&ˆÜ�x“.ˆØ�‰”s˜=Ó)Ô*Ü—.‘. Ó)ˆÜˆx‹=œC ›LÒ(ØˆNÜˆx‹=˜AÒäØJØ ñ"óð ð —‘˜'Ó"ˆÜˆv‹;˜Òäð:Ø=JñLóð ð 	×Ñ˜HÔ%Ø�‰×Ñ˜x¨(°F¸BÐ)?Ð@ÔAØˆr   c                 óê  — g }t        |j                  «       «      D ]«  \  }}|j                  «       }|s|j                  d|gf«       Œ-t	        |d«      \  }}t        |j                  «       «      s|j                  d|gf«       Œj|sd}	 |j                  d d«      \  }}	|dvrt        d|z  «      ‚|j                  d	||	|gf«       Œ­ |S # t        t        f$ r}
t        d|dz   z  «      |
‚d }
~
ww xY w)
Nr-   z;#r/   r    é   z)Incorrectly formatted resolv.conf line %s)r   r   r%   ÚsortlistÚoptionsz Unexpected resolv.conf option %sr   )
Ú	enumerateÚ
splitlinesÚstripr"   r   r2   r&   Ú
IndexErrorrT   ÚIOError)r   r4   ÚentriesÚir:   ÚslineÚheadÚtailr7   Ú
cfg_valuesÚes              r   r   zResolvConf._parse‡   s  € ØˆÜ  ×!4Ñ!4Ó!6Ó7ò 	D‰GˆAˆtØ—J‘J“LˆEÙØ—‘ ¨$¨Ð0Ô1ØÜ'¨¨dÓ3‰LˆT�4Ü�t—z‘z“|Ô$Ø—‘ °¨vÐ6Ô7ØÙØ�ðØ(,¯
©
°4¸Ó(;Ñ%�˜*ð
 ð ñ ô Ð@ÀGÑLÓMÐMØ�N‰N˜H w°
¸DÐ&AÐBÕCð3	Dð4 ˆøô ¤
Ð+ò ÜØ?À1ÀqÁ5ÑIóàðûðús   ÂCÃC2ÃC-Ã-C2N)Ú__name__Ú
__module__Ú__qualname__r   r   Úpropertyr   r   Úsetterr+   r;   r   rH   r!   rY   r   rK   r   r   r   r      s€   „ òò5ð ñ/ó ð/ð ñó ðð ×Ññó ðð ñó ðò#ò òò&ò ó0r   r   )ÚloggingÚior   Ú	cloudinitr   Úcloudinit.distros.parsersr   Ú	getLoggerrj   ÚLOGr   rK   r   r   ú<module>ru      s1   ðó Ý å Ý 2à€g×Ñ˜Ó!€÷Rò Rr   