܍~cpddlmZddlmZddlmZddlmZeje Z GddZ dS))StringIO)log)util) chop_commentceZdZdZdZedZedZejdZedZ dZ dZ d Z d Z d Zd Zd S) ResolvConfc"||_d|_dSN)_text _contents)selftexts G/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.py__init__zResolvConf.__init__s cV|j!||j|_dSdSr )r _parser r s rparsezResolvConf.parses+ > !![[44DNNN " !rcT||dS)N nameserverr _retr_optionrs r nameserverszResolvConf.nameserverss#   ...rcl||d}|r|dSdS)Ndomainrr)r dms r local_domainzResolvConf.local_domains8   x ( (  a5Ltrc||d|jddt |dgf|S)Nroption)r_remove_optionr appendstr)r rs rrzResolvConf.local_domain'sP  H%%% x(CKK)DEFFF rc||d}g}|D]1}|dD]}|r||2|S)Nsearch)rrsplitr#)r current_sdsflat_sdssdlistsds rsearch_domainszResolvConf.search_domains.sx ''11 ! ( (Fll4(( ( ((OOB''' (rc|t}|jD]\}}|dkr|d!|dkr|d|dzF|dkr9|\}}}|d|}t |r||z }|d|z|S)Nblank all_commentz%s rr  )rrr writelengetvalue)r contents line_type componentscfg_opt cfg_value comment_taillines r__str__zResolvConf.__str__9s ::'+~ 0 0 #Y G##t$$$$m++vA78888h&&5?2)\")''995|$$)L(Dv///  """rcrg}|jD],\}}|dkr!|\}}}||kr||-|S)Nr r r#)r opt_namefoundr6r7r8r9 _comment_tails rrzResolvConf._retr_optionIsW'+~ , , #Y H$$6@3)]h&&LL+++ rc||d}t|}|t |t j|}t|t|kr|St|dkr%t d||ddS| d|D]!}|j dd|dgf"|S)Nrz`ignoring nameserver %r: adding would exceed the maximum of '3' name servers (see resolv.conf(5))r r!) rrlistr#r$r uniq_listr3LOGwarningr"r )r ns current_nsnew_nsns radd_nameserverzResolvConf.add_nameserverRs &&|44 j!! c"gg'' v;;#j// ) )  z??a   KK8     bqb> ! L))) E EA N ! !8lAr-B"C D D D D rcxfd}g}|jD]"}||s||#||_dS)Nc>|\}}|dkrdS|\}}}|krdSdS)Nr FT)itemr6r7r8 _cfg_valuerAr?s r remove_optz-ResolvConf._remove_option..remove_opths>$( !IzH$$u3= 0Wj-(""u4rr>)r r?rR new_contentscs ` rr"zResolvConf._remove_optiongsd       ' 'A:a== '##A&&&%rc|j}t|}|t|t j|}t |t |kr|St |dkrtd|zd|}t |dkrtd|z| d|j dd|dgf|S) Nz8Adding %r would go beyond the '6' maximum search domainsr1zEAdding %r would go beyond the 256 maximum search list character limitr&r r!) r,rDr#r$rrEr3 ValueErrorjoinr"r )r search_domainr)new_sdss_lists radd_search_domainzResolvConf.add_search_domainws &x..s=))***.)) x==CLL ( (N x==A  J " '"" v;;  :=JL  H%%% x(FB)?@AAArcPg}t|D]\}}|}|s|d|gf5t |d\}}t |s|d|gf|sd} |dd\}} n/#ttf$r} td|dzz| d} ~ wwxYw|dvrtd|z|d || |gf|S) Nr.z;#r0r!z)Incorrectly formatted resolv.conf line %s)rrr&sortlistoptionsz Unexpected resolv.conf option %sr ) enumerate splitlinesstripr#rr3r' IndexErrorrXIOError) r r5entriesir;slineheadtailr8 cfg_valueses rrzResolvConf._parsesi"8#6#6#8#899 D DIQJJLLE $0111'd33LT4tzz||$$  v6777  (, 4(;(;%** +   ?1q5I @GLMMM NNHw D&AB C C C Cs+CC1C,,C1N)__name__ __module__ __qualname__rrpropertyrrsetterr,r<rrLr"r]rrOrrrrs555//X/X X### *&&& 0rrN) ior cloudinitrloggingrcloudinit.distros.parsersr getLoggerrnrFrrOrrrxs$$$$$$222222g!!ZZZZZZZZZZr