o b@sndZddlZddlZddlmZmZddlmZmZm Z m Z ddl m Z Gddde j Z dd Zd d ZdS) z Domain Name Server N)internetservice) authoritydns secondaryserver)usagec@seZdZgdgdgdgdgZgdgdgdgZejdeid Zd Z d Z d d Z d dZ ddZ ddZddZddZd S)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 ) optActionsNcCs*tj|d|d<g|_g|_g|_dS)Nrr)rr __init__ bindfiles zonefiles secondariesselfr3/usr/lib/python3/dist-packages/twisted/names/tap.pyr+s  zOptions.__init__cC*tj|s t|d|j|dS)z7Specify the filename of a Python syntax zone definition: No such fileN)ospathexistsr UsageErrorrappendrfilenamerrr opt_pyzone2 zOptions.opt_pyzonecCr!)z6Specify the filename of a BIND9 syntax zone definitionr"N)r#r$r%rr&rr'r(rrr opt_bindzone8r+zOptions.opt_bindzonecCs|dd}t|dkrtd|dd}t|dkr&|dtjf}n zt|d}Wnty?td|dw|d|f}|j ||dgfdS) 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) splitlenrr&rPORTint ValueErrorrr')r ip_domainargsaddressr rrr opt_secondary>s       zOptions.opt_secondarycCs|dd7<dS)zIncrement verbosity levelrr.Nrrrrr opt_verboseRszOptions.opt_verbosec Cs|drd|d<g|_g|_|jD]}z |jt|Wqty0tt d|w|j D]}z |jt |Wq4tyStt d|w|j D]}tjj|}|j||j|jdqWz t|d|d<WdStyt d|dw)NrTrzInvalid syntax in r zInvalid port: {!r})svcszonesrr'rPySourceAuthority Exception traceback print_excrr&r BindAuthorityrrSecondaryAuthorityServicefromServerAddressAndDomains getAuthorityr4r5format)rfsvcrrr postOptionsVs6        zOptions.postOptions)__name__ __module__ __qualname__ optParametersoptFlagsr CompletionsCompleteNetInterfacescompDatar=rrr*r,r9r:rIrrrr r s*   r cCsddlm}m}m}gg}}|dr||j|dd|dr-||j|dd|dr<||j|d 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.namesrrRrSr' CacheResolverResolvercreateResolver)configrrRrScaclrrr _buildResolversrs r]c Cst|\}}t|j|||d}t|}d|_t}t j |ft j |ffD]\}}||d||dd}| |q'|j D]} | |q?|S)Nrrr r )r )r]rDNSServerFactoryr=rDNSDatagramProtocolnoisyr MultiServicer TCPServer UDPServersetServiceParentr<) rZr[r\rGrretklassargsrHrrr makeServices     ri)__doc__r#r@twisted.applicationrrrVrrrrtwisted.pythonrr r]rirrrr s a