ϪfdZddlZddlZddlmZmZddlmZmZm Z m Z ddl m Z Gdde jZ dZd Zy) z Domain Name Server N)internetservice) authoritydns secondaryserver)usageceZdZgdgdgdgdgZgdgdgdgZej deji Zd Z d Z d Z d Z d Z dZdZdZy )Options) interfaceizThe interface to which to bind)portp53zThe port on which to listen) resolv-confNNz6Override location of resolv.conf (implies --recursive)) hosts-fileNNz!Perform lookups with a hosts file)cacheczEnable record caching) recursiverzPerform recursive lookups)verbosevz Log verboselyr ) optActionsNcvtjj|d|d<g|_g|_g|_y)Nrr)r r __init__ bindfiles zonefiles secondariesselfs 3/usr/lib/python3/dist-packages/twisted/names/tap.pyrzOptions.__init__+s3 t$Yctjj|stj|dz|j j |y)z7Specify the filename of a Python syntax zone definition: No such fileN)ospathexistsr UsageErrorrappendr!filenames r" opt_pyzonezOptions.opt_pyzone2;ww~~h'""8.>#>? ? h'r#ctjj|stj|dz|j j |y)z6Specify the filename of a BIND9 syntax zone definitionr%N)r&r'r(r r)rr*r+s r" opt_bindzonezOptions.opt_bindzone8r.r#c|jdd}t|dk7rtjd|djd}t|dk(r|dtj f}n t |d}|d|f}|jj||dgfy#t$rtjd|dwxYw) zwAct as secondary for the specified domain, performing zone transfers from the specified IP (IP/domain) /z-Argument must be of the form IP[:port]/domainr:z$Specify an integer port number, not N) splitlenr r)rPORTint ValueErrorrr*)r! ip_domainargsaddressrs r" opt_secondaryzOptions.opt_secondary>ssA& t9>""#RS Sq'--$ w<1 qz388,G 71: qz4(G 47) 45  &&:71:.I s /B&&%C c|dxxdz cc<y)zIncrement verbosity levelrr3Nr s r" opt_verbosezOptions.opt_verboseRs Y1r#c|drd|d<g|_g|_|jD]1} |jjt j |3|jD]1} |jjt j|3|jD]o}tjj |}|jj||jj|jdj#q t%|d|d<y#t $r-tjtjd|zwxYw#t $r-tjtjd|zwxYw#t&$r(tjdj)|dwxYw)NrTrzInvalid syntax in rzInvalid port: {!r})svcszonesrr*rPySourceAuthority Exception traceback print_excr r)r BindAuthorityrrSecondaryAuthorityServicefromServerAddressAndDomains getAuthorityr9r:format)r!fsvcs r" postOptionszOptions.postOptionsVs   $D    AA A !!)"="=a"@A A  AA A !!)"9"9!"<= A !! #>tF|#LM M Ns#.D*).E#F*6E #6F1G )__name__ __module__ __qualname__ optParametersoptFlagsr CompletionsCompleteNetInterfacescompDatarErrr-r0r>rArQr@r#r"r r s@: H M 07)H !u  !<!?H EI( ( 6(Nr#r cddlm}m}m}gg}}|dr$|j |j |d|dr$|j |j |d|dr$|j |j|d  ||fS) a% Build DNS resolver instances in an order which leaves recursive resolving as a last resort. @type config: L{Options} instance @param config: Parsed command-line configuration @return: Two-item tuple of a list of cache resovers and a list of client resolvers r)rclienthostsrr)rr)filerr) resolvconf) twisted.namesrr[r\r* CacheResolverResolvercreateResolver)configrr[r\cacls r"_buildResolversrfrs32 B g %%%fY.?%@A l %..f\&:.;< k &''6-3H'IJ r6Mr#ct|\}}tj|j|||d}t j |}d|_tj}tj|ftj|ffD]'\}}||d||d}|j|)|jD]} | j||S)Nrrrr )r )rfrDNSServerFactoryrErDNSDatagramProtocolnoisyr MultiServicer TCPServer UDPServersetServiceParentrD) rcrdrerOrretklassargsrPs r" makeServicerss V $FB b"fY6GHA "AAG    C **A.1C1CQ0GH s &.# 1D E 3 {{" S!" Jr#)__doc__r&rHtwisted.applicationrrr_rrrrtwisted.pythonr r rfrsr@r#r"rws=  1;; ^Nemm^NB. r#