3 \¼me}ã@sHddlZddlmZddlmZddlmZejeƒ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 ú!/usr/lib/python3.6/resolv_conf.pyÚ__init__szResolvConf.__init__cCs|jdkr|j|jƒ|_dS)N)rÚ_parser)rr r r Úparses zResolvConf.parsecCs|jƒ|jdƒS)NÚ nameserver)rÚ _retr_option)rr r r Ú nameserversszResolvConf.nameserverscCs"|jƒ|jdƒ}|r|dSdS)NÚdomainr)rr)rZdmr r r Ú local_domains  zResolvConf.local_domaincCs0|jƒ|jdƒ|jjddt|ƒdgfƒ|S)NrÚoptionÚ)rÚ_remove_optionrÚappendÚstr)rrr r r r's cCsJ|jƒ|jdƒ}g}x.|D]&}x |jdƒD]}|r,|j|ƒq,WqW|S)NÚsearch)rrÚsplitr)rZ current_sdsÚflat_sdsZsdlistZsdr r r Úsearch_domains.s  zResolvConf.search_domainscCs–|jƒtƒ}x~|jD]t\}}|dkr2|jdƒq|dkrN|jd|dƒq|dkr|\}}}d||f}t|ƒr|||7}|jd|ƒqW|jƒ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}x6|jD],\}}|dkr |\}}}||kr |j|ƒq W|S)Nr)rr)rÚopt_nameÚfoundr$r%r&r'Ú _comment_tailr r r rIs zResolvConf._retr_optioncCsx|jƒ|jdƒ}t|ƒ}|jt|ƒƒtj|ƒ}t|ƒt|ƒkrF|S|jdƒx"|D]}|j jdd|dgfƒqVW|S)Nrrr) rrÚlistrrrÚ uniq_listr!rr)rÚnsZ current_nsZnew_nsÚnr r r Úadd_nameserverRs    zResolvConf.add_nameservercs<‡fdd„}g}x |jD]}||ƒs|j|ƒqW||_dS)Ncs.|\}}|dkrdS|\}}}|ˆkr*dSdS)NrFTr )Úitemr$r%r&Z _cfg_valuer,)r*r r Ú remove_opt`s z-ResolvConf._remove_option..remove_opt)rr)rr*r3Z new_contentsÚcr )r*r r_s   zResolvConf._remove_optioncCs˜|j}t|ƒ}|jt|ƒƒtj|ƒ}t|ƒt|ƒkr:|St|ƒdkrRtd|ƒ‚dj|ƒ}t|ƒdkrttd|ƒ‚|j dƒ|j jdd|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) rr-rrrr.r!Ú ValueErrorÚjoinrr)rZ search_domainrZnew_sdsZs_listr r r Úadd_search_domainos$     zResolvConf.add_search_domainc Csêg}xàt|jƒƒD]Ð\}}|jƒ}|s8|jd|gfƒqt|dƒ\}}t|jƒƒsd|jd|gfƒq|sld}y|jddƒ\}} Wn8ttfk r¸} zt d|dƒ| ‚WYdd} ~ XnX|dkrÎt d |ƒ‚|jd || |gfƒqW|S)Nrz;#rréz)Incorrectly formatted resolv.conf line %srrrÚsortlistÚoptionsz Unexpected resolv.conf option %sr)rrrr<r=) Ú enumerateÚ splitlinesÚstriprrr!rÚ IndexErrorr8ÚIOError) rr#ZentriesÚir(ZslineÚheadÚtailr&Z cfg_valuesÚer r r r ‡s6   zResolvConf._parseN)Ú__name__Ú __module__Ú __qualname__r rÚpropertyrrÚsetterrr)rr1rr:r r r r r rs     r) ZloggingÚiorZ cloudinitrZcloudinit.distros.parsersrZ getLoggerrGZLOGrr r r r Ús