f}hddlZddlmZddlmZddlmZejeZ GddZ y)N)StringIO)util) chop_commentceZdZdZdZedZedZejdZedZ dZ dZ d Z d Z d Zd Zy ) ResolvConfc ||_d|_yN)_text _contents)selftexts G/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.py__init__zResolvConf.__init__s c^|j!|j|j|_yyr )r _parser r s rparsezResolvConf.parses% >> !![[4DN "rcD|j|jdS)N nameserverr _retr_optionrs r nameserverszResolvConf.nameserverss   ..rcT|j|jd}|r|dSy)Ndomainrr)r dms r local_domainzResolvConf.local_domains*   x ( a5Lrc|j|jd|jjddt |dgf|S)Nroption)r_remove_optionr appendstr)r rs rrzResolvConf.local_domain's@  H% x(CK)DEF rc|j|jd}g}|D],}|jdD]}|s|j|.|S)Nsearch)rrsplitr")r current_sdsflat_sdssdlistsds rsearch_domainszResolvConf.search_domains.s] ''1 ! (Fll4( (OOB' ( (rcT|jt}|jD]p\}}|dk(r|jd|dk(r|jd|dz:|dk(s@|\}}}|d|}t |r||z }|jd|zr|j S)Nblank all_commentz%s rr )rrr writelengetvalue)r contents line_type componentscfg_opt cfg_value comment_taillines r__str__zResolvConf.__str__9s :'+~~ 0 #Y G#t$m+vA78h&5?2)\")95|$L(Dv/ 0  ""rcxg}|jD](\}}|dk(s |\}}}||k(s|j|*|S)Nrr r")r opt_namefoundr5r6r7r8 _comment_tails rrzResolvConf._retr_optionIsN'+~~ , #Y H$6@3)]h&LL+  ,  rc^|j|jd}t|}|jt |t j |}t|t|k(r|S|jd|D]"}|jjdd|dgf$|S)Nrrr ) rrlistr"r#r uniq_listr2r!r )r ns current_nsnew_nsns radd_nameserverzResolvConf.add_nameserverRs &&|4 j! c"g' v;#j/ )  L) EA NN ! !8lAr-B"C D E rcxfd}g}|jD]}||r |j|||_y)Nc4|\}}|dk7ry|\}}}|k7ryy)NrFT)itemr5r6r7 _cfg_valuer@r>s r remove_optz-ResolvConf._remove_option..remove_opt`s2$( !IzH$3= 0Wj-("rr=)r r>rN new_contentscs ` rr!zResolvConf._remove_option_s@   'Aa=##A& '&rc|j}t|}|jt|t j |}t |t |k(r|St |dk\rtd|zdj|}t |dkDrtd|z|jd|jjdd|dgf|S) Nz8Adding %r would go beyond the '6' maximum search domainsr0zEAdding %r would go beyond the 256 maximum search list character limitr%rr ) r+rBr"r#rrCr2 ValueErrorjoinr!r )r search_domainr(new_sdss_lists radd_search_domainzResolvConf.add_search_domainos&&x.s=)*..) x=CL (N x=A J " '" v; :=JL  H% x(FB)?@Arcg}t|jD]\}}|j}|s|jd|gf-t |d\}}t |js|jd|gfj|sd} |j dd\}} |dvrtd|z|jd || |gf|S#ttf$r} td|dzz| d} ~ wwxYw) Nr-z;#r/r z)Incorrectly formatted resolv.conf line %s)rrr%sortlistoptionsz Unexpected resolv.conf option %sr) enumerate splitlinesstripr"rr2r& IndexErrorrTIOError) r r4entriesir:slineheadtailr7 cfg_valueses rrzResolvConf._parses"8#6#6#89 DIQJJLE$01'd3LT4tzz|$ v67 (, 4(;%* @GLMM NNHw D&AB C3 D4 + ?1q5I s C  C2C--C2N)__name__ __module__ __qualname__rrpropertyrrsetterr+r;rrHr!rYrrKrrrrs5// #  & 0rr) loggingior cloudinitrcloudinit.distros.parsersr getLoggerrjLOGrrKrrrus12g!RRr