
    x[hw                     h    S SK r S SKJr  S SKJr  S SKJr  \ R                  " \5      r	 " S S5      r
g)    N)StringIO)util)chop_commentc                       \ rS rSrS rS r\S 5       r\S 5       r\R                  S 5       r\S 5       r
S rS	 rS
 rS rS rS rSrg)
ResolvConf   c                     Xl         S U l        g N)_text	_contents)selftexts     G/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.py__init__ResolvConf.__init__   s    
    c                 `    U R                   c!  U R                  U R                  5      U l         g g r
   )r   _parser   r   s    r   parseResolvConf.parse   s%    >>!![[4DN "r   c                 D    U R                  5         U R                  S5      $ )N
nameserverr   _retr_optionr   s    r   nameserversResolvConf.nameservers   s    

  ..r   c                 ^    U R                  5         U R                  S5      nU(       a  US   $ g )Ndomainr   r   )r   dms     r   local_domainResolvConf.local_domain   s*    

x(a5Lr   c                     U R                  5         U R                  S5        U R                  R                  SS[	        U5      S/45        U$ )Nr   option )r   _remove_optionr   appendstr)r   r   s     r   r!   r"   '   s@    

H%x(CK)DEFr   c                     U R                  5         U R                  S5      n/ nU H5  nUR                  S 5       H  nU(       d  M  UR                  U5        M     M7     U$ )Nsearch)r   r   splitr'   )r   current_sdsflat_sdssdlistsds        r   search_domainsResolvConf.search_domains.   sU    

''1!Fll4(2OOB' ) " r   c                 l   U R                  5         [        5       nU R                   H{  u  p#US:X  a  UR                  S5        M  US:X  a  UR                  SUS   -  5        M=  US:X  d  ME  Uu  pEnU< SU< 3n[	        U5      (       a  Xv-  nUR                  SU-  5        M}     UR                  5       $ )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__ResolvConf.__str__9   s    

:%)^^!IG#t$m+vA78h&5?2\")95|$$(Dv/ &4   ""r   c                 ~    / nU R                    H*  u  p4US:X  d  M  Uu  pVnXQ:X  d  M  UR                  U5        M,     U$ )Nr$   r   r'   )r   opt_namefoundr;   r<   r=   r>   _comment_tails           r   r   ResolvConf._retr_optionI   sC    %)^^!IH$6@3]&LL+	 &4
 r   c                 f   U R                  5         U R                  S5      n[        U5      nUR                  [	        U5      5        [
        R                  " U5      n[        U5      [        U5      :X  a  U$ U R                  S5        U H#  nU R                  R                  SSUS/45        M%     U$ )Nr   r$   r%   )
r   r   listr'   r(   r   	uniq_listr8   r&   r   )r   ns
current_nsnew_nsns        r   add_nameserverResolvConf.add_nameserverR   s    

&&|4
j!c"g'v;#j/)L)ANN!!8lAr-B"CD r   c                    ^ U4S jn/ nU R                    H#  nU" U5      (       a  M  UR                  U5        M%     X0l         g )Nc                 4   > U u  pUS:w  a  gUu  p4nUT:w  a  gg)Nr$   FT )itemr;   r<   r=   
_cfg_valuerG   rE   s         r   
remove_opt-ResolvConf._remove_option.<locals>.remove_opt`   s.    $(!IH$3=0W-("r   rD   )r   rE   rW   new_contentscs    `   r   r&   ResolvConf._remove_option_   s;    	 Aa==##A&   &r   c                    U R                   n[        U5      nUR                  [        U5      5        [        R
                  " U5      n[        U5      [        U5      :X  a  U$ [        U5      S:  a  [        SU-  5      eSR                  U5      n[        U5      S:  a  [        SU-  5      eU R                  S5        U R                  R                  SSUS/45        U$ )	N   z8Adding %r would go beyond the '6' maximum search domainsr6      zEAdding %r would go beyond the 256 maximum search list character limitr*   r$   r%   )r0   rJ   r'   r(   r   rK   r8   
ValueErrorjoinr&   r   )r   search_domainr-   new_sdss_lists        r   add_search_domainResolvConf.add_search_domaino   s    &&x.s=)*..)x=CL(Nx=AJ "  '"v;:=JL  	H%x(FB)?@Ar   c                    / n[        UR                  5       5       H  u  p4UR                  5       nU(       d  UR                  SU/45        M2  [	        US5      u  pg[        UR                  5       5      (       d  UR                  SU/45        Mt  U(       d  Sn UR                  S S5      u  pUS;  a  [        SU-  5      eUR                  S	XU/45        M     U$ ! [        [        4 a  n
[        SUS-   -  5      U
eS n
A
ff = f)
Nr3   z;#r5   r%      z)Incorrectly formatted resolv.conf line %s)r   r   r*   sortlistoptionsz Unexpected resolv.conf option %sr$   )
	enumerate
splitlinesstripr'   r   r8   r+   
IndexErrorr_   IOError)r   r:   entriesir@   slineheadtailr=   
cfg_valueses              r   r   ResolvConf._parse   s    !4!4!67GAJJLE$01'd3LTtzz|$$v67(,

4(;%
    @GLMMNNHwD&ABC3 84  
+ ?1q5Is   CD-C??D)r   r   N)__name__
__module____qualname____firstlineno__r   r   propertyr   r!   setterr0   rA   r   rP   r&   rd   r   __static_attributes__rT   r   r   r   r      s    5 / /      # & 0r   r   )loggingior   	cloudinitr   cloudinit.distros.parsersr   	getLoggerrw   LOGr   rT   r   r   <module>r      s/       2!R Rr   