ó oBú]c@siddlmZddlmZddlmZddlmZeje ƒZ de fd„ƒYZ dS(iÿÿÿÿ(tStringIO(t chop_comment(tlog(tutilt ResolvConfcBseZd„Zd„Zed„ƒZed„ƒZed„ƒZd„Zd„Z d„Z d„Z d „Z ej d „ƒZd „ZRS( cCs||_d|_dS(N(t_texttNonet _contents(tselfttext((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyt__init__s cCs+|jdkr'|j|jƒ|_ndS(N(RRt_parseR(R((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pytparsescCs|jƒ|jdƒS(Nt nameserver(R t _retr_option(R((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyt nameserverss cCs+|jƒ|jdƒ}|r'|dSdS(Ntdomaini(R RR(Rtdm((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyt local_domains  cCsd|jƒ|jdƒ}g}x>|D]6}x-|jdƒD]}|r<|j|ƒq<q<Wq&W|S(Ntsearch(R RtsplitRtappend(Rt current_sdstflat_sdstsdlisttsd((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pytsearch_domains's  cCsÏ|jƒtƒ}x¯|jD]¤\}}|dkrE|jdƒq|dkri|jd|dƒq|dkr|\}}}d||f}t|ƒr­||7}n|jd|ƒqqW|jƒS(Ntblanks t all_comments%s itoptions%s %s(R RRtwritetlentgetvalue(Rtcontentst line_typet componentstcfg_optt cfg_valuet comment_tailtline((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyt__str__2s       cCs^g}xQ|jD]F\}}|dkr|\}}}||krV|j|ƒqVqqW|S(NR(RR(Rtopt_nametfoundR"R#R$R%t _comment_tail((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyRBs  cCsÎ|jƒ|jdƒ}t|ƒ}|jt|ƒƒtj|ƒ}t|ƒt|ƒkrc|St|ƒdkrtj d|ƒ|d S|j dƒx-|D]%}|j jdd|dgfƒq¡W|S(NR is`ignoring nameserver %r: adding would exceed the maximum of '3' name servers (see resolv.conf(5))Rt( R RtlistRtstrRt uniq_listRtLOGtwarningt_remove_optionR(Rtnst current_nstnew_nstn((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pytadd_nameserverKs     #csR‡fd†}g}x-|jD]"}||ƒs|j|ƒqqW||_dS(Ncs?|\}}|dkrtS|\}}}|ˆkr;tStS(NR(tFalsetTrue(titemR"R#R$t _cfg_valueR+(R)(sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyt remove_opt_s   (RR(RR)R<t new_contentstc((R)sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyR2]s   cCsÜ|j}t|ƒ}|jt|ƒƒtj|ƒ}t|ƒt|ƒkrS|St|ƒdkrxtd|ƒ‚ndj|ƒ}t|ƒdkr¬td|ƒ‚n|j dƒ|j jdd|dgfƒ|S( Nis8Adding %r would go beyond the '6' maximum search domainst isEAdding %r would go beyond the 256 maximum search list character limitRRR,( RR-RR.RR/Rt ValueErrortjoinR2R(Rt search_domainRtnew_sdsts_list((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pytadd_search_domainns      cCs@|jƒ|jdƒ|jjddt|ƒdgfƒ|S(NRRR,(R R2RRR.(RR((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyRƒs  %c Cs2g}x%t|jƒƒD]\}}|jƒ}|sS|jd|gfƒqnt|dƒ\}}t|jƒƒs–|jd|gfƒqn|s¥d}ny|jddƒ\}} Wn+tt fk rît d|dƒ‚nX|dkrt d |ƒ‚n|jd || |gfƒqW|S(NRs;#RR,is)Incorrectly formatted resolv.conf line %sR RRtsortlisttoptionss Unexpected resolv.conf option %sR(s nameserversdomainssearchRFRG( t enumeratet splitlineststripRRRRRt IndexErrorR@tIOError( RR!tentriestiR'tslinetheadttailR$t cfg_values((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyR Šs,    (t__name__t __module__R R tpropertyRRRR(RR7R2REtsetterR (((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyRs      N( tsixRtcloudinit.distros.parsersRt cloudinitRtloggingRt getLoggerRSR0tobjectR(((sI/usr/lib/python2.7/site-packages/cloudinit/distros/parsers/resolv_conf.pyts