
    Ϫf                         d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ  G d dej                        Zd Zd	 Zy)
z
Domain Name Server
    N)internetservice)	authoritydns	secondaryserver)usagec                       e Zd Zg dg dg dg dgZg dg dg dgZ ej                  d ej                         i	      Zd
Z	d
Z
d Zd Zd Zd Zd Zd Zy
)Options)	interfacei zThe interface to which to bind)portp53zThe port on which to listen)resolv-confNNz6Override location of resolv.conf (implies --recursive))
hosts-fileNNz!Perform lookups with a hosts file)cacheczEnable record caching)	recursiverzPerform recursive lookups)verbosevzLog verboselyr   )
optActionsNc                 v    t         j                  j                  |        d| d<   g | _        g | _        g | _        y )Nr   r   )r	   r   __init__	bindfiles	zonefilessecondariesselfs    3/usr/lib/python3/dist-packages/twisted/names/tap.pyr   zOptions.__init__+   s3    t$Y    c                     t         j                  j                  |      st        j                  |dz         | j
                  j                  |       y)z7Specify the filename of a Python syntax zone definition: No such fileN)ospathexistsr	   
UsageErrorr   appendr!   filenames     r"   
opt_pyzonezOptions.opt_pyzone2   ;    ww~~h'""8.>#>??h'r#   c                     t         j                  j                  |      st        j                  |dz         | j
                  j                  |       y)z6Specify the filename of a BIND9 syntax zone definitionr%   N)r&   r'   r(   r	   r)   r   r*   r+   s     r"   opt_bindzonezOptions.opt_bindzone8   r.   r#   c                    |j                  dd      }t        |      dk7  rt        j                  d      |d   j                  d      }t        |      dk(  r|d   t        j
                  f}n	 t        |d         }|d   |f}| j                  j                  ||d   gf       y# t        $ r t        j                  d|d         w xY w)	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)
splitlenr	   r)   r   PORTint
ValueErrorr   r*   )r!   	ip_domainargsaddressr   s        r"   opt_secondaryzOptions.opt_secondary>   s     sA&t9>""#RSSq'--$w<1qz388,G71:
 qz4(G47) 45  &&:71:.I s   /B& &%Cc                     | dxx   dz  cc<   y)zIncrement verbosity levelr   r3   N r    s    r"   opt_verbosezOptions.opt_verboseR   s    Y1r#   c                    | d   rd| d<   g | _         g | _        | j                  D ]1  }	 | j                  j                  t	        j
                  |             3 | j                  D ]1  }	 | j                  j                  t	        j                  |             3 | j                  D ]o  }t        j                  j                   | }| j                   j                  |       | j                  j                  | j                   d   j#                                q 	 t%        | d         | d<   y # t        $ r- t        j                          t        j                  d|z         w xY w# t        $ r- t        j                          t        j                  d|z         w xY w# t&        $ r( t        j                  dj)                  | d               w xY w)Nr   Tr   zInvalid syntax in r   zInvalid port: {!r})svcszonesr   r*   r   PySourceAuthority	Exception	traceback	print_excr	   r)   r   BindAuthorityr   r   SecondaryAuthorityServicefromServerAddressAndDomainsgetAuthorityr9   r:   format)r!   fsvcs      r"   postOptionszOptions.postOptionsV   s    $D	
 	AAA

!!)"="=a"@A	A  	AAA

!!)"9"9!"<=	A !! 	<A55QQSTUCIIS!JJdiim88:;	<	NtF|,DL  A##%&&';a'?@@A  A##%&&';a'?@@A  	N""#7#>#>tF|#LMM	Ns#   .D*).E#F *6E #6F1G)__name__
__module____qualname__optParametersoptFlagsr	   CompletionsCompleteNetInterfacescompDatarE   r   r   r-   r0   r>   rA   rQ   r@   r#   r"   r   r      s    @:	
 	H
M 	07)H !u  !<!<!<!>?H EI((6(Nr#   r   c                    ddl m}m}m} g g }}| d   r$|j	                  |j                  | d                | d   r$|j	                  |j                  | d                | d   r$|j	                  |j                  | d	   
             ||fS )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   )r   clienthostsr   r   )r   r   )filer   r   )
resolvconf)twisted.namesr   r[   r\   r*   CacheResolverResolvercreateResolver)configr   r[   r\   cacls         r"   _buildResolversrf   r   s     32Bg
		%%%fY.?%@Al
		%..f\&:.;<k
		&''6-3H'IJr6Mr#   c                    t        |       \  }}t        j                  | j                  ||| d         }t	        j
                  |      }d|_        t        j                         }t        j                  |ft        j                  |ffD ]'  \  }} || d   || d         }|j                  |       ) | j                  D ]  }	|	j                  |        |S )Nr   r   r   r   )r   )rf   r   DNSServerFactoryrE   r   DNSDatagramProtocolnoisyr   MultiServicer   	TCPServer	UDPServersetServiceParentrD   )
rc   rd   re   rO   r   retklassargsrP   s
             r"   makeServicers      s    V$FBb"fY6GHA"AAG



 C **A.1C1CQ0GH  
s&.#1DE	3  {{ "S!"Jr#   )__doc__r&   rH   twisted.applicationr   r   r_   r   r   r   r   twisted.pythonr	   r   rf   rs   r@   r#   r"   <module>rw      s=   
 
  1 ; ;  ^Nemm ^NB.r#   