a '¡Dgwã@sHddlZddlmZddlmZddlmZe e¡Z Gdd„dƒZ dS)éN)ÚStringIO)Úutil)Ú chop_commentc@s~eZdZdd„Zdd„Zedd„ƒZedd„ƒZejd d„ƒZed d „ƒZ d d „Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)Ú ResolvConfcCs||_d|_dS©N)Ú_textÚ _contents)ÚselfÚtext©r úI/usr/lib/python3.9/site-packages/cloudinit/distros/parsers/resolv_conf.pyÚ__init__szResolvConf.__init__cCs|jdur| |j¡|_dSr)rÚ_parser©r r r r Úparses zResolvConf.parsecCs| ¡| d¡S)NÚ nameserver©rÚ _retr_optionrr r r Ú nameserversszResolvConf.nameserverscCs"| ¡| d¡}|r|dSdS)NÚdomainrr)r Zdmr r r Ú local_domains  zResolvConf.local_domaincCs0| ¡| d¡|j ddt|ƒdgf¡|S)NrÚoptionÚ)rÚ_remove_optionrÚappendÚstr)r rr r r r's cCsB| ¡| d¡}g}|D]"}| d¡D]}|r(| |¡q(q|S)NÚsearch)rrÚsplitr)r Z current_sdsÚflat_sdsZsdlistÚsdr r r Úsearch_domains.s zResolvConf.search_domainscCs’| ¡tƒ}|jD]t\}}|dkr0| d¡q|dkrL| d|d¡q|dkr|\}}}d||f}t|ƒrz||7}| d|¡q| ¡S)NÚblankÚ Ú all_commentz%s rrz%s %s)rrrÚwriteÚlenÚgetvalue)r ÚcontentsÚ line_typeÚ componentsÚcfg_optÚ cfg_valueZ comment_tailÚliner r r Ú__str__9s   zResolvConf.__str__cCs<g}|jD],\}}|dkr |\}}}||kr | |¡q |S)Nr©rr)r Úopt_nameÚfoundr(r)r*r+Ú _comment_tailr r r rIs  zResolvConf._retr_optioncCst| ¡| d¡}t|ƒ}| t|ƒ¡t |¡}t|ƒt|ƒkrF|S| d¡|D]}|j  dd|dgf¡qT|S)Nrrr) rrÚlistrrrÚ uniq_listr%rr)r ÚnsZ current_nsZnew_nsÚnr r r Úadd_nameserverRs   zResolvConf.add_nameservercs8‡fdd„}g}|jD]}||ƒs| |¡q||_dS)Ncs.|\}}|dkrdS|\}}}|ˆkr*dSdS)NrFTr )Úitemr(r)r*Z _cfg_valuer1©r/r r Ú remove_opt`s z-ResolvConf._remove_option..remove_optr.)r r/r9Z new_contentsÚcr r8r r_s    zResolvConf._remove_optioncCs˜|j}t|ƒ}| t|ƒ¡t |¡}t|ƒt|ƒkr:|St|ƒdkrRtd|ƒ‚d |¡}t|ƒdkrttd|ƒ‚|  d¡|j  dd|dgf¡|S) Néz8Adding %r would go beyond the '6' maximum search domainsú ézEAdding %r would go beyond the 256 maximum search list character limitrrr) r r2rrrr3r%Ú ValueErrorÚjoinrr)r Z search_domainrZnew_sdsZs_listr r r Úadd_search_domainos,  ÿÿ  ÿÿ zResolvConf.add_search_domainc Csèg}t| ¡ƒD]Ò\}}| ¡}|s6| d|gf¡qt|dƒ\}}t| ¡ƒsb| d|gf¡q|sjd}z| dd¡\}} Wn:ttfy¸} zt d|dƒ| ‚WYd} ~ n d} ~ 00|dvrÎt d|ƒ‚| d || |gf¡q|S) Nr!z;#r#réz)Incorrectly formatted resolv.conf line %s)rrrZsortlistÚoptionsz Unexpected resolv.conf option %sr) Ú enumerateÚ splitlinesÚstriprrr%rÚ IndexErrorr>ÚIOError) r r'ÚentriesÚir,ZslineÚheadÚtailr*Z cfg_valuesÚer r r r‡s0  ÿþ zResolvConf._parseN)Ú__name__Ú __module__Ú __qualname__r rÚpropertyrrÚsetterr r-rr6rr@rr r r r rs       r) ZloggingÚiorZ cloudinitrZcloudinit.distros.parsersrZ getLoggerrMZLOGrr r r r Ús